mirror of
https://github.com/phpbb/phpbb.git
synced 2025-09-08 07:10:51 +02:00
Compare commits
583 Commits
release-3.
...
release-3.
Author | SHA1 | Date | |
---|---|---|---|
|
2b0645b7b9 | ||
|
3b2119e535 | ||
|
c3f7d1bd19 | ||
|
f9c165d2c1 | ||
|
ff72df5218 | ||
|
4b382e93f0 | ||
|
034f1c2355 | ||
|
f905b40ce8 | ||
|
10ed7c569e | ||
|
c8ff4b4109 | ||
|
0e38bebaa5 | ||
|
a16ebf04d3 | ||
|
2131adac5c | ||
|
507efee633 | ||
|
f0ffb25a24 | ||
|
7a93730aab | ||
|
728b5d2b44 | ||
|
832c19314a | ||
|
c3ecaa35cd | ||
|
d3564a4a07 | ||
|
cc7c1c8447 | ||
|
f51ef14e44 | ||
|
29abad3dd4 | ||
|
1bae0513a8 | ||
|
2728921d6c | ||
|
3f60759a49 | ||
|
21791971aa | ||
|
6f573f710d | ||
|
be86694305 | ||
|
b693798a96 | ||
|
72f748f11f | ||
|
202fa648eb | ||
|
562601fd9b | ||
|
fc62538733 | ||
|
68434e6dbc | ||
|
af994e7a39 | ||
|
7160c67b2c | ||
|
83774be7a7 | ||
|
433803287a | ||
|
b798ab6f42 | ||
|
d40caeebca | ||
|
b707bdc4f1 | ||
|
13ddfa5e52 | ||
|
f07ce4f7b5 | ||
|
b890448882 | ||
|
dc610b5508 | ||
|
5bd2c067c5 | ||
|
dc80ffdb40 | ||
|
f9c251c7af | ||
|
765739c2a9 | ||
|
3f498c9e69 | ||
|
0a3698d08d | ||
|
f0ccf7d93e | ||
|
e2356f86e8 | ||
|
d431e1306c | ||
|
a14a666e86 | ||
|
ca7d63d4d7 | ||
|
6921565efe | ||
|
220d388cac | ||
|
0d166e87b8 | ||
|
469bf9227e | ||
|
0d04f53f37 | ||
|
761b87659d | ||
|
1849ce233b | ||
|
2bbf72e158 | ||
|
df93420bcd | ||
|
9e7ad86398 | ||
|
66f9c09ba5 | ||
|
1c5a4c1213 | ||
|
2975566650 | ||
|
43b597e88a | ||
|
90b4ebab90 | ||
|
8c29ef3188 | ||
|
8e8fa203b9 | ||
|
44fb54b9b7 | ||
|
f2e39f7edd | ||
|
e315ea90b8 | ||
|
2cd574321f | ||
|
59a84a71be | ||
|
96491a70e8 | ||
|
33afd3f350 | ||
|
deebd282a7 | ||
|
27b0719174 | ||
|
ab16595323 | ||
|
43d8432809 | ||
|
1fba679c68 | ||
|
271db031ad | ||
|
b4672f2665 | ||
|
75007697ae | ||
|
ca4a98a2de | ||
|
7fc8b55f8c | ||
|
6c1664f6d3 | ||
|
357e5a567d | ||
|
713c996a08 | ||
|
2af8713a48 | ||
|
36083872e0 | ||
|
c43ad073e4 | ||
|
a0f1ec852a | ||
|
a925605b88 | ||
|
3f4b7059cb | ||
|
cffdc8efff | ||
|
e8bbbbd6fa | ||
|
8d8dbb2129 | ||
|
5e302c7e15 | ||
|
ec3bab231d | ||
|
673433dadb | ||
|
0af07d1425 | ||
|
89f586e99e | ||
|
eead94c8a6 | ||
|
a0efae7734 | ||
|
be0696a954 | ||
|
8fa7e18e2b | ||
|
537ff0c567 | ||
|
08968bdb60 | ||
|
5949f912ba | ||
|
3f19d32f76 | ||
|
409bfafbf0 | ||
|
186259cbbc | ||
|
186115c65f | ||
|
a23a7602b7 | ||
|
bdf9af0abb | ||
|
444e5e6498 | ||
|
a578ce0119 | ||
|
86c773fbf9 | ||
|
e9310c928e | ||
|
3a7d17414d | ||
|
a4e37a8482 | ||
|
c51859c0bd | ||
|
572545a430 | ||
|
220490e4db | ||
|
4bf485395e | ||
|
ce90a215ba | ||
|
31c0466815 | ||
|
4fe2ec156c | ||
|
d0541a6440 | ||
|
95424f1b98 | ||
|
64b66a51b6 | ||
|
58856c06b0 | ||
|
440fdfdffc | ||
|
8f90b79457 | ||
|
871875d9aa | ||
|
ca98cd413a | ||
|
14f9917db6 | ||
|
552bda6266 | ||
|
c6f613bae5 | ||
|
70a56c208f | ||
|
b089116965 | ||
|
0cb00c9f99 | ||
|
52f559cd4b | ||
|
85ecd2c7be | ||
|
2a72b9b3ec | ||
|
68489b2c13 | ||
|
304750a88b | ||
|
a2407ce978 | ||
|
5a21f7eb97 | ||
|
358ddc95e8 | ||
|
349ab42fdc | ||
|
cc49d8f325 | ||
|
37b33e6b67 | ||
|
83f4074116 | ||
|
179c6067be | ||
|
97c5861d59 | ||
|
aebeb11d53 | ||
|
3bce8bce10 | ||
|
fe382708f5 | ||
|
4554376ac8 | ||
|
337d5db292 | ||
|
fe72d87460 | ||
|
4fd824953d | ||
|
75b993c6a3 | ||
|
087bf6fd35 | ||
|
fc27dc02b4 | ||
|
91847ed1fd | ||
|
e6ac4daf64 | ||
|
47acbdd138 | ||
|
73fd2f3573 | ||
|
0a14d7aff3 | ||
|
8b4c77784e | ||
|
e7a16f1eda | ||
|
31b8fdf964 | ||
|
afcc713d39 | ||
|
73b709d0ca | ||
|
ec140a558b | ||
|
c5082250ea | ||
|
89b6fb1168 | ||
|
3ed8cffad2 | ||
|
b7243fad62 | ||
|
8a1d148fa8 | ||
|
fab57f0d16 | ||
|
27abc18662 | ||
|
9e6c2251df | ||
|
15ba5f700d | ||
|
565f692541 | ||
|
bf07331a0e | ||
|
12073855dd | ||
|
8ed7ddfbb2 | ||
|
1345642c49 | ||
|
ad0c85293b | ||
|
f8e1c66e81 | ||
|
c89f4500f0 | ||
|
7182f5d88f | ||
|
7a92f6a3b6 | ||
|
c594f2ecbf | ||
|
db7f4d4c95 | ||
|
101829b4dc | ||
|
b8bdccbc44 | ||
|
2eb2c69db9 | ||
|
eb1cb07341 | ||
|
d5147c2271 | ||
|
79e6636092 | ||
|
5179e4f93f | ||
|
dc96e70d1b | ||
|
717d4840e2 | ||
|
22b8b45f28 | ||
|
6c5578a65b | ||
|
bf42eae114 | ||
|
f21a43be2f | ||
|
3606cce27f | ||
|
5b3eb2d61c | ||
|
fcd916cc4f | ||
|
f3b94b118a | ||
|
2e8315353e | ||
|
97912d74e2 | ||
|
da9da88d11 | ||
|
af1e8901e5 | ||
|
a2480f992d | ||
|
b8f85325d8 | ||
|
c4741399dd | ||
|
b03da3a9b2 | ||
|
7801bac09a | ||
|
023ec01611 | ||
|
335b23c679 | ||
|
720477a9da | ||
|
1581ee9d05 | ||
|
f631d6b84d | ||
|
36a8e48083 | ||
|
0dfbb60bc3 | ||
|
65226168ee | ||
|
c0a26e3d57 | ||
|
3d534a5eb6 | ||
|
5c695d709e | ||
|
e2d26e102d | ||
|
31703585cb | ||
|
fa1fd316fe | ||
|
bab86aac7f | ||
|
1f14f7c327 | ||
|
11ae11a156 | ||
|
5d4fccd235 | ||
|
dbb476d813 | ||
|
f4063e475d | ||
|
e64f96bf27 | ||
|
02fd679b26 | ||
|
46bc335524 | ||
|
448d67cc30 | ||
|
d55cdc3546 | ||
|
9e375f32eb | ||
|
ed64a69760 | ||
|
dc109b1952 | ||
|
09f17a438e | ||
|
68b3c5d1f0 | ||
|
60414dec86 | ||
|
2121b1274a | ||
|
ddc9e318d0 | ||
|
6a35385308 | ||
|
96a68bcccb | ||
|
25d42b0f10 | ||
|
99abb311c7 | ||
|
77b7d9ba69 | ||
|
1d2a654ad7 | ||
|
b5d36645f2 | ||
|
41bafd4d7d | ||
|
d29d42d7b9 | ||
|
20393592d7 | ||
|
0cded66ff2 | ||
|
a772949162 | ||
|
628e5fbae6 | ||
|
7dbfc1e59c | ||
|
042f47fc3f | ||
|
379900b4ed | ||
|
fd95355c61 | ||
|
2d736479d8 | ||
|
5b25b3e2d5 | ||
|
d753351edc | ||
|
30d1048c8e | ||
|
18d8f94317 | ||
|
b148bb5d70 | ||
|
ae6c3b0d34 | ||
|
d017b9aa3b | ||
|
537c415009 | ||
|
fba55791c1 | ||
|
dbd0304c1d | ||
|
e2a6a7e83a | ||
|
7aa639f050 | ||
|
7263f9bebd | ||
|
c4ff772c91 | ||
|
4c2a81724a | ||
|
101d3b7633 | ||
|
e046bd7498 | ||
|
175ffa869b | ||
|
b5ba220584 | ||
|
a62141ea68 | ||
|
9c636cfdbe | ||
|
f430a77731 | ||
|
7e003bf687 | ||
|
2862de45bd | ||
|
dfa533af4a | ||
|
4180950db7 | ||
|
2fcf49c839 | ||
|
5d98b66e95 | ||
|
aa7b4bdfce | ||
|
5c3dd124c4 | ||
|
e27da4a025 | ||
|
4cef4634fc | ||
|
c67dd0c591 | ||
|
d48ffde25d | ||
|
f9b1f9ced5 | ||
|
ca23d199c1 | ||
|
52ffe75888 | ||
|
40332ecfcc | ||
|
35d49f5150 | ||
|
97a24948e0 | ||
|
f4b2849aa2 | ||
|
937c029665 | ||
|
2225110c0d | ||
|
63fd22b227 | ||
|
6087f0347c | ||
|
407d179702 | ||
|
6a6c1b0463 | ||
|
65699d501d | ||
|
4a3c00d1c8 | ||
|
a9eacf43e8 | ||
|
ae672b0c7f | ||
|
582c1f3562 | ||
|
6e61804e45 | ||
|
6478e98308 | ||
|
2de198e30d | ||
|
a0d2f4cab1 | ||
|
8ff2a74fd9 | ||
|
b8c5537948 | ||
|
13fe7b3ed2 | ||
|
bcd4b01071 | ||
|
2c74cb71b5 | ||
|
dd43c6a61e | ||
|
e1abc3105b | ||
|
8bdb2ce6ba | ||
|
cd17633235 | ||
|
3c7e8325a0 | ||
|
426d8ce79f | ||
|
c9df803d3c | ||
|
38d7ad40a3 | ||
|
9d85422edb | ||
|
253b42372f | ||
|
842e40dab9 | ||
|
35c9357d2f | ||
|
4fb89504a9 | ||
|
710760b9e4 | ||
|
b487a3d9ef | ||
|
4a2b12a0c8 | ||
|
3a2374e37c | ||
|
0bb87b2de1 | ||
|
eb4a95f659 | ||
|
f3f1bfcbe8 | ||
|
f657ee51f8 | ||
|
d29d4389f9 | ||
|
f82e0a83d1 | ||
|
a478063d2b | ||
|
600588d623 | ||
|
31d101e68c | ||
|
1081aaee3e | ||
|
b9a5810716 | ||
|
dab4c10c2f | ||
|
f251c26fe6 | ||
|
d8ecb00f3d | ||
|
62c9996b2f | ||
|
001f32da95 | ||
|
1d0fdc446f | ||
|
3d2c1b8f97 | ||
|
eb867fc623 | ||
|
8ed759545e | ||
|
78732fd7c2 | ||
|
71ae82fbef | ||
|
2769ab701a | ||
|
9000936926 | ||
|
4396bfba65 | ||
|
e17f00fb6b | ||
|
9503996441 | ||
|
a505a3adf9 | ||
|
3bcc779e81 | ||
|
d3633c7f30 | ||
|
f08d18c99c | ||
|
5edb330366 | ||
|
33268e5a72 | ||
|
7f1f64b1dc | ||
|
bf9af92220 | ||
|
7d4d9770cf | ||
|
63a3033f15 | ||
|
02234783c6 | ||
|
1a284ebe8d | ||
|
fbd1741107 | ||
|
0725723813 | ||
|
3e85190798 | ||
|
18dd250f52 | ||
|
101681070b | ||
|
eb5d61044c | ||
|
c7631635fa | ||
|
b0d55a69c7 | ||
|
404f3269dc | ||
|
88f897bc86 | ||
|
bc5808ad87 | ||
|
bb20a88748 | ||
|
9ea60e3478 | ||
|
c38075d2c2 | ||
|
4ac3c545e1 | ||
|
0d7c33c1af | ||
|
1991df9519 | ||
|
4d5258b5a3 | ||
|
204b18dd59 | ||
|
89d1401a77 | ||
|
271c9d34dc | ||
|
af5a2c4a20 | ||
|
9090ddcfb6 | ||
|
0898c4c1cc | ||
|
db71ca7db1 | ||
|
db67dc5f70 | ||
|
d64b9e7038 | ||
|
2c9d49bf09 | ||
|
ab17c854cd | ||
|
0f10c6ff6f | ||
|
8eb48e2812 | ||
|
f2c53bfffd | ||
|
367f884d01 | ||
|
4a30818e12 | ||
|
a72a6514e7 | ||
|
9719d5a3d5 | ||
|
b79aa3e147 | ||
|
ecfd067f37 | ||
|
4d7b16f439 | ||
|
b0b70589a2 | ||
|
b1d8abf3da | ||
|
c20d84ce17 | ||
|
fc674873c7 | ||
|
c912e6feaa | ||
|
ced8599e30 | ||
|
8858c86c97 | ||
|
888683bda0 | ||
|
c3d664bbfe | ||
|
bd90a53589 | ||
|
1810688d0c | ||
|
ada8bc9da2 | ||
|
521aec5923 | ||
|
ce2196517b | ||
|
800fbdfed2 | ||
|
184d24bb16 | ||
|
a85536d9aa | ||
|
75c082e605 | ||
|
7fbfd7300e | ||
|
1e6a37431b | ||
|
81b02587cd | ||
|
2bac84c51f | ||
|
0e4a38956a | ||
|
70c28aace5 | ||
|
8276b3d337 | ||
|
a6a3899aea | ||
|
6cce62c0ca | ||
|
5304b7d0b3 | ||
|
614e10888c | ||
|
a4e2d89e03 | ||
|
5be990e959 | ||
|
e710304ef5 | ||
|
43be40c1ae | ||
|
a7d7dfee9c | ||
|
b2277e7bf6 | ||
|
740006ba60 | ||
|
76982b430f | ||
|
4ebd582947 | ||
|
210c5f5a59 | ||
|
12fdfe145a | ||
|
04899d1efd | ||
|
c72d443738 | ||
|
ffcfec044b | ||
|
5fbd4584be | ||
|
1785b9eb47 | ||
|
911c46cc61 | ||
|
c4cef8c427 | ||
|
32deb50f5c | ||
|
18f142e87d | ||
|
3d9ae6186f | ||
|
7f76d91128 | ||
|
71905e50e8 | ||
|
0e580d2ab0 | ||
|
078d076526 | ||
|
bdd384aa37 | ||
|
e7a1e16bc5 | ||
|
e7ad97de3a | ||
|
90dc5519c0 | ||
|
e680d46865 | ||
|
f5e3394550 | ||
|
fca72a0f6a | ||
|
be15d8718d | ||
|
b0df5e31cf | ||
|
3d4cc025e0 | ||
|
5542070169 | ||
|
777443d95c | ||
|
9db4983f03 | ||
|
a3f7bc2e51 | ||
|
ed48b5f226 | ||
|
bf81228d37 | ||
|
219e85c4e0 | ||
|
7f266a3664 | ||
|
43d7f15a25 | ||
|
bc7b998632 | ||
|
eedcb3bbe1 | ||
|
245f4df47c | ||
|
517c601482 | ||
|
83a8280554 | ||
|
1c8570d0f5 | ||
|
21faf69d31 | ||
|
b5daa91650 | ||
|
9ee7b9b81f | ||
|
27aba29d74 | ||
|
a6fb2a6b8e | ||
|
49c1904823 | ||
|
9b56a28be0 | ||
|
0925a22062 | ||
|
2f3bd918ac | ||
|
69a75da670 | ||
|
f671022a6d | ||
|
754945e6ff | ||
|
1afc0673dd | ||
|
d4d8aec02a | ||
|
f4a6a2c2d7 | ||
|
6deae170bd | ||
|
6fdb7486ad | ||
|
4c3cb4bc5c | ||
|
4544f5212c | ||
|
c61b9358ff | ||
|
5e70c9b831 | ||
|
52f5e54d8a | ||
|
02cbb864a5 | ||
|
7245bc9977 | ||
|
ecf19b13c8 | ||
|
aea56fcf57 | ||
|
90e4eb2451 | ||
|
ec87cc1f3e | ||
|
ff171f3a3b | ||
|
9e50e52fa5 | ||
|
f75c400db4 | ||
|
7b44e2c791 | ||
|
8b7ae7c796 | ||
|
57cb513b8b | ||
|
2aa9fc07d3 | ||
|
6369637fbf | ||
|
94d64c672e | ||
|
32eb2f427c | ||
|
8283f2393a | ||
|
9068909051 | ||
|
5f243ad665 | ||
|
bd91b6be87 | ||
|
645ceb1bfe | ||
|
7284bf5883 | ||
|
25a46ef4b3 | ||
|
b5a79d9a9d | ||
|
680361e865 | ||
|
c6a35237a2 | ||
|
ba417ad915 | ||
|
cc4a68f32a | ||
|
04574c75a3 | ||
|
f800bc09f9 | ||
|
1f00f48e71 | ||
|
88a23ec40d | ||
|
0aea8ecd83 | ||
|
4bb57f9814 | ||
|
ab8d328702 | ||
|
71f2801d78 | ||
|
c486634be8 | ||
|
7c839470b7 | ||
|
d8c9dd8802 | ||
|
22a251916c | ||
|
b98a81364f | ||
|
02600626cc | ||
|
aa9d24ad31 | ||
|
2d5fe90ed5 | ||
|
85eceeccbe |
@@ -64,9 +64,9 @@ before_test:
|
||||
if ($env:db -eq "mssql") {
|
||||
cd c:\tools\php\ext
|
||||
$DLLVersion = "4.1.6.1"
|
||||
appveyor DownloadFile http://windows.php.net/downloads/pecl/releases/sqlsrv/$($:DLLVersion)/php_sqlsrv-$($DLLVersion)-$($env:php -replace '([0-9])[.]([0-9])[.]?([0-9]+)?','$1.$2')-nts-vc14-x64.zip
|
||||
curl -o php_sqlsrv-$($DLLVersion)-$($env:php -replace '([0-9])[.]([0-9])[.]?([0-9]+)?','$1.$2')-nts-vc14-x64.zip https://windows.php.net/downloads/pecl/releases/sqlsrv/$($:DLLVersion)/php_sqlsrv-$($DLLVersion)-$($env:php -replace '([0-9])[.]([0-9])[.]?([0-9]+)?','$1.$2')-nts-vc14-x64.zip
|
||||
7z x -y php_sqlsrv-$($DLLVersion)-$($env:php -replace '([0-9])[.]([0-9])[.]?([0-9]+)?','$1.$2')-nts-vc14-x64.zip > $null
|
||||
appveyor-retry appveyor DownloadFile http://windows.php.net/downloads/pecl/releases/pdo_sqlsrv/$($DLLVersion)/php_pdo_sqlsrv-$($DLLVersion)-$($env:php -replace '([0-9])[.]([0-9])[.]?([0-9]+)?','$1.$2')-nts-vc14-x64.zip
|
||||
curl -o php_pdo_sqlsrv-$($DLLVersion)-$($env:php -replace '([0-9])[.]([0-9])[.]?([0-9]+)?','$1.$2')-nts-vc14-x64.zip https://windows.php.net/downloads/pecl/releases/pdo_sqlsrv/$($DLLVersion)/php_pdo_sqlsrv-$($DLLVersion)-$($env:php -replace '([0-9])[.]([0-9])[.]?([0-9]+)?','$1.$2')-nts-vc14-x64.zip
|
||||
7z x -y php_pdo_sqlsrv-$($DLLVersion)-$($env:php -replace '([0-9])[.]([0-9])[.]?([0-9]+)?','$1.$2')-nts-vc14-x64.zip > $null
|
||||
Remove-Item c:\tools\php\* -include .zip
|
||||
cd c:\tools\php
|
||||
|
@@ -1,6 +1,5 @@
|
||||
language: php
|
||||
sudo: required
|
||||
dist: precise
|
||||
|
||||
matrix:
|
||||
include:
|
||||
|
281
LICENSE
Normal file
281
LICENSE
Normal file
@@ -0,0 +1,281 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
675 Mass Ave, Cambridge, MA 02139, USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
@@ -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.2.3-RC1" />
|
||||
<property name="prevversion" value="3.2.2" />
|
||||
<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, 3.1.10, 3.1.11, 3.1.12, 3.2.0-a1, 3.2.0-a2, 3.2.0-b1, 3.2.0-b2, 3.2.0-RC1, 3.2.0-RC2, 3.2.0, 3.2.1" />
|
||||
<property name="newversion" value="3.2.6-RC1" />
|
||||
<property name="prevversion" value="3.2.5" />
|
||||
<property name="olderversions" value="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, 3.1.10, 3.1.11, 3.1.12, 3.2.0-a1, 3.2.0-a2, 3.2.0-b1, 3.2.0-b2, 3.2.0-RC1, 3.2.0-RC2, 3.2.0, 3.2.1, 3.2.2, 3.2.3, 3.2.4" />
|
||||
<!-- no configuration should be needed beyond this point -->
|
||||
|
||||
<property name="oldversions" value="${olderversions}, ${prevversion}" />
|
||||
|
@@ -33,7 +33,7 @@ class build_package
|
||||
var $status_begun = false;
|
||||
var $num_dots = 0;
|
||||
|
||||
function build_package($versions, $verbose = false)
|
||||
function __construct($versions, $verbose = false)
|
||||
{
|
||||
$this->versions = $versions;
|
||||
$this->verbose = $verbose;
|
||||
|
BIN
composer.phar
BIN
composer.phar
Binary file not shown.
@@ -147,6 +147,15 @@ then
|
||||
quit $ERR_LENGTH;
|
||||
fi
|
||||
|
||||
# Check for CR/LF line breaks
|
||||
if grep -q $'\r$' "$1"
|
||||
then
|
||||
complain "The commit message uses CR/LF line breaks, which are not permitted." >&2
|
||||
complain >&2
|
||||
|
||||
quit $ERR_EOF;
|
||||
fi
|
||||
|
||||
lines=$(wc -l "$1" | awk '{ print $1; }');
|
||||
expecting=header;
|
||||
in_description=0;
|
||||
|
@@ -37,12 +37,6 @@
|
||||
|
||||
<!-- IF S_ATTACHMENT_SETTINGS -->
|
||||
|
||||
<!-- IF not S_THUMBNAIL_SUPPORT -->
|
||||
<div class="errorbox">
|
||||
<p>{L_NO_THUMBNAIL_SUPPORT}</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<form id="attachsettings" method="post" action="{U_ACTION}">
|
||||
<!-- BEGIN options -->
|
||||
<!-- IF options.S_LEGEND -->
|
||||
|
@@ -20,7 +20,6 @@
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_START_RESTORE}" />
|
||||
<input class="button2" type="submit" id="delete" name="delete" value="{L_DELETE_BACKUP}" />
|
||||
<input class="button2" type="submit" id="download" name="download" value="{L_DOWNLOAD_BACKUP}" />
|
||||
</p>
|
||||
{S_FORM_TOKEN}
|
||||
</fieldset>
|
||||
@@ -72,7 +71,6 @@
|
||||
<dt><label for="where">{L_ACTION}{L_COLON}</label></dt>
|
||||
<dd>
|
||||
<label><input id="where" type="radio" class="radio" name="where" value="store" checked="checked" /> {L_STORE_LOCAL}</label>
|
||||
<label><input type="radio" class="radio" name="where" value="download" /> {L_DOWNLOAD}</label>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
|
@@ -238,7 +238,7 @@
|
||||
<form id="profile_fields" method="post" action="{U_ACTION}">
|
||||
|
||||
<fieldset class="quick">
|
||||
<input class="text small" type="text" name="field_ident" /> <select name="field_type">{S_TYPE_OPTIONS}</select>
|
||||
<select name="field_type">{S_TYPE_OPTIONS}</select>
|
||||
<input class="button1" type="submit" name="submit" value="{L_CREATE_NEW_FIELD}" />
|
||||
<input type="hidden" name="create" value="1" />
|
||||
{S_FORM_TOKEN}
|
||||
|
@@ -33,7 +33,7 @@
|
||||
<dt><label for="notifymethod">{L_NOTIFY_METHOD}{L_COLON}</label><br /><span>{L_NOTIFY_METHOD_EXPLAIN}</span></dt>
|
||||
<dd><label><input type="radio" class="radio" name="notifymethod" value="0"<!-- IF NOTIFY_EMAIL --> id="notifymethod" checked="checked"<!-- ENDIF --> /> {L_NOTIFY_METHOD_EMAIL}</label>
|
||||
<label><input type="radio" class="radio" name="notifymethod" value="1"<!-- IF NOTIFY_IM --> id="notifymethod" checked="checked"<!-- ENDIF --><!-- IF S_JABBER_DISABLED --> disabled="disabled"<!-- ENDIF --> /> {L_NOTIFY_METHOD_IM}</label>
|
||||
<label><input type="radio" class="radio" name="notifymethod" value="2"<!-- IF NOTIFY_BOTH --> id="notifymethod" checked="checked"<!-- ENDIF --> /> {L_NOTIFY_METHOD_BOTH}</label></dd>
|
||||
<label><input type="radio" class="radio" name="notifymethod" value="2"<!-- IF NOTIFY_BOTH --> id="notifymethod" checked="checked"<!-- ENDIF --><!-- IF S_JABBER_DISABLED --> disabled="disabled"<!-- ENDIF --> /> {L_NOTIFY_METHOD_BOTH}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="notifypm">{L_NOTIFY_ON_PM}{L_COLON}</label></dt>
|
||||
|
@@ -840,6 +840,7 @@ table.zebra-table tbody tr:nth-child(odd) {
|
||||
}
|
||||
|
||||
.row2 {
|
||||
word-break: break-all;
|
||||
background-color: #DCEBFE;
|
||||
}
|
||||
|
||||
|
@@ -20,6 +20,13 @@ var phpbbAlertTimer = null;
|
||||
|
||||
phpbb.isTouch = (window && typeof window.ontouchstart !== 'undefined');
|
||||
|
||||
// Add ajax pre-filter to prevent cross-domain script execution
|
||||
$.ajaxPrefilter(function(s) {
|
||||
if (s.crossDomain) {
|
||||
s.contents.script = false;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Display a loading screen
|
||||
*
|
||||
@@ -935,9 +942,9 @@ phpbb.addAjaxCallback('alt_text', function() {
|
||||
$anchor.each(function() {
|
||||
var $this = $(this);
|
||||
altText = $this.attr('data-alt-text');
|
||||
$this.attr('data-alt-text', $this.text());
|
||||
$this.attr('title', $.trim(altText));
|
||||
$this.text(altText);
|
||||
$this.attr('data-alt-text', $.trim($this.text()));
|
||||
$this.attr('title', altText);
|
||||
$this.children('span').text(altText);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1332,7 +1339,6 @@ phpbb.toggleDropdown = function() {
|
||||
marginLeft: 0,
|
||||
left: 0,
|
||||
marginRight: 0,
|
||||
right: 0,
|
||||
maxWidth: (windowWidth - 4) + 'px'
|
||||
});
|
||||
|
||||
@@ -1644,7 +1650,7 @@ phpbb.lazyLoadAvatars = function loadAvatars() {
|
||||
});
|
||||
};
|
||||
|
||||
$(window).load(phpbb.lazyLoadAvatars);
|
||||
$(window).on('load', phpbb.lazyLoadAvatars);
|
||||
|
||||
/**
|
||||
* Apply code editor to all textarea elements with data-bbcode attribute
|
||||
|
9
phpBB/assets/javascript/jquery.min.js
vendored
9
phpBB/assets/javascript/jquery.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -211,7 +211,7 @@ phpbb.plupload.updateHiddenData = function(row, attach, index) {
|
||||
.attr('type', 'hidden')
|
||||
.attr('name', 'attachment_data[' + index + '][' + key + ']')
|
||||
.attr('value', attach[key]);
|
||||
$('textarea', row).after(input);
|
||||
$(row).append(input);
|
||||
}
|
||||
};
|
||||
|
||||
|
18
phpBB/assets/plupload/plupload.full.min.js
vendored
18
phpBB/assets/plupload/plupload.full.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -71,9 +71,12 @@ require($phpbb_root_path . 'includes/compatibility_globals.' . $phpEx);
|
||||
|
||||
register_compatibility_globals();
|
||||
|
||||
/** @var \phpbb\config\config $config */
|
||||
$config = $phpbb_container->get('config');
|
||||
|
||||
/** @var \phpbb\language\language $language */
|
||||
$language = $phpbb_container->get('language');
|
||||
$language->set_default_language($phpbb_container->get('config')['default_lang']);
|
||||
$language->set_default_language($config['default_lang']);
|
||||
$language->add_lang(array('common', 'acp/common', 'cli'));
|
||||
|
||||
/* @var $user \phpbb\user */
|
||||
|
@@ -33,7 +33,7 @@
|
||||
"marc1706/fast-image-size": "^1.1",
|
||||
"paragonie/random_compat": "^1.4",
|
||||
"patchwork/utf8": "^1.1",
|
||||
"s9e/text-formatter": "~0.13.0",
|
||||
"s9e/text-formatter": "^1.3",
|
||||
"symfony/config": "^2.8",
|
||||
"symfony/console": "^2.8",
|
||||
"symfony/debug": "^2.8",
|
||||
|
491
phpBB/composer.lock
generated
491
phpBB/composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -3,6 +3,7 @@ services:
|
||||
class: phpbb\avatar\manager
|
||||
arguments:
|
||||
- '@config'
|
||||
- '@dispatcher'
|
||||
- '@avatar.driver_collection'
|
||||
|
||||
# ----- Avatar drivers -----
|
||||
|
@@ -208,6 +208,7 @@ services:
|
||||
console.command.thumbnail.delete:
|
||||
class: phpbb\console\command\thumbnail\delete
|
||||
arguments:
|
||||
- '@config'
|
||||
- '@user'
|
||||
- '@dbal.conn'
|
||||
- '%core.root_path%'
|
||||
@@ -217,6 +218,7 @@ services:
|
||||
console.command.thumbnail.generate:
|
||||
class: phpbb\console\command\thumbnail\generate
|
||||
arguments:
|
||||
- '@config'
|
||||
- '@user'
|
||||
- '@dbal.conn'
|
||||
- '@cache'
|
||||
|
@@ -35,6 +35,7 @@ services:
|
||||
- '@config_text'
|
||||
- '@dbal.conn'
|
||||
- '@user'
|
||||
- '@dispatcher'
|
||||
- '%core.root_path%'
|
||||
- '%core.php_ext%'
|
||||
|
||||
|
@@ -33,13 +33,6 @@ services:
|
||||
tags:
|
||||
- { name: install_obtain_data, order: 40 }
|
||||
|
||||
installer.obtain_data.obtain_imagick_path:
|
||||
class: phpbb\install\module\obtain_data\task\obtain_imagick_path
|
||||
arguments:
|
||||
- '@installer.helper.config'
|
||||
tags:
|
||||
- { name: install_obtain_data, order: 60 }
|
||||
|
||||
installer.obtain_data.obtain_server_data:
|
||||
class: phpbb\install\module\obtain_data\task\obtain_server_data
|
||||
arguments:
|
||||
|
@@ -50,6 +50,13 @@
|
||||
<ol>
|
||||
<li><a href="#changelog">Changelog</a>
|
||||
<ul>
|
||||
<li><a href="#v325">Changes since 3.2.5</a></li>
|
||||
<li><a href="#v325rc1">Changes since 3.2.5-RC1</a></li>
|
||||
<li><a href="#v324">Changes since 3.2.4</a></li>
|
||||
<li><a href="#v324rc1">Changes since 3.2.4-RC1</a></li>
|
||||
<li><a href="#v323">Changes since 3.2.3</a></li>
|
||||
<li><a href="#v323rc2">Changes since 3.2.3-RC2</a></li>
|
||||
<li><a href="#v323rc1">Changes since 3.2.3-RC1</a></li>
|
||||
<li><a href="#v322">Changes since 3.2.2</a></li>
|
||||
<li><a href="#v321">Changes since 3.2.1</a></li>
|
||||
<li><a href="#v320">Changes since 3.2.0</a></li>
|
||||
@@ -129,6 +136,259 @@
|
||||
<div class="inner">
|
||||
|
||||
<div class="content">
|
||||
<a name="v325"></a><h3>Changes since 3.2.5</h3>
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15509">PHPBB3-15509</a>] - Update database: info message is to scary</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15869">PHPBB3-15869</a>] - Cookies Problem with domains with special chars</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15876">PHPBB3-15876</a>] - Mysql 5.7 support Q&A plugin</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15883">PHPBB3-15883</a>] - No error for invalid usernames on bulk add to usergroup</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15904">PHPBB3-15904</a>] - PHP warning when accessing modules in ACP System tab</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15917">PHPBB3-15917</a>] - Unapproved posts count towards forum post count</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15918">PHPBB3-15918</a>] - Ban reason messages show backslash (\) before apostrophe -- ex. (don\'t).</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15919">PHPBB3-15919</a>] - Lint test throws PHP warnings due to node modules folder</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15931">PHPBB3-15931</a>] - Issues in PM report emails</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15954">PHPBB3-15954</a>] - Some calls to include() don't have a safeguard</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15957">PHPBB3-15957</a>] - User preferences show notification method "both" with disabled Jabber in ACP</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15959">PHPBB3-15959</a>] - Travis Network Test is Failing for news.cnet.com</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15965">PHPBB3-15965</a>] - Console command to handle thumbnails have files directory hardcoded</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15975">PHPBB3-15975</a>] - Delete or prune an user doesn't remove its entries in the user_notifications table</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15986">PHPBB3-15986</a>] - Add missing language key for posting.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15996">PHPBB3-15996</a>] - Invalid data provider function name in migrator_tool_permission_test</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16006">PHPBB3-16006</a>] - Duplicate form IDs in UCP oauth form</li>
|
||||
</ul>
|
||||
<h4>Improvement</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15884">PHPBB3-15884</a>] - Add memberlist_body_* events</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15889">PHPBB3-15889</a>] - Add core.memberlist_modify_memberrow_sql</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15890">PHPBB3-15890</a>] - Add core.memberlist_modify_viewprofile_sql</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15891">PHPBB3-15891</a>] - Add core.memberlist_modify_view_profile_template_vars</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15898">PHPBB3-15898</a>] - Add core.ucp_pm_compose_template</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15899">PHPBB3-15899</a>] - Add core.modify_attachment_sql_ary_on_* events</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15901">PHPBB3-15901</a>] - Add mcp_post_* template events</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15910">PHPBB3-15910</a>] - Pass object arguments by reference implicitly</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15914">PHPBB3-15914</a>] - Add core.modify_memberlist_viewprofile_group_sql and core.modify_memberlist_viewprofile_group_data</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15915">PHPBB3-15915</a>] - Add template events to posting_attach_body.html</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15924">PHPBB3-15924</a>] - Move from precise to trusty builds</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15926">PHPBB3-15926</a>] - Deny installs on PHP >= 7.3@dev - Increase min. req. to 5.4.7</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15928">PHPBB3-15928</a>] - Remove support for backup download</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15939">PHPBB3-15939</a>] - Pagination docblocks</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15941">PHPBB3-15941</a>] - Replace MAX SQL in functions_posting.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15942">PHPBB3-15942</a>] - Array to string conversion when permanently deleting a post</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15948">PHPBB3-15948</a>] - Add core.mcp_change_topic_type_after/before</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15949">PHPBB3-15949</a>] - [Template] - ucp_profile_signature_posting_editor_options_prepend</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15950">PHPBB3-15950</a>] - Add SQL transactions to mcp_main.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15960">PHPBB3-15960</a>] - Add SQL transactions to functions_admin.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15970">PHPBB3-15970</a>] - Add core.message_admin_form_submit_before</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15972">PHPBB3-15972</a>] - Add core.markread_after</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15992">PHPBB3-15992</a>] - Fix breadcrumb schema</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15995">PHPBB3-15995</a>] - Add core.memberlist_modify_sort_pagination_params</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15997">PHPBB3-15997</a>] - Increase webdriver timeout for UI tests</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16001">PHPBB3-16001</a>] - Append data to the OAuth's redirect URL</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16009">PHPBB3-16009</a>] - Display OAuth login's buttons in a row.</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16010">PHPBB3-16010</a>] - Automatically check order of events in events.md file</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16018">PHPBB3-16018</a>] - Update composer and dependencies for 3.2.6</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16020">PHPBB3-16020</a>] - Fix placement of event viewforum_body_topic_author_username_append</li>
|
||||
</ul>
|
||||
<h4>New Feature</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15944">PHPBB3-15944</a>] - Add core.posting_modify_quote_attributes</li>
|
||||
</ul>
|
||||
<h4>Task</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15921">PHPBB3-15921</a>] - Update TextFormatter to 1.3.2</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15953">PHPBB3-15953</a>] - pm reported missing border color</li>
|
||||
</ul>
|
||||
|
||||
<a name="v325rc1"></a><h3>Changes since 3.2.5-RC1</h3>
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15888">PHPBB3-15888</a>] - Update link to user guide</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15893">PHPBB3-15893</a>] - Call to undefined $user in phpbb_format_quote() when BBCodes are disabled</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15911">PHPBB3-15911</a>] - SQL general error on DB update from 3.0 branch</li>
|
||||
</ul>
|
||||
<h4>Hardening</h4>
|
||||
<ul>
|
||||
<li>[SECURITY-229] - Update to latest version of jQuery 1.x and add ajax prefilter</li>
|
||||
</ul>
|
||||
|
||||
<a name="v324"></a><h3>Changes since 3.2.4</h3>
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15665">PHPBB3-15665</a>] - MSSQL implementation crashes when upload directory > 2GB</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15858">PHPBB3-15858</a>] - Unapproved User(s) appearing as Guest in Team Page.</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15867">PHPBB3-15867</a>] - Contact form without class</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15871">PHPBB3-15871</a>] - PHP 7.1+ warning in ACP extensions module</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15875">PHPBB3-15875</a>] - BBCode parsing error (PHP fatal error)</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15881">PHPBB3-15881</a>] - Login keys are not reset after password update in some cases</li>
|
||||
</ul>
|
||||
<h4>Improvement</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15542">PHPBB3-15542</a>] - Some JS files being called without assets version</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15859">PHPBB3-15859</a>] - Modify the topic ordering if needed</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15863">PHPBB3-15863</a>] - Modify the topic sort ordering from the beginning</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15870">PHPBB3-15870</a>] - Modify the forum ID to handle the correct display of viewtopic if needed</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15872">PHPBB3-15872</a>] - Add show_user_activity to display_user_activity_modify_actives</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15873">PHPBB3-15873</a>] - Event to add/modify MCP report details template data.</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15878">PHPBB3-15878</a>] - Add attachment to core.ucp_pm_view_message</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15879">PHPBB3-15879</a>] - Modify attachment's poster_id for get_submitted_attachment_data</li>
|
||||
</ul>
|
||||
|
||||
<a name="v324rc1"></a><h3>Changes since 3.2.4-RC1</h3>
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15860">PHPBB3-15860</a>] - Backups filenames arent saved in the expected format</li>
|
||||
</ul>
|
||||
<h4>Security Issue</h4>
|
||||
<ul>
|
||||
<li>[SECURITY-227] - Phar deserialization in ACP leads to Remote Code Execution</li>
|
||||
</ul>
|
||||
|
||||
<a name="v323"></a><h3>Changes since 3.2.3</h3>
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11453">PHPBB3-11453</a>] - phpbb_notification_method_email unnecessarily loads data of banned users.</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12430">PHPBB3-12430</a>] - hilit not removed from URL after search</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13043">PHPBB3-13043</a>] - Fixing HTML5 conformance</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13128">PHPBB3-13128</a>] - sql_query_info, max_matches and charset_type removed from sphinxsearch 2.2.2-beta</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14812">PHPBB3-14812</a>] - No shadow pruning with system cron enabled</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15329">PHPBB3-15329</a>] - View/Edit drafts contain underlying HTML coding</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15420">PHPBB3-15420</a>] - Quote Notification Sent for Edited Posts by Non Author</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15494">PHPBB3-15494</a>] - Users can only be removed once from newly registered users</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15507">PHPBB3-15507</a>] - PHP 7.2 Warning</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15544">PHPBB3-15544</a>] - Migrations don't delete modules in every case</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15552">PHPBB3-15552</a>] - Private Message (PM) "find a member" button "select marked" not working</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15557">PHPBB3-15557</a>] - Used composer version has bug with PHP 7.2</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15583">PHPBB3-15583</a>] - Updating session time in AJAX request ignores 60 seconds check</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15593">PHPBB3-15593</a>] - Disabling "print view" (permission or private messages settings) actually doesn't block the feature</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15600">PHPBB3-15600</a>] - Ban reasons are not escaped in mcp_ban.html template</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15604">PHPBB3-15604</a>] - Appveyor builds unable to download and unpack MSSQL drivers</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15606">PHPBB3-15606</a>] - Hide/Reveal 'Profile' Link According to Permission Setting</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15607">PHPBB3-15607</a>] - Board's cookies not deleted on disabled board</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15611">PHPBB3-15611</a>] - Prosilver mobile layout: Misaligned text in user profile</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15612">PHPBB3-15612</a>] - PHP warning with MSSQL on PHP 7.2</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15616">PHPBB3-15616</a>] - Jumpbox doesn't display in the login forum page (access to forum with password)</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15618">PHPBB3-15618</a>] - Team page link always appears when you are logout (anonymous), even if you don't have the permission (unlike memberlist link)</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15619">PHPBB3-15619</a>] - Legends of custom profile fields could be hidden in memberlist, when viewing an user group</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15620">PHPBB3-15620</a>] - Avatar gallery can be unusable on multilingual boards, unless people use the board default language</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15622">PHPBB3-15622</a>] - Quoting messages (while viewing one, not inside post editor) can return a wrong chain</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15637">PHPBB3-15637</a>] - Event list only has first line of PHP event description</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15651">PHPBB3-15651</a>] - Migration 'if' conditions only support booleans</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15659">PHPBB3-15659</a>] - retrieve_block_vars generates warnings in PHP 7.2</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15666">PHPBB3-15666</a>] - Language system is not fully supported in Twig</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15670">PHPBB3-15670</a>] - Group forum permission: Can see forum gives NO SQL ERROR</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15673">PHPBB3-15673</a>] - Duplicated links for (ACP,MCP,FAQ) in QuickLinks and main nav bar</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15680">PHPBB3-15680</a>] - INSTALL.html should point to 3.2 documentation instead of 3.1</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15693">PHPBB3-15693</a>] - gen_rand_string() don't return a string with the expected length</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15695">PHPBB3-15695</a>] - gen_rand_string can return less characters than expected</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15700">PHPBB3-15700</a>] - {T_THEME_LANG_NAME} template variable could be wrong when log off</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15705">PHPBB3-15705</a>] - phpbbcli language parse error in PHP <= 5.5.38</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15716">PHPBB3-15716</a>] - OAuth link information remains after deleting a user, causes fatal exception</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15717">PHPBB3-15717</a>] - Old email address missing from log when user changes email address</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15723">PHPBB3-15723</a>] - gen_rand_string() return wrong number or characters sometimes</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15733">PHPBB3-15733</a>] - Remove unused variables related to deprecated flood control</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15742">PHPBB3-15742</a>] - Remove get_magic_quotes_gpc from type_cast_helper</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15751">PHPBB3-15751</a>] - Warning when update with CLI</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15755">PHPBB3-15755</a>] - Broken events in /phpbb/attachment/delete.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15758">PHPBB3-15758</a>] - String INSECURE_REDIRECT is not shown translated</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15770">PHPBB3-15770</a>] - Sphinx assertion fails on unread posts when exceeding an offset of 999</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15788">PHPBB3-15788</a>] - Return button from privacy policy shows wrong text</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15817">PHPBB3-15817</a>] - Unable to install in Oracle 11R2 Express</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15824">PHPBB3-15824</a>] - UI test framework Broken for extensions</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15830">PHPBB3-15830</a>] - 'core.modify_notification_message' event is useless</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15849">PHPBB3-15849</a>] - PHP 7.2 compat for bitfield class</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15852">PHPBB3-15852</a>] - IPv6 address not working in Whois</li>
|
||||
</ul>
|
||||
<h4>Improvement</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-10432">PHPBB3-10432</a>] - Don't require username when user forgets password</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11500">PHPBB3-11500</a>] - on Custom profile fields the field_ident field lacks name</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12739">PHPBB3-12739</a>] - Make the font color palette in ACP same as Prosilver</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14656">PHPBB3-14656</a>] - Add a list-unsubscribe header with the unsubscribe URL</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14990">PHPBB3-14990</a>] - Add core event to the Twig environment</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15554">PHPBB3-15554</a>] - Simple footer after load js</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15579">PHPBB3-15579</a>] - Add core.ucp_main_front_modify_sql and core.ucp_main_front_modify_template_vars</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15590">PHPBB3-15590</a>] - Add PHP events after adding, updating and deleting BBCodes</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15628">PHPBB3-15628</a>] - newtopic_notify.txt does not have directly link to the new topic</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15638">PHPBB3-15638</a>] - Add word-break for overflowing.</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15642">PHPBB3-15642</a>] - String to be used in HTML element contains ">"</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15656">PHPBB3-15656</a>] - Add "View post" link in the mod logs on the ACP</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15661">PHPBB3-15661</a>] - Add core.viewtopic_modify_poll_ajax_data</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15662">PHPBB3-15662</a>] - Add $this->template to core.modify_notification_message</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15668">PHPBB3-15668</a>] - Change JQuery .load(fn) event to .on('load',fn)</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15674">PHPBB3-15674</a>] - Edit language lines in file en\acp\profile.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15683">PHPBB3-15683</a>] - Better error message when commit message has CRLF</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15696">PHPBB3-15696</a>] - 'if' module tool should support calling other tools</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15706">PHPBB3-15706</a>] - [Template] - mcp_post_report_buttons_top_*</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15719">PHPBB3-15719</a>] - Add core event on viewtopic post_list query for query modification</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15726">PHPBB3-15726</a>] - Implement selective purge in APCu cache driver</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15735">PHPBB3-15735</a>] - [Template] - *_content_after (for posts)</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15737">PHPBB3-15737</a>] - [PHP] - Add $user_rows to core.delete_user_before</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15762">PHPBB3-15762</a>] - Topics per page Conformity</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15768">PHPBB3-15768</a>] - Add a license to a repository</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15771">PHPBB3-15771</a>] - Q&A configuration instructions not optilmal</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15799">PHPBB3-15799</a>] - Find correct poll for voting animation</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15803">PHPBB3-15803</a>] - Add core events on ucp_pm_compose for additional message list actions</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15819">PHPBB3-15819</a>] - Add core event to functions_posting to modify notifications</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15825">PHPBB3-15825</a>] - Add core.acp_manage_forums_move_content_sql_before</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15826">PHPBB3-15826</a>] - Add core.mcp_main_fork_sql_after</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15827">PHPBB3-15827</a>] - [Template] - Add *_username_{prepend/append} template events</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15831">PHPBB3-15831</a>] - ACP signature update should trigger event</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15832">PHPBB3-15832</a>] - ACP avatar update event</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15833">PHPBB3-15833</a>] - ACP and UCP avatar delete events</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15837">PHPBB3-15837</a>] - Add core.ucp_register_welcome_email_before</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15838">PHPBB3-15838</a>] - Add core.ucp_register_register_after</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15839">PHPBB3-15839</a>] - Add core.ucp_login_link_template_after</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15841">PHPBB3-15841</a>] - Allow postrow pm link to be modified by event</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15848">PHPBB3-15848</a>] - Up-version plupload to v2.3.6 to fix image rotation issues</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15850">PHPBB3-15850</a>] - Use standard SQL cache for notification types</li>
|
||||
</ul>
|
||||
<h4>New Feature</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15792">PHPBB3-15792</a>] - [Template] - confirm_delete_body_delete_reason_before</li>
|
||||
</ul>
|
||||
<h4>Task</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15596">PHPBB3-15596</a>] - Migrate from data-vocabulary.org to schema.org</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15621">PHPBB3-15621</a>] - Some graphical inconsistencies with colored users groups in posting, UCP and MCP</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15701">PHPBB3-15701</a>] - {SIGNATURE} variable is added in mcp_post.html but not defined in MCP</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15809">PHPBB3-15809</a>] - Allow events with twig syntax</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15857">PHPBB3-15857</a>] - Add rubencm to CREDITS.txt</li>
|
||||
</ul>
|
||||
|
||||
<a name="v323rc2"></a><h3>Changes since 3.2.3-RC2</h3>
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15504">PHPBB3-15504</a>] - phpBB Debug warning in 3.2.2</li>
|
||||
</ul>
|
||||
<h4>Improvement</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15740">PHPBB3-15740</a>] - Terms & Privavy hardcoded</li>
|
||||
</ul>
|
||||
|
||||
<a name="v323rc1"></a><h3>Changes since 3.2.3-RC1</h3>
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11847">PHPBB3-11847</a>] - auth_provider_oauth migration must depend on at least one migration that ensures the module tables exist as expected</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15548">PHPBB3-15548</a>] - Dead link in ACP_COOKIE_SETTINGS_EXPLAIN language entry</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15586">PHPBB3-15586</a>] - When creating a module without the modes array a missing 'module_langname' index is accessed</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15613">PHPBB3-15613</a>] - Notification dropdown said to be not RTL compliant</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15627">PHPBB3-15627</a>] - Improve wording of YES_ACCURATE_PM_BUTTON + EXPLAIN</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15678">PHPBB3-15678</a>] - PHP warning in filesystem.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15731">PHPBB3-15731</a>] - Fix acp_search language parameters when deleting index</li>
|
||||
</ul>
|
||||
<h4>Improvement</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15630">PHPBB3-15630</a>] - Change <b> to <strong> </li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15633">PHPBB3-15633</a>] - Remove extra space in GROUP_MAX_RECIPIENTS_EXPLAIN</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15657">PHPBB3-15657</a>] - Add core.mcp_queue_get_posts_for_posts_query_before and core.mcp_queue_get_posts_modify_post_row</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15676">PHPBB3-15676</a>] - Display privacy policy & terms of use more prominently</li>
|
||||
</ul>
|
||||
<h4>Task</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15677">PHPBB3-15677</a>] - Updated dependencies for 3.2.3-RC2</li>
|
||||
</ul>
|
||||
|
||||
<a name="v322"></a><h3>Changes since 3.2.2</h3>
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
|
@@ -29,6 +29,7 @@ phpBB Developers: bantu (Andreas Fischer)
|
||||
Hanakin (Michael Miday)
|
||||
MichaelC (Michael Cullum)
|
||||
Nicofuma (Tristan Darricau)
|
||||
rubencm (Rubén Calvo)
|
||||
|
||||
For a list of phpBB Team members, please see:
|
||||
http://www.phpbb.com/about/team/
|
||||
@@ -103,3 +104,6 @@ Text_Diff-0.2.1 http://pear.php.net/package/Text_Diff
|
||||
MIT licenced:
|
||||
Symfony2 (c) 2004-2011 Fabien Potencier, https://symfony.com/
|
||||
Cookie Consent (c) 2015 Silktide Ltd, https://cookieconsent.insites.com
|
||||
|
||||
Emoji by:
|
||||
Twemoji (c) 2018 Twitter, Inc, https://twemoji.twitter.com/
|
||||
|
@@ -44,7 +44,7 @@
|
||||
<p>
|
||||
A basic overview of running phpBB can be found in the accompanying <a href="README.html">README</a> file.
|
||||
Please ensure you read that document in addition to this! For more detailed information on using, installing,
|
||||
updating and converting phpBB you should read <a href="https://www.phpbb.com/support/docs/en/3.1/ug/">the documentation</a>
|
||||
updating and converting phpBB you should read <a href="https://www.phpbb.com/support/docs/en/3.2/ug/">the documentation</a>
|
||||
available online.
|
||||
</p>
|
||||
</div>
|
||||
@@ -147,7 +147,7 @@
|
||||
<li>Oracle</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>PHP 5.4.7+</strong> with support for the database you intend to use.</li>
|
||||
<li><strong>PHP 5.4.7+</strong> but less than <strong>PHP 7.3</strong> with support for the database you intend to use.</li>
|
||||
<li>The following PHP modules are required:
|
||||
<ul>
|
||||
<li>json</li>
|
||||
@@ -159,7 +159,6 @@
|
||||
<li>zlib Compression support</li>
|
||||
<li>Remote FTP support</li>
|
||||
<li>XML support</li>
|
||||
<li>ImageMagick support</li>
|
||||
<li>GD Support</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -29,7 +29,6 @@ source source_phpbb_{SPHINX_ID}_main
|
||||
AND p.post_id >= $start AND p.post_id <= $end
|
||||
sql_query_post =
|
||||
sql_query_post_index = UPDATE phpbb_sphinx SET max_doc_id = $maxid WHERE counter_id = 1
|
||||
sql_query_info = SELECT * FROM phpbb_posts WHERE post_id = $id
|
||||
sql_attr_uint = forum_id
|
||||
sql_attr_uint = topic_id
|
||||
sql_attr_uint = poster_id
|
||||
@@ -72,7 +71,6 @@ index index_phpbb_{SPHINX_ID}_main
|
||||
morphology = none
|
||||
stopwords =
|
||||
min_word_len = 2
|
||||
charset_type = utf-8
|
||||
charset_table = U+FF10..U+FF19->0..9, 0..9, U+FF41..U+FF5A->a..z, U+FF21..U+FF3A->a..z, A..Z->a..z, a..z, U+0149, U+017F, U+0138, U+00DF, U+00FF, U+00C0..U+00D6->U+00E0..U+00F6, U+00E0..U+00F6, U+00D8..U+00DE->U+00F8..U+00FE, U+00F8..U+00FE, U+0100->U+0101, U+0101, U+0102->U+0103, U+0103, U+0104->U+0105, U+0105, U+0106->U+0107, U+0107, U+0108->U+0109, U+0109, U+010A->U+010B, U+010B, U+010C->U+010D, U+010D, U+010E->U+010F, U+010F, U+0110->U+0111, U+0111, U+0112->U+0113, U+0113, U+0114->U+0115, U+0115, U+0116->U+0117, U+0117, U+0118->U+0119, U+0119, U+011A->U+011B, U+011B, U+011C->U+011D, U+011D, U+011E->U+011F, U+011F, U+0130->U+0131, U+0131, U+0132->U+0133, U+0133, U+0134->U+0135, U+0135, U+0136->U+0137, U+0137, U+0139->U+013A, U+013A, U+013B->U+013C, U+013C, U+013D->U+013E, U+013E, U+013F->U+0140, U+0140, U+0141->U+0142, U+0142, U+0143->U+0144, U+0144, U+0145->U+0146, U+0146, U+0147->U+0148, U+0148, U+014A->U+014B, U+014B, U+014C->U+014D, U+014D, U+014E->U+014F, U+014F, U+0150->U+0151, U+0151, U+0152->U+0153, U+0153, U+0154->U+0155, U+0155, U+0156->U+0157, U+0157, U+0158->U+0159, U+0159, U+015A->U+015B, U+015B, U+015C->U+015D, U+015D, U+015E->U+015F, U+015F, U+0160->U+0161, U+0161, U+0162->U+0163, U+0163, U+0164->U+0165, U+0165, U+0166->U+0167, U+0167, U+0168->U+0169, U+0169, U+016A->U+016B, U+016B, U+016C->U+016D, U+016D, U+016E->U+016F, U+016F, U+0170->U+0171, U+0171, U+0172->U+0173, U+0173, U+0174->U+0175, U+0175, U+0176->U+0177, U+0177, U+0178->U+00FF, U+00FF, U+0179->U+017A, U+017A, U+017B->U+017C, U+017C, U+017D->U+017E, U+017E, U+0410..U+042F->U+0430..U+044F, U+0430..U+044F, U+4E00..U+9FFF
|
||||
min_prefix_len = 0
|
||||
min_infix_len = 0
|
||||
@@ -88,13 +86,11 @@ indexer
|
||||
}
|
||||
searchd
|
||||
{
|
||||
compat_sphinxql_magics = 0
|
||||
listen = localhost:9312
|
||||
log = {DATA_PATH}/log/searchd.log
|
||||
query_log = {DATA_PATH}/log/sphinx-query.log
|
||||
read_timeout = 5
|
||||
max_children = 30
|
||||
pid_file = {DATA_PATH}/searchd.pid
|
||||
max_matches = 20000
|
||||
binlog_path = {DATA_PATH}
|
||||
}
|
||||
|
@@ -164,7 +164,6 @@ class acp_attachments
|
||||
'img_create_thumbnail' => array('lang' => 'CREATE_THUMBNAIL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
'img_max_thumb_width' => array('lang' => 'MAX_THUMB_WIDTH', 'validate' => 'int:0:999999999999999', 'type' => 'number:0:999999999999999', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
|
||||
'img_min_thumb_filesize' => array('lang' => 'MIN_THUMB_FILESIZE', 'validate' => 'int:0:999999999999999', 'type' => 'number:0:999999999999999', 'explain' => true, 'append' => ' ' . $user->lang['BYTES']),
|
||||
'img_imagick' => array('lang' => 'IMAGICK_PATH', 'validate' => 'absolute_path', 'type' => 'text:20:200', 'explain' => true, 'append' => ' <span>[ <a href="' . $this->u_action . '&action=imgmagick">' . $user->lang['SEARCH_IMAGICK'] . '</a> ]</span>'),
|
||||
'img_max' => array('lang' => 'MAX_IMAGE_SIZE', 'validate' => 'int:0:9999', 'type' => 'dimension:0:9999', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
|
||||
'img_link' => array('lang' => 'IMAGE_LINK_SIZE', 'validate' => 'int:0:9999', 'type' => 'dimension:0:9999', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
|
||||
)
|
||||
@@ -234,38 +233,6 @@ class acp_attachments
|
||||
|
||||
$template->assign_var('S_ATTACHMENT_SETTINGS', true);
|
||||
|
||||
if ($action == 'imgmagick')
|
||||
{
|
||||
$this->new_config['img_imagick'] = $this->search_imagemagick();
|
||||
}
|
||||
|
||||
// We strip eventually manual added convert program, we only want the patch
|
||||
if ($this->new_config['img_imagick'])
|
||||
{
|
||||
// Change path separator
|
||||
$this->new_config['img_imagick'] = str_replace('\\', '/', $this->new_config['img_imagick']);
|
||||
$this->new_config['img_imagick'] = str_replace(array('convert', '.exe'), array('', ''), $this->new_config['img_imagick']);
|
||||
|
||||
// Check for trailing slash
|
||||
if (substr($this->new_config['img_imagick'], -1) !== '/')
|
||||
{
|
||||
$this->new_config['img_imagick'] .= '/';
|
||||
}
|
||||
}
|
||||
|
||||
$supported_types = get_supported_image_types();
|
||||
|
||||
// Check Thumbnail Support
|
||||
if (!$this->new_config['img_imagick'] && (!isset($supported_types['format']) || !count($supported_types['format'])))
|
||||
{
|
||||
$this->new_config['img_create_thumbnail'] = 0;
|
||||
}
|
||||
|
||||
$template->assign_vars(array(
|
||||
'U_SEARCH_IMAGICK' => $this->u_action . '&action=imgmagick',
|
||||
'S_THUMBNAIL_SUPPORT' => (!$this->new_config['img_imagick'] && (!isset($supported_types['format']) || !count($supported_types['format']))) ? false : true)
|
||||
);
|
||||
|
||||
// Secure Download Options - Same procedure as with banning
|
||||
$allow_deny = ($this->new_config['secure_allow_deny']) ? 'ALLOWED' : 'DISALLOWED';
|
||||
|
||||
@@ -1270,7 +1237,7 @@ class acp_attachments
|
||||
|
||||
$row['extension'] = strtolower(trim((string) $row['extension']));
|
||||
$comment = ($row['attach_comment'] && !$row['in_message']) ? str_replace(array("\n", "\r"), array('<br />', "\n"), $row['attach_comment']) : '';
|
||||
$display_cat = $extensions[$row['extension']]['display_cat'];
|
||||
$display_cat = isset($extensions[$row['extension']]['display_cat']) ? $extensions[$row['extension']]['display_cat'] : ATTACHMENT_CATEGORY_NONE;
|
||||
$l_downloaded_viewed = ($display_cat == ATTACHMENT_CATEGORY_NONE) ? 'DOWNLOAD_COUNTS' : 'VIEWED_COUNTS';
|
||||
|
||||
$template->assign_block_vars('attachments', array(
|
||||
@@ -1495,47 +1462,6 @@ class acp_attachments
|
||||
return $group_select;
|
||||
}
|
||||
|
||||
/**
|
||||
* Search Imagick
|
||||
*/
|
||||
function search_imagemagick()
|
||||
{
|
||||
$imagick = '';
|
||||
|
||||
$exe = ((defined('PHP_OS')) && (preg_match('#^win#i', PHP_OS))) ? '.exe' : '';
|
||||
|
||||
$magic_home = getenv('MAGICK_HOME');
|
||||
|
||||
if (empty($magic_home))
|
||||
{
|
||||
$locations = array('C:/WINDOWS/', 'C:/WINNT/', 'C:/WINDOWS/SYSTEM/', 'C:/WINNT/SYSTEM/', 'C:/WINDOWS/SYSTEM32/', 'C:/WINNT/SYSTEM32/', '/usr/bin/', '/usr/sbin/', '/usr/local/bin/', '/usr/local/sbin/', '/opt/', '/usr/imagemagick/', '/usr/bin/imagemagick/');
|
||||
$path_locations = str_replace('\\', '/', (explode(($exe) ? ';' : ':', getenv('PATH'))));
|
||||
|
||||
$locations = array_merge($path_locations, $locations);
|
||||
|
||||
foreach ($locations as $location)
|
||||
{
|
||||
// The path might not end properly, fudge it
|
||||
if (substr($location, -1) !== '/')
|
||||
{
|
||||
$location .= '/';
|
||||
}
|
||||
|
||||
if (@file_exists($location) && @is_readable($location . 'mogrify' . $exe) && @filesize($location . 'mogrify' . $exe) > 3000)
|
||||
{
|
||||
$imagick = str_replace('\\', '/', $location);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$imagick = str_replace('\\', '/', $magic_home);
|
||||
}
|
||||
|
||||
return $imagick;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Settings
|
||||
*/
|
||||
|
@@ -295,6 +295,22 @@ class acp_bbcodes
|
||||
|
||||
$phpbb_log->add('admin', $user->data['user_id'], $user->ip, $log_action, false, array($data['bbcode_tag']));
|
||||
|
||||
/**
|
||||
* Event after a BBCode has been added or updated
|
||||
*
|
||||
* @event core.acp_bbcodes_modify_create_after
|
||||
* @var string action Type of the action: modify|create
|
||||
* @var int bbcode_id The id of the added or updated bbcode
|
||||
* @var array sql_ary Array with bbcode data (read only)
|
||||
* @since 3.2.4-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'action',
|
||||
'bbcode_id',
|
||||
'sql_ary',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.acp_bbcodes_modify_create_after', compact($vars)));
|
||||
|
||||
trigger_error($user->lang[$lang] . adm_back_link($this->u_action));
|
||||
}
|
||||
else
|
||||
@@ -325,10 +341,28 @@ class acp_bbcodes
|
||||
{
|
||||
if (confirm_box(true))
|
||||
{
|
||||
$bbcode_tag = $row['bbcode_tag'];
|
||||
|
||||
$db->sql_query('DELETE FROM ' . BBCODES_TABLE . " WHERE bbcode_id = $bbcode_id");
|
||||
$cache->destroy('sql', BBCODES_TABLE);
|
||||
$phpbb_container->get('text_formatter.cache')->invalidate();
|
||||
$phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_BBCODE_DELETE', false, array($row['bbcode_tag']));
|
||||
$phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_BBCODE_DELETE', false, array($bbcode_tag));
|
||||
|
||||
/**
|
||||
* Event after a BBCode has been deleted
|
||||
*
|
||||
* @event core.acp_bbcodes_delete_after
|
||||
* @var string action Type of the action: delete
|
||||
* @var int bbcode_id The id of the deleted bbcode
|
||||
* @var string bbcode_tag The tag of the deleted bbcode
|
||||
* @since 3.2.4-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'action',
|
||||
'bbcode_id',
|
||||
'bbcode_tag',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.acp_bbcodes_delete_after', compact($vars)));
|
||||
|
||||
if ($request->is_ajax())
|
||||
{
|
||||
|
@@ -23,6 +23,7 @@ class acp_database
|
||||
{
|
||||
var $db_tools;
|
||||
var $u_action;
|
||||
public $page_title;
|
||||
|
||||
function main($id, $mode)
|
||||
{
|
||||
@@ -69,18 +70,13 @@ class acp_database
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$store = $download = $structure = $schema_data = false;
|
||||
$store = $structure = $schema_data = false;
|
||||
|
||||
if ($where == 'store_and_download' || $where == 'store')
|
||||
if ($where == 'store')
|
||||
{
|
||||
$store = true;
|
||||
}
|
||||
|
||||
if ($where == 'store_and_download' || $where == 'download')
|
||||
{
|
||||
$download = true;
|
||||
}
|
||||
|
||||
if ($type == 'full' || $type == 'structure')
|
||||
{
|
||||
$structure = true;
|
||||
@@ -98,8 +94,9 @@ class acp_database
|
||||
|
||||
$filename = 'backup_' . $time . '_' . unique_id();
|
||||
|
||||
/** @var phpbb\db\extractor\extractor_interface $extractor Database extractor */
|
||||
$extractor = $phpbb_container->get('dbal.extractor');
|
||||
$extractor->init_extractor($format, $filename, $time, $download, $store);
|
||||
$extractor->init_extractor($format, $filename, $time, false, $store);
|
||||
|
||||
$extractor->write_start($table_prefix);
|
||||
|
||||
@@ -145,11 +142,6 @@ class acp_database
|
||||
|
||||
$phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_DB_BACKUP');
|
||||
|
||||
if ($download == true)
|
||||
{
|
||||
exit;
|
||||
}
|
||||
|
||||
trigger_error($user->lang['BACKUP_SUCCESS'] . adm_back_link($this->u_action));
|
||||
break;
|
||||
|
||||
@@ -201,16 +193,10 @@ class acp_database
|
||||
case 'submit':
|
||||
$delete = $request->variable('delete', '');
|
||||
$file = $request->variable('file', '');
|
||||
$download = $request->variable('download', '');
|
||||
|
||||
if (!preg_match('#^backup_\d{10,}_[a-z\d]{16}\.(sql(?:\.(?:gz|bz2))?)$#', $file, $matches))
|
||||
{
|
||||
trigger_error($user->lang['BACKUP_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
$backup_info = $this->get_backup_file($phpbb_root_path . 'store/', $file);
|
||||
|
||||
$file_name = $phpbb_root_path . 'store/' . $matches[0];
|
||||
|
||||
if (!file_exists($file_name) || !is_readable($file_name))
|
||||
if (empty($backup_info) || !is_readable($backup_info['file_name']))
|
||||
{
|
||||
trigger_error($user->lang['BACKUP_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
@@ -219,7 +205,7 @@ class acp_database
|
||||
{
|
||||
if (confirm_box(true))
|
||||
{
|
||||
unlink($file_name);
|
||||
unlink($backup_info['file_name']);
|
||||
$phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_DB_DELETE');
|
||||
trigger_error($user->lang['BACKUP_DELETE'] . adm_back_link($this->u_action));
|
||||
}
|
||||
@@ -228,50 +214,12 @@ class acp_database
|
||||
confirm_box(false, $user->lang['DELETE_SELECTED_BACKUP'], build_hidden_fields(array('delete' => $delete, 'file' => $file)));
|
||||
}
|
||||
}
|
||||
else if ($download || confirm_box(true))
|
||||
else if (confirm_box(true))
|
||||
{
|
||||
if ($download)
|
||||
{
|
||||
$name = $matches[0];
|
||||
|
||||
switch ($matches[1])
|
||||
{
|
||||
case 'sql':
|
||||
$mimetype = 'text/x-sql';
|
||||
break;
|
||||
case 'sql.bz2':
|
||||
$mimetype = 'application/x-bzip2';
|
||||
break;
|
||||
case 'sql.gz':
|
||||
$mimetype = 'application/x-gzip';
|
||||
break;
|
||||
}
|
||||
|
||||
header('Cache-Control: private, no-cache');
|
||||
header("Content-Type: $mimetype; name=\"$name\"");
|
||||
header("Content-disposition: attachment; filename=$name");
|
||||
|
||||
@set_time_limit(0);
|
||||
|
||||
$fp = @fopen($file_name, 'rb');
|
||||
|
||||
if ($fp !== false)
|
||||
{
|
||||
while (!feof($fp))
|
||||
{
|
||||
echo fread($fp, 8192);
|
||||
}
|
||||
fclose($fp);
|
||||
}
|
||||
|
||||
flush();
|
||||
exit;
|
||||
}
|
||||
|
||||
switch ($matches[1])
|
||||
switch ($backup_info['extensions'])
|
||||
{
|
||||
case 'sql':
|
||||
$fp = fopen($file_name, 'rb');
|
||||
$fp = fopen($backup_info['file_name'], 'rb');
|
||||
$read = 'fread';
|
||||
$seek = 'fseek';
|
||||
$eof = 'feof';
|
||||
@@ -280,7 +228,7 @@ class acp_database
|
||||
break;
|
||||
|
||||
case 'sql.bz2':
|
||||
$fp = bzopen($file_name, 'r');
|
||||
$fp = bzopen($backup_info['file_name'], 'r');
|
||||
$read = 'bzread';
|
||||
$seek = '';
|
||||
$eof = 'feof';
|
||||
@@ -289,13 +237,17 @@ class acp_database
|
||||
break;
|
||||
|
||||
case 'sql.gz':
|
||||
$fp = gzopen($file_name, 'rb');
|
||||
$fp = gzopen($backup_info['file_name'], 'rb');
|
||||
$read = 'gzread';
|
||||
$seek = 'gzseek';
|
||||
$eof = 'gzeof';
|
||||
$close = 'gzclose';
|
||||
$fgetd = 'fgetd';
|
||||
break;
|
||||
|
||||
default:
|
||||
trigger_error($user->lang['BACKUP_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
return;
|
||||
}
|
||||
|
||||
switch ($db->get_sql_layer())
|
||||
@@ -375,43 +327,13 @@ class acp_database
|
||||
trigger_error($user->lang['RESTORE_SUCCESS'] . adm_back_link($this->u_action));
|
||||
break;
|
||||
}
|
||||
else if (!$download)
|
||||
else
|
||||
{
|
||||
confirm_box(false, $user->lang['RESTORE_SELECTED_BACKUP'], build_hidden_fields(array('file' => $file)));
|
||||
}
|
||||
|
||||
default:
|
||||
$methods = array('sql');
|
||||
$available_methods = array('sql.gz' => 'zlib', 'sql.bz2' => 'bz2');
|
||||
|
||||
foreach ($available_methods as $type => $module)
|
||||
{
|
||||
if (!@extension_loaded($module))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
$methods[] = $type;
|
||||
}
|
||||
|
||||
$dir = $phpbb_root_path . 'store/';
|
||||
$dh = @opendir($dir);
|
||||
|
||||
$backup_files = array();
|
||||
|
||||
if ($dh)
|
||||
{
|
||||
while (($file = readdir($dh)) !== false)
|
||||
{
|
||||
if (preg_match('#^backup_(\d{10,})_[a-z\d]{16}\.(sql(?:\.(?:gz|bz2))?)$#', $file, $matches))
|
||||
{
|
||||
if (in_array($matches[2], $methods))
|
||||
{
|
||||
$backup_files[(int) $matches[1]] = $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir($dh);
|
||||
}
|
||||
$backup_files = $this->get_file_list($phpbb_root_path . 'store/');
|
||||
|
||||
if (!empty($backup_files))
|
||||
{
|
||||
@@ -420,8 +342,8 @@ class acp_database
|
||||
foreach ($backup_files as $name => $file)
|
||||
{
|
||||
$template->assign_block_vars('files', array(
|
||||
'FILE' => $file,
|
||||
'NAME' => $user->format_date($name, 'd-m-Y H:i:s', true),
|
||||
'FILE' => sha1($file),
|
||||
'NAME' => $user->format_date($name, 'd-m-Y H:i', true),
|
||||
'SUPPORTED' => true,
|
||||
));
|
||||
}
|
||||
@@ -435,6 +357,92 @@ class acp_database
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get backup file from file hash
|
||||
*
|
||||
* @param string $directory Relative path to directory
|
||||
* @param string $file_hash Hash of selected file
|
||||
*
|
||||
* @return array Backup file data or empty array if unable to find file
|
||||
*/
|
||||
protected function get_backup_file($directory, $file_hash)
|
||||
{
|
||||
$backup_data = [];
|
||||
|
||||
$file_list = $this->get_file_list($directory);
|
||||
$supported_extensions = $this->get_supported_extensions();
|
||||
|
||||
foreach ($file_list as $file)
|
||||
{
|
||||
preg_match('#^backup_(\d{10,})_(?:[a-z\d]{16}|[a-z\d]{32})\.(sql(?:\.(?:gz|bz2))?)$#i', $file, $matches);
|
||||
if (sha1($file) === $file_hash && in_array($matches[2], $supported_extensions))
|
||||
{
|
||||
$backup_data = [
|
||||
'file_name' => $directory . $file,
|
||||
'extension' => $matches[2],
|
||||
];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $backup_data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get backup file list for directory
|
||||
*
|
||||
* @param string $directory Relative path to backup directory
|
||||
*
|
||||
* @return array List of backup files in specified directory
|
||||
*/
|
||||
protected function get_file_list($directory)
|
||||
{
|
||||
$supported_extensions = $this->get_supported_extensions();
|
||||
|
||||
$dh = @opendir($directory);
|
||||
|
||||
$backup_files = [];
|
||||
|
||||
if ($dh)
|
||||
{
|
||||
while (($file = readdir($dh)) !== false)
|
||||
{
|
||||
if (preg_match('#^backup_(\d{10,})_(?:[a-z\d]{16}|[a-z\d]{32})\.(sql(?:\.(?:gz|bz2))?)$#i', $file, $matches))
|
||||
{
|
||||
if (in_array($matches[2], $supported_extensions))
|
||||
{
|
||||
$backup_files[(int) $matches[1]] = $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir($dh);
|
||||
}
|
||||
|
||||
return $backup_files;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get supported extensions for backup
|
||||
*
|
||||
* @return array List of supported extensions
|
||||
*/
|
||||
protected function get_supported_extensions()
|
||||
{
|
||||
$extensions = ['sql'];
|
||||
$available_methods = ['sql.gz' => 'zlib', 'sql.bz2' => 'bz2'];
|
||||
|
||||
foreach ($available_methods as $type => $module)
|
||||
{
|
||||
if (!@extension_loaded($module))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
$extensions[] = $type;
|
||||
}
|
||||
|
||||
return $extensions;
|
||||
}
|
||||
}
|
||||
|
||||
// get how much space we allow for a chunk of data, very similar to phpMyAdmin's way of doing things ;-) (hey, we only do this for MySQL anyway :P)
|
||||
|
@@ -35,11 +35,13 @@ class acp_extensions
|
||||
private $request;
|
||||
private $phpbb_dispatcher;
|
||||
private $ext_manager;
|
||||
private $phpbb_container;
|
||||
private $php_ini;
|
||||
|
||||
function main()
|
||||
{
|
||||
// Start the page
|
||||
global $config, $user, $template, $request, $phpbb_extension_manager, $phpbb_root_path, $phpbb_log, $phpbb_dispatcher;
|
||||
global $config, $user, $template, $request, $phpbb_extension_manager, $phpbb_root_path, $phpbb_log, $phpbb_dispatcher, $phpbb_container;
|
||||
|
||||
$this->config = $config;
|
||||
$this->template = $template;
|
||||
@@ -48,6 +50,8 @@ class acp_extensions
|
||||
$this->log = $phpbb_log;
|
||||
$this->phpbb_dispatcher = $phpbb_dispatcher;
|
||||
$this->ext_manager = $phpbb_extension_manager;
|
||||
$this->phpbb_container = $phpbb_container;
|
||||
$this->php_ini = $this->phpbb_container->get('php_ini');
|
||||
|
||||
$this->user->add_lang(array('install', 'acp/extensions', 'migrator'));
|
||||
|
||||
@@ -57,7 +61,7 @@ class acp_extensions
|
||||
$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);
|
||||
$safe_time_limit = ($this->php_ini->getNumeric('max_execution_time') / 2);
|
||||
$start_time = time();
|
||||
|
||||
// Cancel action
|
||||
|
@@ -1012,7 +1012,7 @@ class acp_forums
|
||||
}
|
||||
|
||||
$range_test_ary = array(
|
||||
array('lang' => 'FORUM_TOPICS_PAGE', 'value' => $forum_data_ary['forum_topics_per_page'], 'column_type' => 'TINT:0'),
|
||||
array('lang' => 'FORUM_TOPICS_PAGE', 'value' => $forum_data_ary['forum_topics_per_page'], 'column_type' => 'USINT:0'),
|
||||
);
|
||||
|
||||
if (!empty($forum_data_ary['forum_image']) && !file_exists($phpbb_root_path . $forum_data_ary['forum_image']))
|
||||
@@ -1541,6 +1541,16 @@ class acp_forums
|
||||
|
||||
$table_ary = array(LOG_TABLE, POSTS_TABLE, TOPICS_TABLE, DRAFTS_TABLE, TOPICS_TRACK_TABLE);
|
||||
|
||||
/**
|
||||
* Perform additional actions before move forum content
|
||||
*
|
||||
* @event core.acp_manage_forums_move_content_sql_before
|
||||
* @var array table_ary Array of tables from which forum_id will be updated
|
||||
* @since 3.2.4-RC1
|
||||
*/
|
||||
$vars = array('table_ary');
|
||||
extract($phpbb_dispatcher->trigger_event('core.acp_manage_forums_move_content_sql_before', compact($vars)));
|
||||
|
||||
foreach ($table_ary as $table)
|
||||
{
|
||||
$sql = "UPDATE $table
|
||||
|
@@ -29,6 +29,9 @@ class acp_groups
|
||||
global $phpbb_root_path, $phpbb_admin_path, $phpEx;
|
||||
global $request, $phpbb_container, $phpbb_dispatcher;
|
||||
|
||||
/** @var \phpbb\language\language $language Language object */
|
||||
$language = $phpbb_container->get('language');
|
||||
|
||||
$user->add_lang('acp/groups');
|
||||
$this->tpl_name = 'acp_groups';
|
||||
$this->page_title = 'ACP_GROUPS_MANAGE';
|
||||
@@ -293,7 +296,19 @@ class acp_groups
|
||||
// Add user/s to group
|
||||
if ($error = group_user_add($group_id, false, $name_ary, $group_name, $default, $leader, 0, $group_row))
|
||||
{
|
||||
trigger_error($user->lang[$error] . adm_back_link($this->u_action . '&action=list&g=' . $group_id), E_USER_WARNING);
|
||||
$display_message = $language->lang($error);
|
||||
|
||||
if ($error == 'GROUP_USERS_INVALID')
|
||||
{
|
||||
// Find which users don't exist
|
||||
$actual_name_ary = $name_ary;
|
||||
$actual_user_id_ary = [];
|
||||
user_get_id_name($actual_user_id_ary, $actual_name_ary, false, true);
|
||||
|
||||
$display_message = $language->lang('GROUP_USERS_INVALID', implode($language->lang('COMMA_SEPARATOR'), array_udiff($name_ary, $actual_name_ary, 'strcasecmp')));
|
||||
}
|
||||
|
||||
trigger_error($display_message . adm_back_link($this->u_action . '&action=list&g=' . $group_id), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$message = ($leader) ? 'GROUP_MODS_ADDED' : 'GROUP_USERS_ADDED';
|
||||
|
@@ -24,9 +24,9 @@ class acp_inactive
|
||||
var $u_action;
|
||||
var $p_master;
|
||||
|
||||
function acp_inactive(&$p_master)
|
||||
function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
function main($id, $mode)
|
||||
|
@@ -151,7 +151,7 @@ class acp_logs
|
||||
{
|
||||
$data = array();
|
||||
|
||||
$checks = array('viewtopic', 'viewlogs', 'viewforum');
|
||||
$checks = array('viewpost', 'viewtopic', 'viewlogs', 'viewforum');
|
||||
foreach ($checks as $check)
|
||||
{
|
||||
if (isset($row[$check]) && $row[$check])
|
||||
|
@@ -676,7 +676,7 @@ class acp_permissions
|
||||
/**
|
||||
* Apply permissions
|
||||
*/
|
||||
function set_permissions($mode, $permission_type, &$auth_admin, &$user_id, &$group_id)
|
||||
function set_permissions($mode, $permission_type, $auth_admin, &$user_id, &$group_id)
|
||||
{
|
||||
global $db, $cache, $user, $auth;
|
||||
global $request;
|
||||
@@ -765,7 +765,7 @@ class acp_permissions
|
||||
/**
|
||||
* Apply all permissions
|
||||
*/
|
||||
function set_all_permissions($mode, $permission_type, &$auth_admin, &$user_id, &$group_id)
|
||||
function set_all_permissions($mode, $permission_type, $auth_admin, &$user_id, &$group_id)
|
||||
{
|
||||
global $db, $cache, $user, $auth;
|
||||
global $request;
|
||||
@@ -881,7 +881,7 @@ class acp_permissions
|
||||
/**
|
||||
* Remove permissions
|
||||
*/
|
||||
function remove_permissions($mode, $permission_type, &$auth_admin, &$user_id, &$group_id, &$forum_id)
|
||||
function remove_permissions($mode, $permission_type, $auth_admin, &$user_id, &$group_id, &$forum_id)
|
||||
{
|
||||
global $user, $db, $cache, $auth;
|
||||
|
||||
|
@@ -845,7 +845,7 @@ class acp_profile
|
||||
/**
|
||||
* Build all Language specific options
|
||||
*/
|
||||
function build_language_options(&$cp, $field_type, $action = 'create')
|
||||
function build_language_options($cp, $field_type, $action = 'create')
|
||||
{
|
||||
global $user, $config, $db, $request;
|
||||
|
||||
@@ -942,7 +942,7 @@ class acp_profile
|
||||
/**
|
||||
* Save Profile Field
|
||||
*/
|
||||
function save_profile_field(&$cp, $field_type, $action = 'create')
|
||||
function save_profile_field($cp, $field_type, $action = 'create')
|
||||
{
|
||||
global $db, $config, $user, $phpbb_container, $phpbb_log, $request, $phpbb_dispatcher;
|
||||
|
||||
|
@@ -349,7 +349,7 @@ class acp_search
|
||||
$totaltime = microtime(true) - $starttime;
|
||||
$rows_per_second = $row_count / $totaltime;
|
||||
meta_refresh(1, append_sid($this->u_action . '&action=delete&skip_rows=' . $post_counter . '&hash=' . generate_link_hash('acp_search')));
|
||||
trigger_error($user->lang('SEARCH_INDEX_DELETE_REDIRECT', (int) $row_count, $post_counter, $rows_per_second));
|
||||
trigger_error($user->lang('SEARCH_INDEX_DELETE_REDIRECT', (int) $row_count, $post_counter) . $user->lang('SEARCH_INDEX_DELETE_REDIRECT_RATE', $rows_per_second));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -24,9 +24,9 @@ class acp_users
|
||||
var $u_action;
|
||||
var $p_master;
|
||||
|
||||
function acp_users(&$p_master)
|
||||
function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
function main($id, $mode)
|
||||
@@ -1883,6 +1883,17 @@ class acp_users
|
||||
'user_avatar_height' => $result['avatar_height'],
|
||||
);
|
||||
|
||||
/**
|
||||
* Modify users preferences data before assigning it to the template
|
||||
*
|
||||
* @event core.acp_users_avatar_sql
|
||||
* @var array user_row Array with user data
|
||||
* @var array result Array with user avatar data to be updated in the DB
|
||||
* @since 3.2.4-RC1
|
||||
*/
|
||||
$vars = array('user_row', 'result');
|
||||
extract($phpbb_dispatcher->trigger_event('core.acp_users_avatar_sql', compact($vars)));
|
||||
|
||||
$sql = 'UPDATE ' . USERS_TABLE . '
|
||||
SET ' . $db->sql_build_array('UPDATE', $result) . '
|
||||
WHERE user_id = ' . (int) $user_id;
|
||||
@@ -2085,6 +2096,17 @@ class acp_users
|
||||
'user_sig_bbcode_bitfield' => $bbcode_bitfield,
|
||||
);
|
||||
|
||||
/**
|
||||
* Modify user signature before it is stored in the DB
|
||||
*
|
||||
* @event core.acp_users_modify_signature_sql_ary
|
||||
* @var array user_row Array with user data
|
||||
* @var array sql_ary Array with user signature data to be updated in the DB
|
||||
* @since 3.2.4-RC1
|
||||
*/
|
||||
$vars = array('user_row', 'sql_ary');
|
||||
extract($phpbb_dispatcher->trigger_event('core.acp_users_modify_signature_sql_ary', compact($vars)));
|
||||
|
||||
$sql = 'UPDATE ' . USERS_TABLE . '
|
||||
SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
|
||||
WHERE user_id = ' . $user_id;
|
||||
|
@@ -27,7 +27,7 @@ class auth_admin extends \phpbb\auth\auth
|
||||
/**
|
||||
* Init auth settings
|
||||
*/
|
||||
function auth_admin()
|
||||
function __construct()
|
||||
{
|
||||
global $db, $cache;
|
||||
|
||||
@@ -819,7 +819,7 @@ class auth_admin extends \phpbb\auth\auth
|
||||
|
||||
// Because we just changed the options and also purged the options cache, we instantly update/regenerate it for later calls to succeed.
|
||||
$this->acl_options = array();
|
||||
$this->auth_admin();
|
||||
$this->__construct();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@@ -35,9 +35,18 @@ class bbcode
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* Init bbcode cache entries if bitfield is specified
|
||||
*/
|
||||
function bbcode($bitfield = '')
|
||||
function __construct($bitfield = '')
|
||||
{
|
||||
$this->bbcode_set_bitfield($bitfield);
|
||||
}
|
||||
|
||||
/**
|
||||
* Init bbcode cache entries if bitfield is specified
|
||||
*
|
||||
* @param string $bbcode_bitfield The bbcode bitfield
|
||||
*/
|
||||
function bbcode_set_bitfield($bitfield = '')
|
||||
{
|
||||
if ($bitfield)
|
||||
{
|
||||
|
@@ -29,7 +29,7 @@ function register_compatibility_globals()
|
||||
{
|
||||
global $phpbb_container;
|
||||
|
||||
global $cache, $phpbb_dispatcher, $request, $user, $auth, $db, $config, $phpbb_log;
|
||||
global $cache, $phpbb_dispatcher, $request, $user, $auth, $db, $config, $language, $phpbb_log;
|
||||
global $symfony_request, $phpbb_filesystem, $phpbb_path_helper, $phpbb_extension_manager, $template;
|
||||
|
||||
// set up caching
|
||||
@@ -48,6 +48,9 @@ function register_compatibility_globals()
|
||||
/* @var $user \phpbb\user */
|
||||
$user = $phpbb_container->get('user');
|
||||
|
||||
/* @var \phpbb\language\language $language */
|
||||
$language = $phpbb_container->get('language');
|
||||
|
||||
/* @var $auth \phpbb\auth\auth */
|
||||
$auth = $phpbb_container->get('auth');
|
||||
|
||||
|
@@ -28,7 +28,7 @@ if (!defined('IN_PHPBB'))
|
||||
*/
|
||||
|
||||
// phpBB Version
|
||||
@define('PHPBB_VERSION', '3.2.3-RC1');
|
||||
@define('PHPBB_VERSION', '3.2.6-RC1');
|
||||
|
||||
// QA-related
|
||||
// define('PHPBB_QA', 1);
|
||||
|
@@ -50,7 +50,7 @@ class diff
|
||||
* @param array &$to_content An array of strings.
|
||||
* @param bool $preserve_cr If true, \r is replaced by a new line in the diff output
|
||||
*/
|
||||
function diff(&$from_content, &$to_content, $preserve_cr = true)
|
||||
function __construct(&$from_content, &$to_content, $preserve_cr = true)
|
||||
{
|
||||
$diff_engine = new diff_engine();
|
||||
$this->_edits = $diff_engine->diff($from_content, $to_content, $preserve_cr);
|
||||
@@ -330,14 +330,14 @@ class mapped_diff extends diff
|
||||
* compared when computing the diff.
|
||||
* @param array $mapped_to_lines This array should have the same number of elements as $to_lines.
|
||||
*/
|
||||
function mapped_diff(&$from_lines, &$to_lines, &$mapped_from_lines, &$mapped_to_lines)
|
||||
function __construct(&$from_lines, &$to_lines, &$mapped_from_lines, &$mapped_to_lines)
|
||||
{
|
||||
if (count($from_lines) != count($mapped_from_lines) || count($to_lines) != count($mapped_to_lines))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
parent::diff($mapped_from_lines, $mapped_to_lines);
|
||||
parent::__construct($mapped_from_lines, $mapped_to_lines);
|
||||
|
||||
$xi = $yi = 0;
|
||||
for ($i = 0; $i < count($this->_edits); $i++)
|
||||
@@ -394,7 +394,7 @@ class diff_op
|
||||
*/
|
||||
class diff_op_copy extends diff_op
|
||||
{
|
||||
function diff_op_copy($orig, $final = false)
|
||||
function __construct($orig, $final = false)
|
||||
{
|
||||
if (!is_array($final))
|
||||
{
|
||||
@@ -419,7 +419,7 @@ class diff_op_copy extends diff_op
|
||||
*/
|
||||
class diff_op_delete extends diff_op
|
||||
{
|
||||
function diff_op_delete($lines)
|
||||
function __construct($lines)
|
||||
{
|
||||
$this->orig = $lines;
|
||||
$this->final = false;
|
||||
@@ -440,7 +440,7 @@ class diff_op_delete extends diff_op
|
||||
*/
|
||||
class diff_op_add extends diff_op
|
||||
{
|
||||
function diff_op_add($lines)
|
||||
function __construct($lines)
|
||||
{
|
||||
$this->final = $lines;
|
||||
$this->orig = false;
|
||||
@@ -461,7 +461,7 @@ class diff_op_add extends diff_op
|
||||
*/
|
||||
class diff_op_change extends diff_op
|
||||
{
|
||||
function diff_op_change($orig, $final)
|
||||
function __construct($orig, $final)
|
||||
{
|
||||
$this->orig = $orig;
|
||||
$this->final = $final;
|
||||
@@ -498,7 +498,7 @@ class diff3 extends diff
|
||||
* @param bool $preserve_cr If true, \r\n and bare \r are replaced by a new line
|
||||
* in the diff output
|
||||
*/
|
||||
function diff3(&$orig, &$final1, &$final2, $preserve_cr = true)
|
||||
function __construct(&$orig, &$final1, &$final2, $preserve_cr = true)
|
||||
{
|
||||
$diff_engine = new diff_engine();
|
||||
|
||||
@@ -754,7 +754,7 @@ class diff3 extends diff
|
||||
*/
|
||||
class diff3_op
|
||||
{
|
||||
function diff3_op($orig = false, $final1 = false, $final2 = false)
|
||||
function __construct($orig = false, $final1 = false, $final2 = false)
|
||||
{
|
||||
$this->orig = $orig ? $orig : array();
|
||||
$this->final1 = $final1 ? $final1 : array();
|
||||
@@ -1066,7 +1066,7 @@ class diff3_op
|
||||
*/
|
||||
class diff3_op_copy extends diff3_op
|
||||
{
|
||||
function diff3_op_copy($lines = false)
|
||||
function __construct($lines = false)
|
||||
{
|
||||
$this->orig = $lines ? $lines : array();
|
||||
$this->final1 = &$this->orig;
|
||||
@@ -1092,7 +1092,7 @@ class diff3_op_copy extends diff3_op
|
||||
*/
|
||||
class diff3_block_builder
|
||||
{
|
||||
function diff3_block_builder()
|
||||
function __construct()
|
||||
{
|
||||
$this->_init();
|
||||
}
|
||||
|
@@ -56,7 +56,7 @@ class diff_renderer
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
function diff_renderer($params = array())
|
||||
function __construct($params = array())
|
||||
{
|
||||
foreach ($params as $param => $value)
|
||||
{
|
||||
|
@@ -66,29 +66,48 @@ function set_var(&$result, $var, $type, $multibyte = false)
|
||||
/**
|
||||
* Generates an alphanumeric random string of given length
|
||||
*
|
||||
* @param int $num_chars Length of random string, defaults to 8.
|
||||
* This number should be less or equal than 64.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function gen_rand_string($num_chars = 8)
|
||||
{
|
||||
// [a, z] + [0, 9] = 36
|
||||
return substr(strtoupper(base_convert(unique_id(), 16, 36)), 0, $num_chars);
|
||||
$range = array_merge(range('A', 'Z'), range(0, 9));
|
||||
$size = count($range);
|
||||
|
||||
$output = '';
|
||||
for ($i = 0; $i < $num_chars; $i++)
|
||||
{
|
||||
$rand = random_int(0, $size-1);
|
||||
$output .= $range[$rand];
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a user-friendly alphanumeric random string of given length
|
||||
* We remove 0 and O so users cannot confuse those in passwords etc.
|
||||
*
|
||||
* @param int $num_chars Length of random string, defaults to 8.
|
||||
* This number should be less or equal than 64.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function gen_rand_string_friendly($num_chars = 8)
|
||||
{
|
||||
$rand_str = unique_id();
|
||||
$range = array_merge(range('A', 'N'), range('P', 'Z'), range(1, 9));
|
||||
$size = count($range);
|
||||
|
||||
// Remove Z and Y from the base_convert(), replace 0 with Z and O with Y
|
||||
// [a, z] + [0, 9] - {z, y} = [a, z] + [0, 9] - {0, o} = 34
|
||||
$rand_str = str_replace(array('0', 'O'), array('Z', 'Y'), strtoupper(base_convert($rand_str, 16, 34)));
|
||||
$output = '';
|
||||
for ($i = 0; $i < $num_chars; $i++)
|
||||
{
|
||||
$rand = random_int(0, $size-1);
|
||||
$output .= $range[$rand];
|
||||
}
|
||||
|
||||
return substr($rand_str, 0, $num_chars);
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -96,7 +115,7 @@ function gen_rand_string_friendly($num_chars = 8)
|
||||
*/
|
||||
function unique_id()
|
||||
{
|
||||
return bin2hex(random_bytes(8));
|
||||
return strtolower(gen_rand_string(16));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -661,8 +680,6 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
else if ($mode == 'topics')
|
||||
{
|
||||
@@ -789,8 +806,6 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $
|
||||
|
||||
unset($tracking);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
else if ($mode == 'topic')
|
||||
{
|
||||
@@ -904,8 +919,6 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $
|
||||
$user->set_cookie('track', tracking_serialize($tracking), $post_time + 31536000);
|
||||
$request->overwrite($config['cookie_name'] . '_track', tracking_serialize($tracking), \phpbb\request\request_interface::COOKIE);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
else if ($mode == 'post')
|
||||
{
|
||||
@@ -930,9 +943,28 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $
|
||||
|
||||
$db->sql_return_on_error(false);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* This event is used for performing actions directly after forums,
|
||||
* topics or posts have been marked as read.
|
||||
*
|
||||
* @event core.markread_after
|
||||
* @var string mode Variable containing marking mode value
|
||||
* @var mixed forum_id Variable containing forum id, or false
|
||||
* @var mixed topic_id Variable containing topic id, or false
|
||||
* @var int post_time Variable containing post time
|
||||
* @var int user_id Variable containing the user id
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'mode',
|
||||
'forum_id',
|
||||
'topic_id',
|
||||
'post_time',
|
||||
'user_id',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.markread_after', compact($vars)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1725,14 +1757,14 @@ function redirect($url, $return = false, $disable_cd_check = false)
|
||||
if ($url_parts === false)
|
||||
{
|
||||
// Malformed url
|
||||
trigger_error('INSECURE_REDIRECT', E_USER_ERROR);
|
||||
trigger_error('INSECURE_REDIRECT', E_USER_WARNING);
|
||||
}
|
||||
else if (!empty($url_parts['scheme']) && !empty($url_parts['host']))
|
||||
{
|
||||
// Attention: only able to redirect within the same domain if $disable_cd_check is false (yourdomain.com -> www.yourdomain.com will not work)
|
||||
if (!$disable_cd_check && $url_parts['host'] !== $user->host)
|
||||
{
|
||||
trigger_error('INSECURE_REDIRECT', E_USER_ERROR);
|
||||
trigger_error('INSECURE_REDIRECT', E_USER_WARNING);
|
||||
}
|
||||
}
|
||||
else if ($url[0] == '/')
|
||||
@@ -1772,13 +1804,13 @@ function redirect($url, $return = false, $disable_cd_check = false)
|
||||
|
||||
if (!$disable_cd_check && strpos($url, generate_board_url(true) . '/') !== 0)
|
||||
{
|
||||
trigger_error('INSECURE_REDIRECT', E_USER_ERROR);
|
||||
trigger_error('INSECURE_REDIRECT', E_USER_WARNING);
|
||||
}
|
||||
|
||||
// Make sure no linebreaks are there... to prevent http response splitting for PHP < 4.4.2
|
||||
if (strpos(urldecode($url), "\n") !== false || strpos(urldecode($url), "\r") !== false || strpos($url, ';') !== false)
|
||||
{
|
||||
trigger_error('INSECURE_REDIRECT', E_USER_ERROR);
|
||||
trigger_error('INSECURE_REDIRECT', E_USER_WARNING);
|
||||
}
|
||||
|
||||
// Now, also check the protocol and for a valid url the last time...
|
||||
@@ -1787,7 +1819,7 @@ function redirect($url, $return = false, $disable_cd_check = false)
|
||||
|
||||
if ($url_parts === false || empty($url_parts['scheme']) || !in_array($url_parts['scheme'], $allowed_protocols))
|
||||
{
|
||||
trigger_error('INSECURE_REDIRECT', E_USER_ERROR);
|
||||
trigger_error('INSECURE_REDIRECT', E_USER_WARNING);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2111,25 +2143,29 @@ function check_form_key($form_name, $timespan = false)
|
||||
/**
|
||||
* Build Confirm box
|
||||
* @param boolean $check True for checking if confirmed (without any additional parameters) and false for displaying the confirm box
|
||||
* @param string $title Title/Message used for confirm box.
|
||||
* @param string|array $title Title/Message used for confirm box.
|
||||
* message text is _CONFIRM appended to title.
|
||||
* If title cannot be found in user->lang a default one is displayed
|
||||
* If title_CONFIRM cannot be found in user->lang the text given is used.
|
||||
* If title is an array, the first array value is used as explained per above,
|
||||
* all other array values are sent as parameters to the language function.
|
||||
* @param string $hidden Hidden variables
|
||||
* @param string $html_body Template used for confirm box
|
||||
* @param string $u_action Custom form action
|
||||
*
|
||||
* @return bool True if confirmation was successful, false if not
|
||||
*/
|
||||
function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_body.html', $u_action = '')
|
||||
{
|
||||
global $user, $template, $db, $request;
|
||||
global $config, $phpbb_path_helper;
|
||||
global $config, $language, $phpbb_path_helper;
|
||||
|
||||
if (isset($_POST['cancel']))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$confirm = ($user->lang['YES'] === $request->variable('confirm', '', true, \phpbb\request\request_interface::POST));
|
||||
$confirm = ($language->lang('YES') === $request->variable('confirm', '', true, \phpbb\request\request_interface::POST));
|
||||
|
||||
if ($check && $confirm)
|
||||
{
|
||||
@@ -2163,13 +2199,27 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo
|
||||
// generate activation key
|
||||
$confirm_key = gen_rand_string(10);
|
||||
|
||||
if (defined('IN_ADMIN') && isset($user->data['session_admin']) && $user->data['session_admin'])
|
||||
// generate language strings
|
||||
if (is_array($title))
|
||||
{
|
||||
adm_page_header((!isset($user->lang[$title])) ? $user->lang['CONFIRM'] : $user->lang[$title]);
|
||||
$key = array_shift($title);
|
||||
$count = array_shift($title);
|
||||
$confirm_title = $language->is_set($key) ? $language->lang($key, $count, $title) : $language->lang('CONFIRM');
|
||||
$confirm_text = $language->is_set($key . '_CONFIRM') ? $language->lang($key . '_CONFIRM', $count, $title) : $key;
|
||||
}
|
||||
else
|
||||
{
|
||||
page_header((!isset($user->lang[$title])) ? $user->lang['CONFIRM'] : $user->lang[$title]);
|
||||
$confirm_title = $language->is_set($title) ? $language->lang($title) : $language->lang('CONFIRM');
|
||||
$confirm_text = $language->is_set($title . '_CONFIRM') ? $language->lang($title . '_CONFIRM') : $title;
|
||||
}
|
||||
|
||||
if (defined('IN_ADMIN') && isset($user->data['session_admin']) && $user->data['session_admin'])
|
||||
{
|
||||
adm_page_header($confirm_title);
|
||||
}
|
||||
else
|
||||
{
|
||||
page_header($confirm_title);
|
||||
}
|
||||
|
||||
$template->set_filenames(array(
|
||||
@@ -2189,10 +2239,10 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo
|
||||
$u_action .= ((strpos($u_action, '?') === false) ? '?' : '&') . 'confirm_key=' . $confirm_key;
|
||||
|
||||
$template->assign_vars(array(
|
||||
'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'],
|
||||
'MESSAGE_TITLE' => $confirm_title,
|
||||
'MESSAGE_TEXT' => $confirm_text,
|
||||
|
||||
'YES_VALUE' => $user->lang['YES'],
|
||||
'YES_VALUE' => $language->lang('YES'),
|
||||
'S_CONFIRM_ACTION' => $u_action,
|
||||
'S_HIDDEN_FIELDS' => $hidden . $s_hidden_fields,
|
||||
'S_AJAX_REQUEST' => $request->is_ajax(),
|
||||
@@ -2208,10 +2258,10 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo
|
||||
$json_response = new \phpbb\json_response;
|
||||
$json_response->send(array(
|
||||
'MESSAGE_BODY' => $template->assign_display('body'),
|
||||
'MESSAGE_TITLE' => (!isset($user->lang[$title])) ? $user->lang['CONFIRM'] : $user->lang[$title],
|
||||
'MESSAGE_TEXT' => (!isset($user->lang[$title . '_CONFIRM'])) ? $title : $user->lang[$title . '_CONFIRM'],
|
||||
'MESSAGE_TITLE' => $confirm_title,
|
||||
'MESSAGE_TEXT' => $confirm_text,
|
||||
|
||||
'YES_VALUE' => $user->lang['YES'],
|
||||
'YES_VALUE' => $language->lang('YES'),
|
||||
'S_CONFIRM_ACTION' => str_replace('&', '&', $u_action), //inefficient, rewrite whole function
|
||||
'S_HIDDEN_FIELDS' => $hidden . $s_hidden_fields
|
||||
));
|
||||
@@ -2225,6 +2275,8 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo
|
||||
{
|
||||
page_footer();
|
||||
}
|
||||
|
||||
exit; // unreachable, page_footer() above will call exit()
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2344,10 +2396,12 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
|
||||
* @event core.login_box_redirect
|
||||
* @var string redirect Redirect string
|
||||
* @var bool admin Is admin?
|
||||
* @var array result Result from auth provider
|
||||
* @since 3.1.0-RC5
|
||||
* @changed 3.1.9-RC1 Removed undefined return variable
|
||||
* @changed 3.2.4-RC1 Added result
|
||||
*/
|
||||
$vars = array('redirect', 'admin');
|
||||
$vars = array('redirect', 'admin', 'result');
|
||||
extract($phpbb_dispatcher->trigger_event('core.login_box_redirect', compact($vars)));
|
||||
|
||||
// append/replace SID (may change during the session for AOL users)
|
||||
@@ -2463,7 +2517,7 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
|
||||
|
||||
$s_hidden_fields = build_hidden_fields($s_hidden_fields);
|
||||
|
||||
$template->assign_vars(array(
|
||||
$login_box_template_data = array(
|
||||
'LOGIN_ERROR' => $err,
|
||||
'LOGIN_EXPLAIN' => $l_explain,
|
||||
|
||||
@@ -2471,6 +2525,7 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
|
||||
'U_RESEND_ACTIVATION' => ($config['require_activation'] == USER_ACTIVATION_SELF && $config['email_enable']) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=resend_act') : '',
|
||||
'U_TERMS_USE' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=terms'),
|
||||
'U_PRIVACY' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=privacy'),
|
||||
'UA_PRIVACY' => addslashes(append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=privacy')),
|
||||
|
||||
'S_DISPLAY_FULL_LOGIN' => ($s_display) ? true : false,
|
||||
'S_HIDDEN_FIELDS' => $s_hidden_fields,
|
||||
@@ -2480,7 +2535,29 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
|
||||
|
||||
'USERNAME_CREDENTIAL' => 'username',
|
||||
'PASSWORD_CREDENTIAL' => ($admin) ? 'password_' . $credential : 'password',
|
||||
));
|
||||
);
|
||||
|
||||
/**
|
||||
* Event to add/modify login box template data
|
||||
*
|
||||
* @event core.login_box_modify_template_data
|
||||
* @var int admin Flag whether user is admin
|
||||
* @var string username User name
|
||||
* @var int autologin Flag whether autologin is enabled
|
||||
* @var string redirect Redirect URL
|
||||
* @var array login_box_template_data Array with the login box template data
|
||||
* @since 3.2.3-RC2
|
||||
*/
|
||||
$vars = array(
|
||||
'admin',
|
||||
'username',
|
||||
'autologin',
|
||||
'redirect',
|
||||
'login_box_template_data',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.login_box_modify_template_data', compact($vars)));
|
||||
|
||||
$template->assign_vars($login_box_template_data);
|
||||
|
||||
page_header($user->lang['LOGIN']);
|
||||
|
||||
@@ -2497,7 +2574,7 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
|
||||
*/
|
||||
function login_forum_box($forum_data)
|
||||
{
|
||||
global $db, $phpbb_container, $request, $template, $user, $phpbb_dispatcher;
|
||||
global $db, $phpbb_container, $request, $template, $user, $phpbb_dispatcher, $phpbb_root_path, $phpEx;
|
||||
|
||||
$password = $request->variable('password', '', true);
|
||||
|
||||
@@ -2582,6 +2659,8 @@ function login_forum_box($forum_data)
|
||||
'body' => 'login_forum.html')
|
||||
);
|
||||
|
||||
make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"), $forum_data['forum_id']);
|
||||
|
||||
page_footer();
|
||||
}
|
||||
|
||||
@@ -4401,9 +4480,10 @@ function page_header($page_title = '', $display_online_list = false, $item_id =
|
||||
'U_SEARCH_ACTIVE_TOPICS'=> append_sid("{$phpbb_root_path}search.$phpEx", 'search_id=active_topics'),
|
||||
'U_DELETE_COOKIES' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=delete_cookies'),
|
||||
'U_CONTACT_US' => ($config['contact_admin_form_enable'] && $config['email_enable']) ? append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=contactadmin') : '',
|
||||
'U_TEAM' => ($user->data['user_id'] != ANONYMOUS && !$auth->acl_get('u_viewprofile')) ? '' : append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=team'),
|
||||
'U_TEAM' => (!$auth->acl_get('u_viewprofile')) ? '' : append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=team'),
|
||||
'U_TERMS_USE' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=terms'),
|
||||
'U_PRIVACY' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=privacy'),
|
||||
'UA_PRIVACY' => addslashes(append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=privacy')),
|
||||
'U_RESTORE_PERMISSIONS' => ($user->data['user_perm_from'] && $auth->acl_get('a_switchperm')) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=restore_perm') : '',
|
||||
'U_FEED' => $controller_helper->route('phpbb_feed_index'),
|
||||
|
||||
@@ -4463,7 +4543,7 @@ function page_header($page_title = '', $display_online_list = false, $item_id =
|
||||
'S_COOKIE_NOTICE' => !empty($config['cookie_notice']),
|
||||
|
||||
'T_THEME_NAME' => rawurlencode($user->style['style_path']),
|
||||
'T_THEME_LANG_NAME' => $user->data['user_lang'],
|
||||
'T_THEME_LANG_NAME' => $user->lang_name,
|
||||
'T_TEMPLATE_NAME' => $user->style['style_path'],
|
||||
'T_SUPER_TEMPLATE_NAME' => rawurlencode((isset($user->style['style_parent_tree']) && $user->style['style_parent_tree']) ? $user->style['style_parent_tree'] : $user->style['style_path']),
|
||||
'T_IMAGES' => 'images',
|
||||
|
@@ -564,9 +564,6 @@ function validate_config_vars($config_vars, &$cfg_array, &$error)
|
||||
|
||||
$cfg_array[$config_name] = trim($destination);
|
||||
|
||||
// Absolute file path
|
||||
case 'absolute_path':
|
||||
case 'absolute_path_writable':
|
||||
// Path being relative (still prefixed by phpbb_root_path), but with the ability to escape the root dir...
|
||||
case 'path':
|
||||
case 'wpath':
|
||||
@@ -585,7 +582,7 @@ function validate_config_vars($config_vars, &$cfg_array, &$error)
|
||||
break;
|
||||
}
|
||||
|
||||
$path = in_array($config_definition['validate'], array('wpath', 'path', 'rpath', 'rwpath')) ? $phpbb_root_path . $cfg_array[$config_name] : $cfg_array[$config_name];
|
||||
$path = $phpbb_root_path . $cfg_array[$config_name];
|
||||
|
||||
if (!file_exists($path))
|
||||
{
|
||||
@@ -598,7 +595,7 @@ function validate_config_vars($config_vars, &$cfg_array, &$error)
|
||||
}
|
||||
|
||||
// Check if the path is writable
|
||||
if ($config_definition['validate'] == 'wpath' || $config_definition['validate'] == 'rwpath' || $config_definition['validate'] === 'absolute_path_writable')
|
||||
if ($config_definition['validate'] == 'wpath' || $config_definition['validate'] == 'rwpath')
|
||||
{
|
||||
if (file_exists($path) && !$phpbb_filesystem->is_writable($path))
|
||||
{
|
||||
|
@@ -3042,6 +3042,8 @@ function tidy_database()
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
$db->sql_transaction('begin');
|
||||
|
||||
// Delete those rows from the acl tables not having listed the forums above
|
||||
$sql = 'DELETE FROM ' . ACL_GROUPS_TABLE . '
|
||||
WHERE ' . $db->sql_in_set('forum_id', $forum_ids, true);
|
||||
@@ -3051,6 +3053,8 @@ function tidy_database()
|
||||
WHERE ' . $db->sql_in_set('forum_id', $forum_ids, true);
|
||||
$db->sql_query($sql);
|
||||
|
||||
$db->sql_transaction('commit');
|
||||
|
||||
$config->set('database_last_gc', time(), false);
|
||||
}
|
||||
|
||||
|
@@ -391,7 +391,7 @@ function request_var($var_name, $default, $multibyte = false, $cookie = false, $
|
||||
*
|
||||
* @deprecated 3.1.0 (To be removed: 3.3.0)
|
||||
*/
|
||||
function get_tables(&$db)
|
||||
function get_tables($db)
|
||||
{
|
||||
$db_tools_factory = new \phpbb\db\tools\factory();
|
||||
$db_tools = $db_tools_factory->get($db);
|
||||
|
@@ -210,7 +210,7 @@ class compress_zip extends compress
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
function compress_zip($mode, $file)
|
||||
function __construct($mode, $file)
|
||||
{
|
||||
global $phpbb_filesystem;
|
||||
|
||||
@@ -569,7 +569,7 @@ class compress_tar extends compress
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
function compress_tar($mode, $file, $type = '')
|
||||
function __construct($mode, $file, $type = '')
|
||||
{
|
||||
global $phpbb_filesystem;
|
||||
|
||||
|
@@ -627,7 +627,7 @@ function generate_text_for_display($text, $uid, $bitfield, $flags, $censor_text
|
||||
}
|
||||
else
|
||||
{
|
||||
$bbcode->bbcode($bitfield);
|
||||
$bbcode->bbcode_set_bitfield($bitfield);
|
||||
}
|
||||
|
||||
$bbcode->bbcode_second_pass($text, $uid);
|
||||
@@ -1672,7 +1672,7 @@ class bitfield
|
||||
{
|
||||
var $data;
|
||||
|
||||
function bitfield($bitfield = '')
|
||||
function __construct($bitfield = '')
|
||||
{
|
||||
$this->data = base64_decode($bitfield);
|
||||
}
|
||||
@@ -1758,3 +1758,48 @@ class bitfield
|
||||
$this->data = $this->data | $bitfield->get_blob();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats the quote according to the given BBCode status setting
|
||||
*
|
||||
* @param phpbb\language\language $language Language class
|
||||
* @param parse_message $message_parser Message parser class
|
||||
* @param phpbb\textformatter\utils_interface $text_formatter_utils Text formatter utilities
|
||||
* @param bool $bbcode_status The status of the BBCode setting
|
||||
* @param array $quote_attributes The attributes of the quoted post
|
||||
* @param string $message_link Link of the original quoted post
|
||||
*/
|
||||
function phpbb_format_quote($language, $message_parser, $text_formatter_utils, $bbcode_status, $quote_attributes, $message_link = '')
|
||||
{
|
||||
if ($bbcode_status)
|
||||
{
|
||||
$quote_text = $text_formatter_utils->generate_quote(
|
||||
censor_text($message_parser->message),
|
||||
$quote_attributes
|
||||
);
|
||||
|
||||
$message_parser->message = $quote_text . "\n\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
$offset = 0;
|
||||
$quote_string = "> ";
|
||||
$message = censor_text(trim($message_parser->message));
|
||||
// see if we are nesting. It's easily tricked but should work for one level of nesting
|
||||
if (strpos($message, ">") !== false)
|
||||
{
|
||||
$offset = 10;
|
||||
}
|
||||
$message = utf8_wordwrap($message, 75 + $offset, "\n");
|
||||
|
||||
$message = $quote_string . $message;
|
||||
$message = str_replace("\n", "\n" . $quote_string, $message);
|
||||
|
||||
$message_parser->message = $quote_attributes['author'] . " " . $language->lang('WROTE') . ":\n" . $message . "\n";
|
||||
}
|
||||
|
||||
if ($message_link)
|
||||
{
|
||||
$message_parser->message = $message_link . $message_parser->message;
|
||||
}
|
||||
}
|
||||
|
@@ -1241,6 +1241,7 @@ function display_user_activity(&$userdata_ary)
|
||||
}
|
||||
|
||||
$userdata = $userdata_ary;
|
||||
$show_user_activity = true;
|
||||
/**
|
||||
* Alter list of forums and topics to display as active
|
||||
*
|
||||
@@ -1248,9 +1249,11 @@ function display_user_activity(&$userdata_ary)
|
||||
* @var array userdata User's data
|
||||
* @var array active_f_row List of active forums
|
||||
* @var array active_t_row List of active posts
|
||||
* @var bool show_user_activity Show user forum and topic activity
|
||||
* @since 3.1.0-RC3
|
||||
* @changed 3.2.5-RC1 Added show_user_activity into event
|
||||
*/
|
||||
$vars = array('userdata', 'active_f_row', 'active_t_row');
|
||||
$vars = array('userdata', 'active_f_row', 'active_t_row', 'show_user_activity');
|
||||
extract($phpbb_dispatcher->trigger_event('core.display_user_activity_modify_actives', compact($vars)));
|
||||
$userdata_ary = $userdata;
|
||||
unset($userdata);
|
||||
@@ -1287,7 +1290,7 @@ function display_user_activity(&$userdata_ary)
|
||||
'ACTIVE_TOPIC_PCT' => sprintf($l_active_pct, $active_t_pct),
|
||||
'U_ACTIVE_FORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $active_f_id),
|
||||
'U_ACTIVE_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", 't=' . $active_t_id),
|
||||
'S_SHOW_ACTIVITY' => true)
|
||||
'S_SHOW_ACTIVITY' => $show_user_activity)
|
||||
);
|
||||
}
|
||||
|
||||
|
@@ -22,12 +22,12 @@ if (!defined('IN_PHPBB'))
|
||||
/**
|
||||
* Functions used to generate additional URL paramters
|
||||
*/
|
||||
function phpbb_module__url($mode, &$module_row)
|
||||
function phpbb_module__url($mode, $module_row)
|
||||
{
|
||||
return phpbb_extra_url();
|
||||
}
|
||||
|
||||
function phpbb_module_notes_url($mode, &$module_row)
|
||||
function phpbb_module_notes_url($mode, $module_row)
|
||||
{
|
||||
if ($mode == 'front')
|
||||
{
|
||||
@@ -38,7 +38,7 @@ function phpbb_module_notes_url($mode, &$module_row)
|
||||
return ($user_id) ? "&u=$user_id" : '';
|
||||
}
|
||||
|
||||
function phpbb_module_warn_url($mode, &$module_row)
|
||||
function phpbb_module_warn_url($mode, $module_row)
|
||||
{
|
||||
if ($mode == 'front' || $mode == 'list')
|
||||
{
|
||||
@@ -64,27 +64,27 @@ function phpbb_module_warn_url($mode, &$module_row)
|
||||
}
|
||||
}
|
||||
|
||||
function phpbb_module_main_url($mode, &$module_row)
|
||||
function phpbb_module_main_url($mode, $module_row)
|
||||
{
|
||||
return phpbb_extra_url();
|
||||
}
|
||||
|
||||
function phpbb_module_logs_url($mode, &$module_row)
|
||||
function phpbb_module_logs_url($mode, $module_row)
|
||||
{
|
||||
return phpbb_extra_url();
|
||||
}
|
||||
|
||||
function phpbb_module_ban_url($mode, &$module_row)
|
||||
function phpbb_module_ban_url($mode, $module_row)
|
||||
{
|
||||
return phpbb_extra_url();
|
||||
}
|
||||
|
||||
function phpbb_module_queue_url($mode, &$module_row)
|
||||
function phpbb_module_queue_url($mode, $module_row)
|
||||
{
|
||||
return phpbb_extra_url();
|
||||
}
|
||||
|
||||
function phpbb_module_reports_url($mode, &$module_row)
|
||||
function phpbb_module_reports_url($mode, $module_row)
|
||||
{
|
||||
return phpbb_extra_url();
|
||||
}
|
||||
|
@@ -37,7 +37,7 @@ class messenger
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
function messenger($use_queue = true)
|
||||
function __construct($use_queue = true)
|
||||
{
|
||||
global $config;
|
||||
|
||||
@@ -326,9 +326,26 @@ class messenger
|
||||
));
|
||||
|
||||
$subject = $this->subject;
|
||||
$message = $this->msg;
|
||||
$template = $this->template;
|
||||
/**
|
||||
* Event to modify notification message text before parsing
|
||||
* Event to modify the template before parsing
|
||||
*
|
||||
* @event core.modify_notification_template
|
||||
* @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 \phpbb\template\template template The (readonly) template object
|
||||
* @since 3.2.4-RC1
|
||||
*/
|
||||
$vars = array('method', 'break', 'subject', 'template');
|
||||
extract($phpbb_dispatcher->trigger_event('core.modify_notification_template', compact($vars)));
|
||||
|
||||
// Parse message through template
|
||||
$message = trim($this->template->assign_display('body'));
|
||||
|
||||
/**
|
||||
* Event to modify notification message text after parsing
|
||||
*
|
||||
* @event core.modify_notification_message
|
||||
* @var int method User notification method NOTIFY_EMAIL|NOTIFY_IM|NOTIFY_BOTH
|
||||
@@ -338,19 +355,12 @@ class messenger
|
||||
* @var string message The message text
|
||||
* @since 3.1.11-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'method',
|
||||
'break',
|
||||
'subject',
|
||||
'message',
|
||||
);
|
||||
$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'));
|
||||
unset($subject, $message, $template);
|
||||
|
||||
// Because we use \n for newlines in the body message we need to fix line encoding errors for those admins who uploaded email template files in the wrong encoding
|
||||
$this->msg = str_replace("\r\n", "\n", $this->msg);
|
||||
@@ -369,6 +379,12 @@ class messenger
|
||||
$this->subject = (($this->subject != '') ? $this->subject : $user->lang['NO_EMAIL_SUBJECT']);
|
||||
}
|
||||
|
||||
if (preg_match('#^(List-Unsubscribe:(.*?))$#m', $this->msg, $match))
|
||||
{
|
||||
$this->extra_headers[] = $match[1];
|
||||
$drop_header .= '[\r\n]*?' . preg_quote($match[1], '#');
|
||||
}
|
||||
|
||||
if ($drop_header)
|
||||
{
|
||||
$this->msg = trim(preg_replace('#' . $drop_header . '#s', '', $this->msg));
|
||||
@@ -517,7 +533,7 @@ class messenger
|
||||
*/
|
||||
function msg_email()
|
||||
{
|
||||
global $config;
|
||||
global $config, $phpbb_dispatcher;
|
||||
|
||||
if (empty($config['email_enable']))
|
||||
{
|
||||
@@ -545,6 +561,33 @@ class messenger
|
||||
$contact_name = htmlspecialchars_decode($config['board_contact_name']);
|
||||
$board_contact = (($contact_name !== '') ? '"' . mail_encode($contact_name) . '" ' : '') . '<' . $config['board_contact'] . '>';
|
||||
|
||||
$break = false;
|
||||
$addresses = $this->addresses;
|
||||
$subject = $this->subject;
|
||||
$msg = $this->msg;
|
||||
/**
|
||||
* Event to send message via external transport
|
||||
*
|
||||
* @event core.notification_message_email
|
||||
* @var bool break Flag indicating if the function return after hook
|
||||
* @var array addresses The message recipients
|
||||
* @var string subject The message subject
|
||||
* @var string msg The message text
|
||||
* @since 3.2.4-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'break',
|
||||
'addresses',
|
||||
'subject',
|
||||
'msg',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.notification_message_email', compact($vars)));
|
||||
|
||||
if ($break)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (empty($this->replyto))
|
||||
{
|
||||
$this->replyto = $board_contact;
|
||||
@@ -750,7 +793,7 @@ class queue
|
||||
/**
|
||||
* constructor
|
||||
*/
|
||||
function queue()
|
||||
function __construct()
|
||||
{
|
||||
global $phpEx, $phpbb_root_path, $phpbb_filesystem, $phpbb_container;
|
||||
|
||||
@@ -783,7 +826,7 @@ class queue
|
||||
*/
|
||||
function process()
|
||||
{
|
||||
global $config, $phpEx, $phpbb_root_path, $user;
|
||||
global $config, $phpEx, $phpbb_root_path, $user, $phpbb_dispatcher;
|
||||
|
||||
$lock = new \phpbb\lock\flock($this->cache_file);
|
||||
$lock->acquire();
|
||||
@@ -880,23 +923,45 @@ class queue
|
||||
switch ($object)
|
||||
{
|
||||
case 'email':
|
||||
$err_msg = '';
|
||||
$to = (!$to) ? 'undisclosed-recipients:;' : $to;
|
||||
$break = false;
|
||||
/**
|
||||
* Event to send message via external transport
|
||||
*
|
||||
* @event core.notification_message_process
|
||||
* @var bool break Flag indicating if the function return after hook
|
||||
* @var array addresses The message recipients
|
||||
* @var string subject The message subject
|
||||
* @var string msg The message text
|
||||
* @since 3.2.4-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'break',
|
||||
'addresses',
|
||||
'subject',
|
||||
'msg',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.notification_message_process', compact($vars)));
|
||||
|
||||
if ($config['smtp_delivery'])
|
||||
if (!$break)
|
||||
{
|
||||
$result = smtpmail($addresses, mail_encode($subject), wordwrap(utf8_wordwrap($msg), 997, "\n", true), $err_msg, $headers);
|
||||
}
|
||||
else
|
||||
{
|
||||
$result = phpbb_mail($to, $subject, $msg, $headers, PHP_EOL, $err_msg);
|
||||
}
|
||||
$err_msg = '';
|
||||
$to = (!$to) ? 'undisclosed-recipients:;' : $to;
|
||||
|
||||
if (!$result)
|
||||
{
|
||||
$messenger = new messenger();
|
||||
$messenger->error('EMAIL', $err_msg);
|
||||
continue 2;
|
||||
if ($config['smtp_delivery'])
|
||||
{
|
||||
$result = smtpmail($addresses, mail_encode($subject), wordwrap(utf8_wordwrap($msg), 997, "\n", true), $err_msg, $headers);
|
||||
}
|
||||
else
|
||||
{
|
||||
$result = phpbb_mail($to, $subject, $msg, $headers, PHP_EOL, $err_msg);
|
||||
}
|
||||
|
||||
if (!$result)
|
||||
{
|
||||
$messenger = new messenger();
|
||||
$messenger->error('EMAIL', $err_msg);
|
||||
continue 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1264,7 +1329,7 @@ class smtp_class
|
||||
var $backtrace = false;
|
||||
var $backtrace_log = array();
|
||||
|
||||
function smtp_class()
|
||||
function __construct()
|
||||
{
|
||||
// Always create a backtrace for admins to identify SMTP problems
|
||||
$this->backtrace = true;
|
||||
|
@@ -40,7 +40,7 @@ class p_master
|
||||
* Constuctor
|
||||
* Set module include path
|
||||
*/
|
||||
function p_master($include_path = false)
|
||||
function __construct($include_path = false)
|
||||
{
|
||||
global $phpbb_root_path;
|
||||
|
||||
|
@@ -202,11 +202,13 @@ function update_post_information($type, $ids, $return_update_sql = false)
|
||||
|
||||
if (count($ids) == 1)
|
||||
{
|
||||
$sql = 'SELECT MAX(p.post_id) as last_post_id
|
||||
$sql = 'SELECT p.post_id as last_post_id
|
||||
FROM ' . POSTS_TABLE . " p $topic_join
|
||||
WHERE " . $db->sql_in_set('p.' . $type . '_id', $ids) . "
|
||||
$topic_condition
|
||||
AND p.post_visibility = " . ITEM_APPROVED;
|
||||
AND p.post_visibility = " . ITEM_APPROVED . "
|
||||
ORDER BY p.post_id DESC";
|
||||
$result = $db->sql_query_limit($sql, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -216,8 +218,8 @@ function update_post_information($type, $ids, $return_update_sql = false)
|
||||
$topic_condition
|
||||
AND p.post_visibility = " . ITEM_APPROVED . "
|
||||
GROUP BY p.{$type}_id";
|
||||
$result = $db->sql_query($sql);
|
||||
}
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$last_post_ids = array();
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
@@ -519,7 +521,7 @@ function get_supported_image_types($type = false)
|
||||
*/
|
||||
function create_thumbnail($source, $destination, $mimetype)
|
||||
{
|
||||
global $config, $phpbb_filesystem;
|
||||
global $config, $phpbb_filesystem, $phpbb_dispatcher;
|
||||
|
||||
$min_filesize = (int) $config['img_min_thumb_filesize'];
|
||||
$img_filesize = (file_exists($source)) ? @filesize($source) : false;
|
||||
@@ -551,25 +553,31 @@ function create_thumbnail($source, $destination, $mimetype)
|
||||
return false;
|
||||
}
|
||||
|
||||
$used_imagick = false;
|
||||
$thumbnail_created = false;
|
||||
|
||||
// Only use ImageMagick if defined and the passthru function not disabled
|
||||
if ($config['img_imagick'] && function_exists('passthru'))
|
||||
{
|
||||
if (substr($config['img_imagick'], -1) !== '/')
|
||||
{
|
||||
$config['img_imagick'] .= '/';
|
||||
}
|
||||
/**
|
||||
* Create thumbnail event to replace GD thumbnail creation with for example ImageMagick
|
||||
*
|
||||
* @event core.thumbnail_create_before
|
||||
* @var string source Image source path
|
||||
* @var string destination Thumbnail destination path
|
||||
* @var string mimetype Image mime type
|
||||
* @var float new_width Calculated thumbnail width
|
||||
* @var float new_height Calculated thumbnail height
|
||||
* @var bool thumbnail_created Set to true to skip default GD thumbnail creation
|
||||
* @since 3.2.4
|
||||
*/
|
||||
$vars = array(
|
||||
'source',
|
||||
'destination',
|
||||
'mimetype',
|
||||
'new_width',
|
||||
'new_height',
|
||||
'thumbnail_created',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.thumbnail_create_before', compact($vars)));
|
||||
|
||||
@passthru(escapeshellcmd($config['img_imagick']) . 'convert' . ((defined('PHP_OS') && preg_match('#^win#i', PHP_OS)) ? '.exe' : '') . ' -quality 85 -geometry ' . $new_width . 'x' . $new_height . ' "' . str_replace('\\', '/', $source) . '" "' . str_replace('\\', '/', $destination) . '"');
|
||||
|
||||
if (file_exists($destination))
|
||||
{
|
||||
$used_imagick = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$used_imagick)
|
||||
if (!$thumbnail_created)
|
||||
{
|
||||
$type = get_supported_image_types($type);
|
||||
|
||||
@@ -2282,6 +2290,19 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll_ary, &$data
|
||||
'post_subject' => $subject,
|
||||
));
|
||||
|
||||
/**
|
||||
* This event allows you to modify the notification data upon submission
|
||||
*
|
||||
* @event core.modify_submit_notification_data
|
||||
* @var array notification_data The notification data to be inserted in to the database
|
||||
* @var array data_ary The data array with a lot of the post submission data
|
||||
* @var string mode The posting mode
|
||||
* @var int poster_id The poster id
|
||||
* @since 3.2.4-RC1
|
||||
*/
|
||||
$vars = array('notification_data', 'data_ary', 'mode', 'poster_id');
|
||||
extract($phpbb_dispatcher->trigger_event('core.modify_submit_notification_data', compact($vars)));
|
||||
|
||||
/* @var $phpbb_notifications \phpbb\notification\manager */
|
||||
$phpbb_notifications = $phpbb_container->get('notification_manager');
|
||||
|
||||
@@ -2309,8 +2330,14 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll_ary, &$data
|
||||
case 'edit_first_post':
|
||||
case 'edit':
|
||||
case 'edit_last_post':
|
||||
if ($user->data['user_id'] == $poster_id)
|
||||
{
|
||||
$phpbb_notifications->update_notifications(array(
|
||||
'notification.type.quote',
|
||||
), $notification_data);
|
||||
}
|
||||
|
||||
$phpbb_notifications->update_notifications(array(
|
||||
'notification.type.quote',
|
||||
'notification.type.bookmark',
|
||||
'notification.type.topic',
|
||||
'notification.type.post',
|
||||
|
@@ -38,7 +38,7 @@ class transfer
|
||||
/**
|
||||
* Constructor - init some basic values
|
||||
*/
|
||||
function transfer()
|
||||
function __construct()
|
||||
{
|
||||
global $phpbb_root_path;
|
||||
|
||||
@@ -264,7 +264,7 @@ class ftp extends transfer
|
||||
/**
|
||||
* Standard parameters for FTP session
|
||||
*/
|
||||
function ftp($host, $username, $password, $root_path, $port = 21, $timeout = 10)
|
||||
function __construct($host, $username, $password, $root_path, $port = 21, $timeout = 10)
|
||||
{
|
||||
$this->host = $host;
|
||||
$this->port = $port;
|
||||
@@ -512,7 +512,7 @@ class ftp_fsock extends transfer
|
||||
/**
|
||||
* Standard parameters for FTP session
|
||||
*/
|
||||
function ftp_fsock($host, $username, $password, $root_path, $port = 21, $timeout = 10)
|
||||
function __construct($host, $username, $password, $root_path, $port = 21, $timeout = 10)
|
||||
{
|
||||
$this->host = $host;
|
||||
$this->port = $port;
|
||||
@@ -529,7 +529,7 @@ class ftp_fsock extends transfer
|
||||
}
|
||||
|
||||
// Init some needed values
|
||||
$this->transfer();
|
||||
parent::__construct();
|
||||
|
||||
return;
|
||||
}
|
||||
|
@@ -26,8 +26,10 @@ if (!defined('IN_PHPBB'))
|
||||
* @param array &$user_id_ary The user ids to check or empty if usernames used
|
||||
* @param array &$username_ary The usernames to check or empty if user ids used
|
||||
* @param mixed $user_type Array of user types to check, false if not restricting by user type
|
||||
* @param boolean $update_references If false, the supplied array is unset and appears unchanged from where it was called
|
||||
* @return boolean|string Returns false on success, error string on failure
|
||||
*/
|
||||
function user_get_id_name(&$user_id_ary, &$username_ary, $user_type = false)
|
||||
function user_get_id_name(&$user_id_ary, &$username_ary, $user_type = false, $update_references = false)
|
||||
{
|
||||
global $db;
|
||||
|
||||
@@ -50,7 +52,13 @@ function user_get_id_name(&$user_id_ary, &$username_ary, $user_type = false)
|
||||
}
|
||||
|
||||
$sql_in = ($which_ary == 'user_id_ary') ? array_map('intval', ${$which_ary}) : array_map('utf8_clean_string', ${$which_ary});
|
||||
unset(${$which_ary});
|
||||
|
||||
// By unsetting the array here, the values passed in at the point user_get_id_name() was called will be retained.
|
||||
// Otherwise, if we don't unset (as the array was passed by reference) the original array will be updated below.
|
||||
if ($update_references === false)
|
||||
{
|
||||
unset(${$which_ary});
|
||||
}
|
||||
|
||||
$user_id_ary = $username_ary = array();
|
||||
|
||||
@@ -461,9 +469,11 @@ function user_delete($mode, $user_ids, $retain_username = true)
|
||||
* @var array user_ids IDs of the deleted user
|
||||
* @var mixed retain_username True if username should be retained
|
||||
* or false if not
|
||||
* @var array user_rows Array containing data of the deleted users
|
||||
* @since 3.1.0-a1
|
||||
* @changed 3.2.4-RC1 Added user_rows
|
||||
*/
|
||||
$vars = array('mode', 'user_ids', 'retain_username');
|
||||
$vars = array('mode', 'user_ids', 'retain_username', 'user_rows');
|
||||
extract($phpbb_dispatcher->trigger_event('core.delete_user_before', compact($vars)));
|
||||
|
||||
// Before we begin, we will remove the reports the user issued.
|
||||
@@ -664,8 +674,30 @@ function user_delete($mode, $user_ids, $retain_username = true)
|
||||
delete_posts('poster_id', $user_ids);
|
||||
}
|
||||
|
||||
$table_ary = array(USERS_TABLE, USER_GROUP_TABLE, TOPICS_WATCH_TABLE, FORUMS_WATCH_TABLE, ACL_USERS_TABLE, TOPICS_TRACK_TABLE, TOPICS_POSTED_TABLE, FORUMS_TRACK_TABLE, PROFILE_FIELDS_DATA_TABLE, MODERATOR_CACHE_TABLE, DRAFTS_TABLE, BOOKMARKS_TABLE, SESSIONS_KEYS_TABLE, PRIVMSGS_FOLDER_TABLE, PRIVMSGS_RULES_TABLE);
|
||||
$table_ary = [
|
||||
USERS_TABLE,
|
||||
USER_GROUP_TABLE,
|
||||
TOPICS_WATCH_TABLE,
|
||||
FORUMS_WATCH_TABLE,
|
||||
ACL_USERS_TABLE,
|
||||
TOPICS_TRACK_TABLE,
|
||||
TOPICS_POSTED_TABLE,
|
||||
FORUMS_TRACK_TABLE,
|
||||
PROFILE_FIELDS_DATA_TABLE,
|
||||
MODERATOR_CACHE_TABLE,
|
||||
DRAFTS_TABLE,
|
||||
BOOKMARKS_TABLE,
|
||||
SESSIONS_KEYS_TABLE,
|
||||
PRIVMSGS_FOLDER_TABLE,
|
||||
PRIVMSGS_RULES_TABLE,
|
||||
$phpbb_container->getParameter('tables.auth_provider_oauth_token_storage'),
|
||||
$phpbb_container->getParameter('tables.auth_provider_oauth_states'),
|
||||
$phpbb_container->getParameter('tables.auth_provider_oauth_account_assoc'),
|
||||
$phpbb_container->getParameter('tables.user_notifications')
|
||||
];
|
||||
|
||||
// Ignore errors on deleting from non-existent tables, e.g. when migrating
|
||||
$db->sql_return_on_error(true);
|
||||
// Delete the miscellaneous (non-post) data for the user
|
||||
foreach ($table_ary as $table)
|
||||
{
|
||||
@@ -673,6 +705,7 @@ function user_delete($mode, $user_ids, $retain_username = true)
|
||||
WHERE " . $user_id_sql;
|
||||
$db->sql_query($sql);
|
||||
}
|
||||
$db->sql_return_on_error();
|
||||
|
||||
$cache->destroy('sql', MODERATOR_CACHE_TABLE);
|
||||
|
||||
@@ -1427,21 +1460,14 @@ function user_ipwhois($ip)
|
||||
return '';
|
||||
}
|
||||
|
||||
if (preg_match(get_preg_expression('ipv4'), $ip))
|
||||
{
|
||||
// IPv4 address
|
||||
$whois_host = 'whois.arin.net.';
|
||||
}
|
||||
else if (preg_match(get_preg_expression('ipv6'), $ip))
|
||||
{
|
||||
// IPv6 address
|
||||
$whois_host = 'whois.sixxs.net.';
|
||||
}
|
||||
else
|
||||
if (!preg_match(get_preg_expression('ipv4'), $ip) && !preg_match(get_preg_expression('ipv6'), $ip))
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
// IPv4 & IPv6 addresses
|
||||
$whois_host = 'whois.arin.net.';
|
||||
|
||||
$ipwhois = '';
|
||||
|
||||
if (($fsk = @fsockopen($whois_host, 43)))
|
||||
@@ -1692,16 +1718,20 @@ function phpbb_validate_timezone($timezone)
|
||||
return (in_array($timezone, phpbb_get_timezone_identifiers($timezone))) ? false : 'TIMEZONE_INVALID';
|
||||
}
|
||||
|
||||
/**
|
||||
* Check to see if the username has been taken, or if it is disallowed.
|
||||
* Also checks if it includes the " character, which we don't allow in usernames.
|
||||
* Used for registering, changing names, and posting anonymously with a username
|
||||
*
|
||||
* @param string $username The username to check
|
||||
* @param string $allowed_username An allowed username, default being $user->data['username']
|
||||
*
|
||||
* @return mixed Either false if validation succeeded or a string which will be used as the error message (with the variable name appended)
|
||||
*/
|
||||
/***
|
||||
* Validate Username
|
||||
*
|
||||
* Check to see if the username has been taken, or if it is disallowed.
|
||||
* Also checks if it includes the " character or the 4-bytes Unicode ones
|
||||
* (aka emojis) which we don't allow in usernames.
|
||||
* Used for registering, changing names, and posting anonymously with a username
|
||||
*
|
||||
* @param string $username The username to check
|
||||
* @param string $allowed_username An allowed username, default being $user->data['username']
|
||||
*
|
||||
* @return mixed Either false if validation succeeded or a string which will be
|
||||
* used as the error message (with the variable name appended)
|
||||
*/
|
||||
function validate_username($username, $allowed_username = false)
|
||||
{
|
||||
global $config, $db, $user, $cache;
|
||||
@@ -1714,6 +1744,14 @@ function validate_username($username, $allowed_username = false)
|
||||
return false;
|
||||
}
|
||||
|
||||
// The very first check is for
|
||||
// out-of-bounds characters that are currently
|
||||
// not supported by utf8_bin in MySQL
|
||||
if (preg_match('/[\x{10000}-\x{10FFFF}]/u', $username))
|
||||
{
|
||||
return 'INVALID_EMOJIS';
|
||||
}
|
||||
|
||||
// ... fast checks first.
|
||||
if (strpos($username, '"') !== false || strpos($username, '"') !== false || empty($clean_username))
|
||||
{
|
||||
@@ -1904,9 +1942,9 @@ function validate_user_email($email, $allowed_email = false)
|
||||
return $validate_email;
|
||||
}
|
||||
|
||||
if (($ban_reason = $user->check_ban(false, false, $email, true)) !== false)
|
||||
if (($ban = $user->check_ban(false, false, $email, true)) !== false)
|
||||
{
|
||||
return ($ban_reason === true) ? 'EMAIL_BANNED' : $ban_reason;
|
||||
return ($ban === true) ? 'EMAIL_BANNED' : (!empty($ban['ban_give_reason']) ? $ban['ban_give_reason'] : $ban);
|
||||
}
|
||||
|
||||
if (!$config['allow_emailreuse'])
|
||||
@@ -2681,6 +2719,13 @@ function group_user_add($group_id, $user_id_ary = false, $username_ary = false,
|
||||
return 'NO_USER';
|
||||
}
|
||||
|
||||
// Because the item that gets passed into the previous function is unset, the reference is lost and our original
|
||||
// array is retained - so we know there's a problem if there's a different number of ids to usernames now.
|
||||
if (count($user_id_ary) != count($username_ary))
|
||||
{
|
||||
return 'GROUP_USERS_INVALID';
|
||||
}
|
||||
|
||||
// Remove users who are already members of this group
|
||||
$sql = 'SELECT user_id, group_leader
|
||||
FROM ' . USER_GROUP_TABLE . '
|
||||
@@ -3602,11 +3647,6 @@ function remove_newly_registered($user_id, $user_data = false)
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($user_data['user_new']))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$sql = 'SELECT group_id
|
||||
FROM ' . GROUPS_TABLE . "
|
||||
WHERE group_name = 'NEWLY_REGISTERED'
|
||||
|
@@ -44,7 +44,7 @@ class phpbb_hook
|
||||
*
|
||||
* @param array $valid_hooks array containing the hookable functions/methods
|
||||
*/
|
||||
function phpbb_hook($valid_hooks)
|
||||
function __construct($valid_hooks)
|
||||
{
|
||||
foreach ($valid_hooks as $_null => $method)
|
||||
{
|
||||
|
@@ -34,7 +34,10 @@ class mcp_ban
|
||||
}
|
||||
|
||||
// Include the admin banning interface...
|
||||
include($phpbb_root_path . 'includes/acp/acp_ban.' . $phpEx);
|
||||
if (!class_exists('acp_ban'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/acp/acp_ban.' . $phpEx);
|
||||
}
|
||||
|
||||
$bansubmit = $request->is_set_post('bansubmit');
|
||||
$unbansubmit = $request->is_set_post('unbansubmit');
|
||||
|
@@ -290,7 +290,10 @@ function mcp_front_view($id, $mode, $action)
|
||||
|
||||
if ($total)
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
|
||||
if (!function_exists('get_recipient_strings'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
|
||||
}
|
||||
|
||||
$sql_ary = array(
|
||||
'SELECT' => 'r.report_id, r.report_time, p.msg_id, p.message_subject, p.message_time, p.to_address, p.bcc_address, p.message_attachment, u.username, u.username_clean, u.user_colour, u.user_id, u2.username as author_name, u2.username_clean as author_name_clean, u2.user_colour as author_colour, u2.user_id as author_id',
|
||||
|
@@ -28,9 +28,9 @@ class mcp_logs
|
||||
var $u_action;
|
||||
var $p_master;
|
||||
|
||||
function mcp_logs(&$p_master)
|
||||
function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
function main($id, $mode)
|
||||
|
@@ -28,9 +28,9 @@ class mcp_main
|
||||
var $p_master;
|
||||
var $u_action;
|
||||
|
||||
function mcp_main(&$p_master)
|
||||
function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
function main($id, $mode)
|
||||
@@ -174,7 +174,10 @@ class mcp_main
|
||||
switch ($mode)
|
||||
{
|
||||
case 'front':
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_front.' . $phpEx);
|
||||
if (!function_exists('mcp_front_view'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_front.' . $phpEx);
|
||||
}
|
||||
|
||||
$user->add_lang('acp/common');
|
||||
|
||||
@@ -185,7 +188,10 @@ class mcp_main
|
||||
break;
|
||||
|
||||
case 'forum_view':
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_forum.' . $phpEx);
|
||||
if (!function_exists('mcp_forum_view'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_forum.' . $phpEx);
|
||||
}
|
||||
|
||||
$user->add_lang('viewforum');
|
||||
|
||||
@@ -208,7 +214,10 @@ class mcp_main
|
||||
break;
|
||||
|
||||
case 'topic_view':
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_topic.' . $phpEx);
|
||||
if (!function_exists('mcp_topic_view'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_topic.' . $phpEx);
|
||||
}
|
||||
|
||||
mcp_topic_view($id, $mode, $action);
|
||||
|
||||
@@ -217,7 +226,10 @@ class mcp_main
|
||||
break;
|
||||
|
||||
case 'post_details':
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_post.' . $phpEx);
|
||||
if (!function_exists('mcp_post_details'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_post.' . $phpEx);
|
||||
}
|
||||
|
||||
mcp_post_details($id, $mode, $action);
|
||||
|
||||
@@ -414,6 +426,25 @@ function change_topic_type($action, $topic_ids)
|
||||
|
||||
if (confirm_box(true))
|
||||
{
|
||||
|
||||
/**
|
||||
* Perform additional actions before changing topic(s) type
|
||||
*
|
||||
* @event core.mcp_change_topic_type_before
|
||||
* @var int new_topic_type The candidated topic type.
|
||||
* @var int forum_id The forum ID for the topic ID(s).
|
||||
* @var array topic_ids Array containing the topic ID(s) that will be changed
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'new_topic_type',
|
||||
'forum_id',
|
||||
'topic_ids',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.mcp_change_topic_type_before', compact($vars)));
|
||||
|
||||
$db->sql_transaction('begin');
|
||||
|
||||
$sql = 'UPDATE ' . TOPICS_TABLE . "
|
||||
SET topic_type = $new_topic_type
|
||||
WHERE " . $db->sql_in_set('topic_id', $topic_ids);
|
||||
@@ -425,13 +456,10 @@ function change_topic_type($action, $topic_ids)
|
||||
$sql = 'DELETE FROM ' . TOPICS_TABLE . '
|
||||
WHERE ' . $db->sql_in_set('topic_moved_id', $topic_ids);
|
||||
$db->sql_query($sql);
|
||||
|
||||
$sql = 'UPDATE ' . TOPICS_TABLE . "
|
||||
SET topic_type = $new_topic_type
|
||||
WHERE " . $db->sql_in_set('topic_id', $topic_ids);
|
||||
$db->sql_query($sql);
|
||||
}
|
||||
|
||||
$db->sql_transaction('commit');
|
||||
|
||||
$success_msg = (count($topic_ids) == 1) ? 'TOPIC_TYPE_CHANGED' : 'TOPICS_TYPE_CHANGED';
|
||||
|
||||
if (count($topic_ids))
|
||||
@@ -448,6 +476,22 @@ function change_topic_type($action, $topic_ids)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform additional actions after changing topic types
|
||||
*
|
||||
* @event core.mcp_change_topic_type_after
|
||||
* @var int new_topic_type The newly changed topic type.
|
||||
* @var int forum_id The forum ID where the newly changed topic type belongs to.
|
||||
* @var array topic_ids Array containing the topic IDs that have been changed
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'new_topic_type',
|
||||
'forum_id',
|
||||
'topic_ids',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.mcp_change_topic_type_after', compact($vars)));
|
||||
|
||||
meta_refresh(2, $redirect);
|
||||
$message = $user->lang[$success_msg];
|
||||
|
||||
@@ -930,10 +974,11 @@ function mcp_delete_topic($topic_ids, $is_soft = false, $soft_delete_reason = ''
|
||||
'DELETE_TOPIC_PERMANENTLY_EXPLAIN' => $user->lang('DELETE_TOPIC_PERMANENTLY', count($topic_ids)),
|
||||
));
|
||||
|
||||
$l_confirm = (count($topic_ids) == 1) ? 'DELETE_TOPIC' : 'DELETE_TOPICS';
|
||||
$count = count($topic_ids);
|
||||
$l_confirm = $count === 1 ? 'DELETE_TOPIC' : 'DELETE_TOPICS';
|
||||
if ($only_softdeleted)
|
||||
{
|
||||
$l_confirm .= '_PERMANENTLY';
|
||||
$l_confirm = array($l_confirm . '_PERMANENTLY', $count);
|
||||
$s_hidden_fields['delete_permanent'] = '1';
|
||||
}
|
||||
else if ($only_shadow || !$auth->acl_get('m_softdelete', $forum_id))
|
||||
@@ -1184,10 +1229,11 @@ function mcp_delete_post($post_ids, $is_soft = false, $soft_delete_reason = '',
|
||||
'DELETE_POST_PERMANENTLY_EXPLAIN' => $user->lang('DELETE_POST_PERMANENTLY', count($post_ids)),
|
||||
));
|
||||
|
||||
$l_confirm = (count($post_ids) == 1) ? 'DELETE_POST' : 'DELETE_POSTS';
|
||||
$count = count($post_ids);
|
||||
$l_confirm = $count === 1 ? 'DELETE_POST' : 'DELETE_POSTS';
|
||||
if ($only_softdeleted)
|
||||
{
|
||||
$l_confirm .= '_PERMANENTLY';
|
||||
$l_confirm = array($l_confirm . '_PERMANENTLY', $count);
|
||||
$s_hidden_fields['delete_permanent'] = '1';
|
||||
}
|
||||
else if (!$auth->acl_get('m_softdelete', $forum_id))
|
||||
@@ -1458,6 +1504,24 @@ function mcp_fork_topic($topic_ids)
|
||||
$db->sql_query('INSERT INTO ' . POSTS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
|
||||
$new_post_id = $db->sql_nextid();
|
||||
|
||||
/**
|
||||
* Perform actions after forked topic is created.
|
||||
*
|
||||
* @event core.mcp_main_fork_sql_after
|
||||
* @var int new_topic_id The newly created topic ID
|
||||
* @var int to_forum_id The forum ID where the forked topic has been moved to
|
||||
* @var int new_post_id The newly created post ID
|
||||
* @var array row Post data
|
||||
* @since 3.2.4-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'new_topic_id',
|
||||
'to_forum_id',
|
||||
'new_post_id',
|
||||
'row',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.mcp_main_fork_sql_after', compact($vars)));
|
||||
|
||||
switch ($row['post_visibility'])
|
||||
{
|
||||
case ITEM_APPROVED:
|
||||
|
@@ -28,9 +28,9 @@ class mcp_notes
|
||||
var $p_master;
|
||||
var $u_action;
|
||||
|
||||
function mcp_notes(&$p_master)
|
||||
function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
function main($id, $mode)
|
||||
|
@@ -28,9 +28,9 @@ class mcp_pm_reports
|
||||
var $p_master;
|
||||
var $u_action;
|
||||
|
||||
function mcp_pm_reports(&$p_master)
|
||||
function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
function main($id, $mode)
|
||||
|
@@ -213,6 +213,10 @@ function mcp_post_details($id, $mode, $action)
|
||||
$l_deleted_by = '';
|
||||
}
|
||||
|
||||
// parse signature
|
||||
$parse_flags = ($post_info['user_sig_bbcode_bitfield'] ? OPTION_FLAG_BBCODE : 0) | OPTION_FLAG_SMILIES;
|
||||
$post_info['user_sig'] = generate_text_for_display($post_info['user_sig'], $post_info['user_sig_bbcode_uid'], $post_info['user_sig_bbcode_bitfield'], $parse_flags, true);
|
||||
|
||||
$mcp_post_template_data = array(
|
||||
'U_MCP_ACTION' => "$url&i=main&quickmod=1&mode=post_details", // Use this for mode paramaters
|
||||
'U_POST_ACTION' => "$url&i=$id&mode=post_details", // Use this for action parameters
|
||||
@@ -262,6 +266,7 @@ function mcp_post_details($id, $mode, $action)
|
||||
'POST_IP' => $post_info['poster_ip'],
|
||||
'POST_IPADDR' => ($auth->acl_get('m_info', $post_info['forum_id']) && $request->variable('lookup', '')) ? @gethostbyaddr($post_info['poster_ip']) : '',
|
||||
'POST_ID' => $post_info['post_id'],
|
||||
'SIGNATURE' => $post_info['user_sig'],
|
||||
|
||||
'U_LOOKUP_IP' => ($auth->acl_get('m_info', $post_info['forum_id'])) ? "$url&i=$id&mode=$mode&lookup={$post_info['poster_ip']}#ip" : '',
|
||||
'U_WHOIS' => ($auth->acl_get('m_info', $post_info['forum_id'])) ? append_sid("{$phpbb_root_path}mcp.$phpEx", "i=$id&mode=$mode&action=whois&p=$post_id&ip={$post_info['poster_ip']}") : '',
|
||||
|
@@ -28,9 +28,9 @@ class mcp_queue
|
||||
var $p_master;
|
||||
var $u_action;
|
||||
|
||||
public function mcp_queue(&$p_master)
|
||||
public function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
public function main($id, $mode)
|
||||
@@ -501,6 +501,29 @@ class mcp_queue
|
||||
AND t.topic_id = p.topic_id
|
||||
AND u.user_id = p.poster_id
|
||||
ORDER BY ' . $sort_order_sql;
|
||||
|
||||
/**
|
||||
* Alter sql query to get information on all posts in queue
|
||||
*
|
||||
* @event core.mcp_queue_get_posts_for_posts_query_before
|
||||
* @var string sql String with the query to be executed
|
||||
* @var array forum_list List of forums that contain the posts
|
||||
* @var int visibility_const Integer with one of the possible ITEM_* constant values
|
||||
* @var int topic_id topic_id in the page request
|
||||
* @var string limit_time_sql String with the SQL code to limit the time interval of the post (Note: May be empty string)
|
||||
* @var string sort_order_sql String with the ORDER BY SQL code used in this query
|
||||
* @since 3.2.3-RC2
|
||||
*/
|
||||
$vars = array(
|
||||
'sql',
|
||||
'forum_list',
|
||||
'visibility_const',
|
||||
'topic_id',
|
||||
'limit_time_sql',
|
||||
'sort_order_sql',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.mcp_queue_get_posts_for_posts_query_before', compact($vars)));
|
||||
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$post_data = $rowset = array();
|
||||
@@ -588,7 +611,7 @@ class mcp_queue
|
||||
$row['post_username'] = $row['username'] ?: $user->lang['GUEST'];
|
||||
}
|
||||
|
||||
$template->assign_block_vars('postrow', array(
|
||||
$post_row = array(
|
||||
'U_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $row['forum_id'] . '&t=' . $row['topic_id']),
|
||||
'U_VIEWFORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $row['forum_id']),
|
||||
'U_VIEWPOST' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $row['forum_id'] . '&p=' . $row['post_id']) . (($mode == 'unapproved_posts') ? '#p' . $row['post_id'] : ''),
|
||||
@@ -606,7 +629,25 @@ class mcp_queue
|
||||
'TOPIC_TITLE' => $row['topic_title'],
|
||||
'POST_TIME' => $user->format_date($row['post_time']),
|
||||
'S_HAS_ATTACHMENTS' => $auth->acl_get('u_download') && $auth->acl_get('f_download', $row['forum_id']) && $row['post_attachment'],
|
||||
));
|
||||
);
|
||||
|
||||
/**
|
||||
* Alter sql query to get information on all topics in the list of forums provided.
|
||||
*
|
||||
* @event core.mcp_queue_get_posts_modify_post_row
|
||||
* @var array post_row Template variables for current post
|
||||
* @var array row Post data
|
||||
* @var array forum_names Forum names
|
||||
* @since 3.2.3-RC2
|
||||
*/
|
||||
$vars = array(
|
||||
'post_row',
|
||||
'row',
|
||||
'forum_names',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.mcp_queue_get_posts_modify_post_row', compact($vars)));
|
||||
|
||||
$template->assign_block_vars('postrow', $post_row);
|
||||
}
|
||||
unset($rowset, $forum_names);
|
||||
|
||||
|
@@ -28,9 +28,9 @@ class mcp_reports
|
||||
var $p_master;
|
||||
var $u_action;
|
||||
|
||||
function mcp_reports(&$p_master)
|
||||
function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
function main($id, $mode)
|
||||
@@ -242,7 +242,14 @@ class mcp_reports
|
||||
}
|
||||
}
|
||||
|
||||
$template->assign_vars(array(
|
||||
// parse signature
|
||||
$parse_flags = ($post_info['user_sig_bbcode_bitfield'] ? OPTION_FLAG_BBCODE : 0) | OPTION_FLAG_SMILIES;
|
||||
$post_info['user_sig'] = generate_text_for_display($post_info['user_sig'], $post_info['user_sig_bbcode_uid'], $post_info['user_sig_bbcode_bitfield'], $parse_flags, true);
|
||||
|
||||
$topic_id = (int) $post_info['topic_id'];
|
||||
|
||||
// So it can be sent through the event below.
|
||||
$report_template = array(
|
||||
'S_MCP_REPORT' => true,
|
||||
'S_CLOSE_ACTION' => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=reports&mode=report_details&f=' . $post_info['forum_id'] . '&p=' . $post_id),
|
||||
'S_CAN_VIEWIP' => $auth->acl_get('m_info', $post_info['forum_id']),
|
||||
@@ -291,9 +298,36 @@ class mcp_reports
|
||||
'POST_IP' => $post_info['poster_ip'],
|
||||
'POST_IPADDR' => ($auth->acl_get('m_info', $post_info['forum_id']) && $request->variable('lookup', '')) ? @gethostbyaddr($post_info['poster_ip']) : '',
|
||||
'POST_ID' => $post_info['post_id'],
|
||||
'SIGNATURE' => $post_info['user_sig'],
|
||||
|
||||
'U_LOOKUP_IP' => ($auth->acl_get('m_info', $post_info['forum_id'])) ? $this->u_action . '&r=' . $report_id . '&p=' . $post_id . '&f=' . $forum_id . '&lookup=' . $post_info['poster_ip'] . '#ip' : '',
|
||||
));
|
||||
);
|
||||
|
||||
/**
|
||||
* Event to add/modify MCP report details template data.
|
||||
*
|
||||
* @event core.mcp_report_template_data
|
||||
* @var int forum_id The forum_id, the number in the f GET parameter
|
||||
* @var int topic_id The topic_id of the report being viewed
|
||||
* @var int post_id The post_id of the report being viewed (if 0, it is meaningless)
|
||||
* @var int report_id The report_id of the report being viewed
|
||||
* @var array report Array with the report data
|
||||
* @var array report_template Array with the report template data
|
||||
* @var array post_info Array with the reported post data
|
||||
* @since 3.2.5-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'forum_id',
|
||||
'topic_id',
|
||||
'post_id',
|
||||
'report_id',
|
||||
'report',
|
||||
'report_template',
|
||||
'post_info',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.mcp_report_template_data', compact($vars)));
|
||||
|
||||
$template->assign_vars($report_template);
|
||||
|
||||
$this->tpl_name = 'mcp_post';
|
||||
|
||||
|
@@ -93,7 +93,11 @@ function mcp_topic_view($id, $mode, $action)
|
||||
// Restore or pprove posts?
|
||||
if (($action == 'restore' || $action == 'approve') && $auth->acl_get('m_approve', $topic_info['forum_id']))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_queue.' . $phpEx);
|
||||
if (!class_exists('mcp_queue'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_queue.' . $phpEx);
|
||||
}
|
||||
|
||||
include_once($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
|
||||
include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
|
||||
|
||||
|
@@ -28,9 +28,9 @@ class mcp_warn
|
||||
var $p_master;
|
||||
var $u_action;
|
||||
|
||||
function mcp_warn(&$p_master)
|
||||
function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
function main($id, $mode)
|
||||
|
@@ -1139,7 +1139,7 @@ class parse_message extends bbcode_firstpass
|
||||
/**
|
||||
* Init - give message here or manually
|
||||
*/
|
||||
function parse_message($message = '')
|
||||
function __construct($message = '')
|
||||
{
|
||||
// Init BBCode UID
|
||||
$this->bbcode_uid = substr(base_convert(unique_id(), 16, 36), 0, BBCODE_UID_LEN);
|
||||
@@ -1587,6 +1587,16 @@ class parse_message extends bbcode_firstpass
|
||||
'poster_id' => $user->data['user_id'],
|
||||
);
|
||||
|
||||
/**
|
||||
* Modify attachment sql array on submit
|
||||
*
|
||||
* @event core.modify_attachment_sql_ary_on_submit
|
||||
* @var array sql_ary Array containing SQL data
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = array('sql_ary');
|
||||
extract($phpbb_dispatcher->trigger_event('core.modify_attachment_sql_ary_on_submit', compact($vars)));
|
||||
|
||||
$db->sql_query('INSERT INTO ' . ATTACHMENTS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
|
||||
|
||||
$new_entry = array(
|
||||
@@ -1722,6 +1732,16 @@ class parse_message extends bbcode_firstpass
|
||||
'poster_id' => $user->data['user_id'],
|
||||
);
|
||||
|
||||
/**
|
||||
* Modify attachment sql array on upload
|
||||
*
|
||||
* @event core.modify_attachment_sql_ary_on_upload
|
||||
* @var array sql_ary Array containing SQL data
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = array('sql_ary');
|
||||
extract($phpbb_dispatcher->trigger_event('core.modify_attachment_sql_ary_on_upload', compact($vars)));
|
||||
|
||||
$db->sql_query('INSERT INTO ' . ATTACHMENTS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
|
||||
|
||||
$new_entry = array(
|
||||
|
@@ -40,7 +40,7 @@ class phpbb_questionnaire_data_collector
|
||||
*
|
||||
* @param string
|
||||
*/
|
||||
function phpbb_questionnaire_data_collector($install_id)
|
||||
function __construct($install_id)
|
||||
{
|
||||
$this->install_id = $install_id;
|
||||
$this->providers = array();
|
||||
@@ -223,7 +223,7 @@ class phpbb_questionnaire_phpbb_data_provider
|
||||
*
|
||||
* @param array $config
|
||||
*/
|
||||
function phpbb_questionnaire_phpbb_data_provider($config)
|
||||
function __construct($config)
|
||||
{
|
||||
// generate a unique id if necessary
|
||||
if (empty($config['questionnaire_unique_id']))
|
||||
@@ -369,7 +369,6 @@ class phpbb_questionnaire_phpbb_data_provider
|
||||
'hot_threshold' => true,
|
||||
'img_create_thumbnail' => true,
|
||||
'img_display_inlined' => true,
|
||||
'img_imagick' => true,
|
||||
'img_link_height' => true,
|
||||
'img_link_width' => true,
|
||||
'img_max_height' => true,
|
||||
|
@@ -126,7 +126,7 @@ define ( "SPH_GROUPBY_ATTRPAIR", 5 );
|
||||
function sphPackI64 ( $v )
|
||||
{
|
||||
assert ( is_numeric($v) );
|
||||
|
||||
|
||||
// x64
|
||||
if ( PHP_INT_SIZE>=8 )
|
||||
{
|
||||
@@ -138,7 +138,7 @@ function sphPackI64 ( $v )
|
||||
if ( is_int($v) )
|
||||
return pack ( "NN", $v < 0 ? -1 : 0, $v );
|
||||
|
||||
// x32, bcmath
|
||||
// x32, bcmath
|
||||
if ( function_exists("bcmul") )
|
||||
{
|
||||
if ( bccomp ( $v, 0 ) == -1 )
|
||||
@@ -175,16 +175,16 @@ function sphPackI64 ( $v )
|
||||
function sphPackU64 ( $v )
|
||||
{
|
||||
assert ( is_numeric($v) );
|
||||
|
||||
|
||||
// x64
|
||||
if ( PHP_INT_SIZE>=8 )
|
||||
{
|
||||
assert ( $v>=0 );
|
||||
|
||||
|
||||
// x64, int
|
||||
if ( is_int($v) )
|
||||
return pack ( "NN", $v>>32, $v&0xFFFFFFFF );
|
||||
|
||||
|
||||
// x64, bcmath
|
||||
if ( function_exists("bcmul") )
|
||||
{
|
||||
@@ -192,12 +192,12 @@ function sphPackU64 ( $v )
|
||||
$l = bcmod ( $v, 4294967296 );
|
||||
return pack ( "NN", $h, $l );
|
||||
}
|
||||
|
||||
|
||||
// x64, no-bcmath
|
||||
$p = max ( 0, strlen($v) - 13 );
|
||||
$lo = (int)substr ( $v, $p );
|
||||
$hi = (int)substr ( $v, 0, $p );
|
||||
|
||||
|
||||
$m = $lo + $hi*1316134912;
|
||||
$l = $m % 4294967296;
|
||||
$h = $hi*2328 + (int)($m/4294967296);
|
||||
@@ -208,7 +208,7 @@ function sphPackU64 ( $v )
|
||||
// x32, int
|
||||
if ( is_int($v) )
|
||||
return pack ( "NN", 0, $v );
|
||||
|
||||
|
||||
// x32, bcmath
|
||||
if ( function_exists("bcmul") )
|
||||
{
|
||||
@@ -221,7 +221,7 @@ function sphPackU64 ( $v )
|
||||
$p = max(0, strlen($v) - 13);
|
||||
$lo = (float)substr($v, $p);
|
||||
$hi = (float)substr($v, 0, $p);
|
||||
|
||||
|
||||
$m = $lo + $hi*1316134912.0;
|
||||
$q = floor($m / 4294967296.0);
|
||||
$l = $m - ($q * 4294967296.0);
|
||||
@@ -277,11 +277,11 @@ function sphUnpackU64 ( $v )
|
||||
// x32, bcmath
|
||||
if ( function_exists("bcmul") )
|
||||
return bcadd ( $lo, bcmul ( $hi, "4294967296" ) );
|
||||
|
||||
|
||||
// x32, no-bcmath
|
||||
$hi = (float)$hi;
|
||||
$lo = (float)$lo;
|
||||
|
||||
|
||||
$q = floor($hi/10000000.0);
|
||||
$r = $hi - $q*10000000.0;
|
||||
$m = $lo + $r*4967296.0;
|
||||
@@ -324,7 +324,7 @@ function sphUnpackI64 ( $v )
|
||||
return $lo;
|
||||
return sprintf ( "%.0f", $lo - 4294967296.0 );
|
||||
}
|
||||
|
||||
|
||||
$neg = "";
|
||||
$c = 0;
|
||||
if ( $hi<0 )
|
||||
@@ -333,7 +333,7 @@ function sphUnpackI64 ( $v )
|
||||
$lo = ~$lo;
|
||||
$c = 1;
|
||||
$neg = "-";
|
||||
}
|
||||
}
|
||||
|
||||
$hi = sprintf ( "%u", $hi );
|
||||
$lo = sprintf ( "%u", $lo );
|
||||
@@ -345,7 +345,7 @@ function sphUnpackI64 ( $v )
|
||||
// x32, no-bcmath
|
||||
$hi = (float)$hi;
|
||||
$lo = (float)$lo;
|
||||
|
||||
|
||||
$q = floor($hi/10000000.0);
|
||||
$r = $hi - $q*10000000.0;
|
||||
$m = $lo + $r*4967296.0;
|
||||
@@ -427,7 +427,7 @@ class SphinxClient
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/// create a new client object and fill defaults
|
||||
function SphinxClient ()
|
||||
function __construct ()
|
||||
{
|
||||
// per-client-object settings
|
||||
$this->_host = "localhost";
|
||||
@@ -510,7 +510,7 @@ class SphinxClient
|
||||
$this->_path = $host;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
assert ( is_int($port) );
|
||||
$this->_host = $host;
|
||||
$this->_port = $port;
|
||||
@@ -590,14 +590,14 @@ class SphinxClient
|
||||
$fp = @fsockopen ( $host, $port, $errno, $errstr );
|
||||
else
|
||||
$fp = @fsockopen ( $host, $port, $errno, $errstr, $this->_timeout );
|
||||
|
||||
|
||||
if ( !$fp )
|
||||
{
|
||||
if ( $this->_path )
|
||||
$location = $this->_path;
|
||||
else
|
||||
$location = "{$this->_host}:{$this->_port}";
|
||||
|
||||
|
||||
$errstr = trim ( $errstr );
|
||||
$this->_error = "connection to $location failed (errno=$errno, msg=$errstr)";
|
||||
$this->_connerror = true;
|
||||
@@ -1236,7 +1236,7 @@ class SphinxClient
|
||||
if ( $type==SPH_ATTR_FLOAT )
|
||||
{
|
||||
list(,$uval) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4;
|
||||
list(,$fval) = unpack ( "f*", pack ( "L", $uval ) );
|
||||
list(,$fval) = unpack ( "f*", pack ( "L", $uval ) );
|
||||
$attrvals[$attr] = $fval;
|
||||
continue;
|
||||
}
|
||||
@@ -1264,7 +1264,7 @@ class SphinxClient
|
||||
} else if ( $type==SPH_ATTR_STRING )
|
||||
{
|
||||
$attrvals[$attr] = substr ( $response, $p, $val );
|
||||
$p += $val;
|
||||
$p += $val;
|
||||
} else
|
||||
{
|
||||
$attrvals[$attr] = sphFixUint($val);
|
||||
@@ -1345,7 +1345,7 @@ class SphinxClient
|
||||
if ( !isset($opts["passage_boundary"]) ) $opts["passage_boundary"] = "none";
|
||||
if ( !isset($opts["emit_zones"]) ) $opts["emit_zones"] = false;
|
||||
if ( !isset($opts["load_files_scattered"]) ) $opts["load_files_scattered"] = false;
|
||||
|
||||
|
||||
|
||||
/////////////////
|
||||
// build request
|
||||
@@ -1634,7 +1634,7 @@ class SphinxClient
|
||||
|
||||
fclose ( $this->_socket );
|
||||
$this->_socket = false;
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@@ -87,6 +87,8 @@ class ucp_activate
|
||||
WHERE user_id = ' . $user_row['user_id'];
|
||||
$db->sql_query($sql);
|
||||
|
||||
$user->reset_login_keys($user_row['user_id']);
|
||||
|
||||
$phpbb_log->add('user', $user->data['user_id'], $user->ip, 'LOG_USER_NEW_PASSWORD', false, array(
|
||||
'reportee_id' => $user_row['user_id'],
|
||||
$user_row['username']
|
||||
|
@@ -32,6 +32,9 @@ class ucp_groups
|
||||
global $db, $user, $auth, $cache, $template;
|
||||
global $request, $phpbb_container, $phpbb_log;
|
||||
|
||||
/** @var \phpbb\language\language $language Language object */
|
||||
$language = $phpbb_container->get('language');
|
||||
|
||||
$user->add_lang('groups');
|
||||
|
||||
$return_page = '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '">', '</a>');
|
||||
@@ -396,7 +399,10 @@ class ucp_groups
|
||||
$action = (isset($_POST['addusers'])) ? 'addusers' : $request->variable('action', '');
|
||||
$group_id = $request->variable('g', 0);
|
||||
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
if (!function_exists('phpbb_get_user_rank'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
}
|
||||
|
||||
add_form_key('ucp_groups');
|
||||
|
||||
@@ -1054,13 +1060,27 @@ class ucp_groups
|
||||
|
||||
if (confirm_box(true))
|
||||
{
|
||||
$return_manage_page = '<br /><br />' . $language->lang('RETURN_PAGE', '<a href="' . $this->u_action . '&action=list&g=' . $group_id . '">', '</a>');
|
||||
|
||||
// Add user/s to group
|
||||
if ($error = group_user_add($group_id, false, $name_ary, $group_name, $default, 0, 0, $group_row))
|
||||
{
|
||||
trigger_error($user->lang[$error] . $return_page);
|
||||
$display_message = $language->lang($error);
|
||||
|
||||
if ($error == 'GROUP_USERS_INVALID')
|
||||
{
|
||||
// Find which users don't exist
|
||||
$actual_name_ary = $name_ary;
|
||||
$actual_user_id_ary = [];
|
||||
user_get_id_name($actual_user_id_ary, $actual_name_ary, false, true);
|
||||
|
||||
$display_message = $language->lang('GROUP_USERS_INVALID', implode($language->lang('COMMA_SEPARATOR'), array_udiff($name_ary, $actual_name_ary, 'strcasecmp')));
|
||||
}
|
||||
|
||||
trigger_error($display_message . $return_manage_page);
|
||||
}
|
||||
|
||||
trigger_error($user->lang['GROUP_USERS_ADDED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&action=list&g=' . $group_id . '">', '</a>'));
|
||||
trigger_error($language->lang('GROUP_USERS_ADDED') . $return_manage_page);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -39,7 +39,7 @@ class ucp_login_link
|
||||
*/
|
||||
function main($id, $mode)
|
||||
{
|
||||
global $phpbb_container, $request, $template, $user;
|
||||
global $phpbb_container, $request, $template, $user, $phpbb_dispatcher;
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
// Initialize necessary variables
|
||||
@@ -108,7 +108,7 @@ class ucp_login_link
|
||||
}
|
||||
}
|
||||
|
||||
$template->assign_vars(array(
|
||||
$tpl_ary = array(
|
||||
// Common template elements
|
||||
'LOGIN_LINK_ERROR' => $login_link_error,
|
||||
'PASSWORD_CREDENTIAL' => 'login_password',
|
||||
@@ -121,7 +121,24 @@ class ucp_login_link
|
||||
// Login elements
|
||||
'LOGIN_ERROR' => $login_error,
|
||||
'LOGIN_USERNAME' => $login_username,
|
||||
));
|
||||
);
|
||||
|
||||
/**
|
||||
* Event to perform additional actions before ucp_login_link is displayed
|
||||
*
|
||||
* @event core.ucp_login_link_template_after
|
||||
* @var array data Login link data
|
||||
* @var \phpbb\auth\provider_interface auth_provider Auth provider
|
||||
* @var string login_link_error Login link error
|
||||
* @var string login_error Login error
|
||||
* @var string login_username Login username
|
||||
* @var array tpl_ary Template variables
|
||||
* @since 3.2.4-RC1
|
||||
*/
|
||||
$vars = array('data', 'auth_provider', 'login_link_error', 'login_error', 'login_username', 'tpl_ary');
|
||||
extract($phpbb_dispatcher->trigger_event('core.ucp_login_link_template_after', compact($vars)));
|
||||
|
||||
$template->assign_vars($tpl_ary);
|
||||
|
||||
$this->tpl_name = 'ucp_login_link';
|
||||
$this->page_title = 'UCP_LOGIN_LINK';
|
||||
|
@@ -28,9 +28,9 @@ class ucp_main
|
||||
var $p_master;
|
||||
var $u_action;
|
||||
|
||||
function ucp_main(&$p_master)
|
||||
function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
function main($id, $mode)
|
||||
@@ -77,6 +77,22 @@ class ucp_main
|
||||
// If the user can't see any forums, he can't read any posts because fid of 0 is invalid
|
||||
if (!empty($forum_ary))
|
||||
{
|
||||
/**
|
||||
* Modify sql variables before query is processed
|
||||
*
|
||||
* @event core.ucp_main_front_modify_sql
|
||||
* @var string sql_select SQL select
|
||||
* @var string sql_from SQL from
|
||||
* @var array forum_ary Forum array
|
||||
* @since 3.2.4-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'sql_select',
|
||||
'sql_from',
|
||||
'forum_ary',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.ucp_main_front_modify_sql', compact($vars)));
|
||||
|
||||
$sql = "SELECT t.* $sql_select
|
||||
FROM $sql_from
|
||||
WHERE t.topic_type = " . POST_GLOBAL . '
|
||||
@@ -144,7 +160,7 @@ class ucp_main
|
||||
$folder_img .= '_mine';
|
||||
}
|
||||
|
||||
$template->assign_block_vars('topicrow', array(
|
||||
$topicrow = array(
|
||||
'FORUM_ID' => $forum_id,
|
||||
'TOPIC_ID' => $topic_id,
|
||||
'TOPIC_AUTHOR' => get_username_string('username', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']),
|
||||
@@ -171,8 +187,30 @@ class ucp_main
|
||||
'U_LAST_POST' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id&p=" . $row['topic_last_post_id']) . '#p' . $row['topic_last_post_id'],
|
||||
'U_LAST_POST_AUTHOR' => get_username_string('profile', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']),
|
||||
'U_NEWEST_POST' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id&view=unread") . '#unread',
|
||||
'U_VIEW_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id"))
|
||||
'U_VIEW_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id"),
|
||||
);
|
||||
|
||||
/**
|
||||
* Add template variables to a front topics row.
|
||||
*
|
||||
* @event core.ucp_main_front_modify_template_vars
|
||||
* @var array topicrow 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_img Folder image
|
||||
* @var string folder_alt Alt text for the folder image
|
||||
* @since 3.2.4-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'topicrow',
|
||||
'row',
|
||||
'forum_id',
|
||||
'folder_img',
|
||||
'folder_alt',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.ucp_main_front_modify_template_vars', compact($vars)));
|
||||
|
||||
$template->assign_block_vars('topicrow', $topicrow);
|
||||
}
|
||||
|
||||
if ($config['load_user_activity'])
|
||||
@@ -207,7 +245,10 @@ class ucp_main
|
||||
|
||||
case 'subscribed':
|
||||
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
if (!function_exists('topic_status'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
}
|
||||
|
||||
$user->add_lang('viewforum');
|
||||
|
||||
@@ -443,7 +484,10 @@ class ucp_main
|
||||
break;
|
||||
}
|
||||
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
if (!function_exists('topic_status'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
}
|
||||
|
||||
$user->add_lang('viewforum');
|
||||
|
||||
@@ -502,6 +546,9 @@ class ucp_main
|
||||
$draft_subject = $draft_message = '';
|
||||
add_form_key('ucp_draft');
|
||||
|
||||
include_once($phpbb_root_path . 'includes/message_parser.' . $phpEx);
|
||||
$message_parser = new parse_message();
|
||||
|
||||
if ($delete)
|
||||
{
|
||||
if (check_form_key('ucp_draft'))
|
||||
@@ -535,9 +582,19 @@ class ucp_main
|
||||
{
|
||||
if ($draft_message && $draft_subject)
|
||||
{
|
||||
// $auth->acl_gets can't be used here because it will check for global forum permissions in this case
|
||||
// In general we don't need too harsh checking here for permissions, as this will be handled later when submitting
|
||||
$bbcode_status = $auth->acl_get('u_pm_bbcode') || $auth->acl_getf_global('f_bbcode');
|
||||
$smilies_status = $auth->acl_get('u_pm_smilies') || $auth->acl_getf_global('f_smilies');
|
||||
$img_status = $auth->acl_get('u_pm_img') || $auth->acl_getf_global('f_img');
|
||||
$flash_status = $auth->acl_get('u_pm_flash') || $auth->acl_getf_global('f_flash');
|
||||
|
||||
$message_parser->message = $draft_message;
|
||||
$message_parser->parse($bbcode_status, $config['allow_post_links'], $smilies_status, $img_status, $flash_status, true, $config['allow_post_links']);
|
||||
|
||||
$draft_row = array(
|
||||
'draft_subject' => $draft_subject,
|
||||
'draft_message' => $draft_message
|
||||
'draft_message' => $message_parser->message,
|
||||
);
|
||||
|
||||
$sql = 'UPDATE ' . DRAFTS_TABLE . '
|
||||
@@ -639,9 +696,16 @@ class ucp_main
|
||||
$insert_url = append_sid("{$phpbb_root_path}ucp.$phpEx", "i=$id&mode=compose&d=" . $draft['draft_id']);
|
||||
}
|
||||
|
||||
if (!$submit)
|
||||
{
|
||||
$message_parser->message = $draft['draft_message'];
|
||||
$message_parser->decode_message();
|
||||
$draft_message = $message_parser->message;
|
||||
}
|
||||
|
||||
$template_row = array(
|
||||
'DATE' => $user->format_date($draft['save_time']),
|
||||
'DRAFT_MESSAGE' => ($submit) ? $draft_message : $draft['draft_message'],
|
||||
'DRAFT_MESSAGE' => $draft_message,
|
||||
'DRAFT_SUBJECT' => ($submit) ? $draft_subject : $draft['draft_subject'],
|
||||
'TITLE' => $title,
|
||||
|
||||
|
@@ -82,7 +82,10 @@ class ucp_pm
|
||||
$mode = 'view';
|
||||
}
|
||||
|
||||
include($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
|
||||
if (!function_exists('get_folder'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
|
||||
}
|
||||
|
||||
switch ($mode)
|
||||
{
|
||||
@@ -104,7 +107,10 @@ class ucp_pm
|
||||
break;
|
||||
}
|
||||
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_pm_compose.' . $phpEx);
|
||||
if (!function_exists('compose_pm'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_pm_compose.' . $phpEx);
|
||||
}
|
||||
compose_pm($id, $mode, $action, $user_folders);
|
||||
|
||||
$tpl_file = 'posting_body';
|
||||
@@ -114,7 +120,10 @@ class ucp_pm
|
||||
set_user_message_limit();
|
||||
get_folder($user->data['user_id']);
|
||||
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_pm_options.' . $phpEx);
|
||||
if (!function_exists('message_options'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_pm_options.' . $phpEx);
|
||||
}
|
||||
message_options($id, $mode, $global_privmsgs_rules, $global_rule_conditions);
|
||||
|
||||
$tpl_file = 'ucp_pm_options';
|
||||
@@ -125,8 +134,10 @@ class ucp_pm
|
||||
get_folder($user->data['user_id']);
|
||||
$this->p_name = 'pm';
|
||||
|
||||
// Call another module... please do not try this at home... Hoochie Coochie Man
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_main.' . $phpEx);
|
||||
if (!class_exists('ucp_main'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_main.' . $phpEx);
|
||||
}
|
||||
|
||||
$module = new ucp_main($this);
|
||||
$module->u_action = $this->u_action;
|
||||
@@ -170,6 +181,12 @@ class ucp_pm
|
||||
trigger_error('NO_AUTH_READ_MESSAGE');
|
||||
}
|
||||
|
||||
if ($view == 'print' && (!$config['print_pm'] || !$auth->acl_get('u_pm_printpm')))
|
||||
{
|
||||
send_status_line(403, 'Forbidden');
|
||||
trigger_error('NO_AUTH_PRINT_MESSAGE');
|
||||
}
|
||||
|
||||
// Do not allow hold messages to be seen
|
||||
if ($folder_id == PRIVMSGS_HOLD_BOX)
|
||||
{
|
||||
@@ -369,7 +386,10 @@ class ucp_pm
|
||||
|
||||
if ($action == 'view_folder')
|
||||
{
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_pm_viewfolder.' . $phpEx);
|
||||
if (!function_exists('view_folder'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_pm_viewfolder.' . $phpEx);
|
||||
}
|
||||
view_folder($id, $mode, $folder_id, $folder);
|
||||
|
||||
$tpl_file = 'ucp_pm_viewfolder';
|
||||
@@ -387,7 +407,10 @@ class ucp_pm
|
||||
trigger_error('NO_MESSAGE');
|
||||
}
|
||||
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_pm_viewmessage.' . $phpEx);
|
||||
if (!function_exists('view_message'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_pm_viewmessage.' . $phpEx);
|
||||
}
|
||||
view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row);
|
||||
|
||||
$tpl_file = ($view == 'print') ? 'ucp_pm_viewmessage_print' : 'ucp_pm_viewmessage';
|
||||
|
@@ -33,9 +33,20 @@ function compose_pm($id, $mode, $action, $user_folders = array())
|
||||
// Needed for handle_message_list_actions()
|
||||
global $refresh, $submit, $preview;
|
||||
|
||||
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
include($phpbb_root_path . 'includes/message_parser.' . $phpEx);
|
||||
if (!function_exists('generate_smilies'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
|
||||
}
|
||||
|
||||
if (!function_exists('display_custom_bbcodes'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
}
|
||||
|
||||
if (!class_exists('parse_message'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/message_parser.' . $phpEx);
|
||||
}
|
||||
|
||||
if (!$action)
|
||||
{
|
||||
@@ -48,7 +59,6 @@ function compose_pm($id, $mode, $action, $user_folders = array())
|
||||
$to_group_id = $request->variable('g', 0);
|
||||
$msg_id = $request->variable('p', 0);
|
||||
$draft_id = $request->variable('d', 0);
|
||||
$lastclick = $request->variable('lastclick', 0);
|
||||
|
||||
// Reply to all triggered (quote/reply)
|
||||
$reply_to_all = $request->variable('reply_to_all', 0);
|
||||
@@ -80,7 +90,7 @@ function compose_pm($id, $mode, $action, $user_folders = array())
|
||||
$group_helper = $phpbb_container->get('group_helper');
|
||||
|
||||
// Was cancel pressed? If so then redirect to the appropriate page
|
||||
if ($cancel || ($current_time - $lastclick < 2 && $submit))
|
||||
if ($cancel)
|
||||
{
|
||||
if ($msg_id)
|
||||
{
|
||||
@@ -125,7 +135,7 @@ function compose_pm($id, $mode, $action, $user_folders = array())
|
||||
// Add groups to PM box
|
||||
if ($config['allow_mass_pm'] && $auth->acl_get('u_masspm_group'))
|
||||
{
|
||||
$sql = 'SELECT g.group_id, g.group_name, g.group_type
|
||||
$sql = 'SELECT g.group_id, g.group_name, g.group_type, g.group_colour
|
||||
FROM ' . GROUPS_TABLE . ' g';
|
||||
|
||||
if (!$auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel'))
|
||||
@@ -148,7 +158,7 @@ function compose_pm($id, $mode, $action, $user_folders = array())
|
||||
$group_options = '';
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$group_options .= '<option' . (($row['group_type'] == GROUP_SPECIAL) ? ' class="sep"' : '') . ' value="' . $row['group_id'] . '">' . $group_helper->get_name($row['group_name']) . '</option>';
|
||||
$group_options .= '<option' . (($row['group_type'] == GROUP_SPECIAL) ? ' class="sep"' : '') . ' value="' . $row['group_id'] . '"' . ($row['group_colour'] ? ' style="color: #' . $row['group_colour'] . '"' : '') . '>' . $group_helper->get_name($row['group_name']) . '</option>';
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
}
|
||||
@@ -659,13 +669,16 @@ function compose_pm($id, $mode, $action, $user_folders = array())
|
||||
{
|
||||
if (confirm_box(true))
|
||||
{
|
||||
$message_parser->message = $message;
|
||||
$message_parser->parse($bbcode_status, $url_status, $smilies_status, $img_status, $flash_status, true, $url_status);
|
||||
|
||||
$sql = 'INSERT INTO ' . DRAFTS_TABLE . ' ' . $db->sql_build_array('INSERT', array(
|
||||
'user_id' => $user->data['user_id'],
|
||||
'topic_id' => 0,
|
||||
'forum_id' => 0,
|
||||
'save_time' => $current_time,
|
||||
'draft_subject' => $subject,
|
||||
'draft_message' => $message
|
||||
'draft_message' => $message_parser->message,
|
||||
)
|
||||
);
|
||||
$db->sql_query($sql);
|
||||
@@ -954,7 +967,16 @@ function compose_pm($id, $mode, $action, $user_folders = array())
|
||||
$post_id = $request->variable('p', 0);
|
||||
if ($config['allow_post_links'])
|
||||
{
|
||||
$message_link = "[url=" . generate_board_url() . "/viewtopic.$phpEx?p={$post_id}#p{$post_id}]{$user->lang['SUBJECT']}{$user->lang['COLON']} {$message_subject}[/url]\n\n";
|
||||
$message_link = generate_board_url() . "/viewtopic.$phpEx?p={$post_id}#p{$post_id}";
|
||||
$message_link_subject = "{$user->lang['SUBJECT']}{$user->lang['COLON']} {$message_subject}";
|
||||
if ($bbcode_status)
|
||||
{
|
||||
$message_link = "[url=" . $message_link . "]" . $message_link_subject . "[/url]\n\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
$message_link = $message_link . " - " . $message_link_subject . "\n\n";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -974,11 +996,12 @@ function compose_pm($id, $mode, $action, $user_folders = array())
|
||||
{
|
||||
$quote_attributes['post_id'] = $post['msg_id'];
|
||||
}
|
||||
$quote_text = $phpbb_container->get('text_formatter.utils')->generate_quote(
|
||||
censor_text($message_parser->message),
|
||||
$quote_attributes
|
||||
);
|
||||
$message_parser->message = $message_link . $quote_text . "\n\n";
|
||||
|
||||
/** @var \phpbb\language\language $language */
|
||||
$language = $phpbb_container->get('language');
|
||||
/** @var \phpbb\textformatter\utils_interface $text_formatter_utils */
|
||||
$text_formatter_utils = $phpbb_container->get('text_formatter.utils');
|
||||
phpbb_format_quote($language, $message_parser, $text_formatter_utils, $bbcode_status, $quote_attributes, $message_link);
|
||||
}
|
||||
|
||||
if (($action == 'reply' || $action == 'quote' || $action == 'quotepost') && !$preview && !$refresh)
|
||||
@@ -1174,8 +1197,7 @@ function compose_pm($id, $mode, $action, $user_folders = array())
|
||||
break;
|
||||
}
|
||||
|
||||
$s_hidden_fields = '<input type="hidden" name="lastclick" value="' . $current_time . '" />';
|
||||
$s_hidden_fields .= (isset($check_value)) ? '<input type="hidden" name="status_switch" value="' . $check_value . '" />' : '';
|
||||
$s_hidden_fields = (isset($check_value)) ? '<input type="hidden" name="status_switch" value="' . $check_value . '" />' : '';
|
||||
$s_hidden_fields .= ($draft_id || isset($_REQUEST['draft_loaded'])) ? '<input type="hidden" name="draft_loaded" value="' . ((isset($_REQUEST['draft_loaded'])) ? $request->variable('draft_loaded', 0) : $draft_id) . '" />' : '';
|
||||
|
||||
$form_enctype = (@ini_get('file_uploads') == '0' || strtolower(@ini_get('file_uploads')) == 'off' || !$config['allow_pm_attach'] || !$auth->acl_get('u_pm_attach')) ? '' : ' enctype="multipart/form-data"';
|
||||
@@ -1184,7 +1206,7 @@ function compose_pm($id, $mode, $action, $user_folders = array())
|
||||
$controller_helper = $phpbb_container->get('controller.helper');
|
||||
|
||||
// Start assigning vars for main posting page ...
|
||||
$template->assign_vars(array(
|
||||
$template_ary = array(
|
||||
'L_POST_A' => $page_title,
|
||||
'L_ICON' => $user->lang['PM_ICON'],
|
||||
'L_MESSAGE_BODY_EXPLAIN' => $user->lang('MESSAGE_BODY_EXPLAIN', (int) $config['max_post_chars']),
|
||||
@@ -1229,7 +1251,19 @@ function compose_pm($id, $mode, $action, $user_folders = array())
|
||||
'S_CLOSE_PROGRESS_WINDOW' => isset($_POST['add_file']),
|
||||
'U_PROGRESS_BAR' => append_sid("{$phpbb_root_path}posting.$phpEx", 'f=0&mode=popup'),
|
||||
'UA_PROGRESS_BAR' => addslashes(append_sid("{$phpbb_root_path}posting.$phpEx", 'f=0&mode=popup')),
|
||||
));
|
||||
);
|
||||
|
||||
/**
|
||||
* Modify the default template vars
|
||||
*
|
||||
* @event core.ucp_pm_compose_template
|
||||
* @var array template_ary Template variables
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = array('template_ary');
|
||||
extract($phpbb_dispatcher->trigger_event('core.ucp_pm_compose_template', compact($vars)));
|
||||
|
||||
$template->assign_vars($template_ary);
|
||||
|
||||
// Build custom bbcodes array
|
||||
display_custom_bbcodes();
|
||||
@@ -1262,7 +1296,7 @@ function compose_pm($id, $mode, $action, $user_folders = array())
|
||||
function handle_message_list_actions(&$address_list, &$error, $remove_u, $remove_g, $add_to, $add_bcc)
|
||||
{
|
||||
global $auth, $db, $user;
|
||||
global $request;
|
||||
global $request, $phpbb_dispatcher;
|
||||
|
||||
// Delete User [TO/BCC]
|
||||
if ($remove_u && $request->variable('remove_u', array(0 => '')))
|
||||
@@ -1439,6 +1473,21 @@ function handle_message_list_actions(&$address_list, &$error, $remove_u, $remove
|
||||
$error[] = $user->lang['PM_USERS_REMOVED_NO_PERMISSION'];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Event for additional message list actions
|
||||
*
|
||||
* @event core.message_list_actions
|
||||
* @var array address_list The assoc array with the recipient user/group ids
|
||||
* @var array error The array containing error data
|
||||
* @var bool remove_u The variable for removing a user
|
||||
* @var bool remove_g The variable for removing a group
|
||||
* @var bool add_to The variable for adding a user to the [TO] field
|
||||
* @var bool add_bcc The variable for adding a user to the [BCC] field
|
||||
* @since 3.2.4-RC1
|
||||
*/
|
||||
$vars = array('address_list', 'error', 'remove_u', 'remove_g', 'add_to', 'add_bcc');
|
||||
extract($phpbb_dispatcher->trigger_event('core.message_list_actions', compact($vars)));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -39,7 +39,7 @@ function view_folder($id, $mode, $folder_id, $folder)
|
||||
// Grab icons
|
||||
$icons = $cache->obtain_icons();
|
||||
|
||||
$color_rows = array('marked', 'replied');
|
||||
$color_rows = array('message_reported', 'marked', 'replied');
|
||||
|
||||
$_module = new p_master();
|
||||
$_module->list_modules('ucp');
|
||||
|
@@ -296,7 +296,9 @@ function view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row)
|
||||
* @var array cp_row Array with senders custom profile field data
|
||||
* @var array msg_data Template array with message data
|
||||
* @var array user_info User data of the sender
|
||||
* @var array attachments Attachments data
|
||||
* @since 3.2.2-RC1
|
||||
* @changed 3.2.5-RC1 Added attachments
|
||||
*/
|
||||
$vars = array(
|
||||
'id',
|
||||
@@ -308,6 +310,7 @@ function view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row)
|
||||
'cp_row',
|
||||
'msg_data',
|
||||
'user_info',
|
||||
'attachments',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.ucp_pm_view_message', compact($vars)));
|
||||
|
||||
|
@@ -159,7 +159,7 @@ class ucp_profile
|
||||
$phpbb_log->add('user', $user->data['user_id'], $user->ip, 'LOG_USER_UPDATE_EMAIL', false, array(
|
||||
'reportee_id' => $user->data['user_id'],
|
||||
$user->data['username'],
|
||||
$data['user_email'],
|
||||
$user->data['user_email'],
|
||||
$data['email']
|
||||
));
|
||||
}
|
||||
@@ -469,8 +469,15 @@ class ucp_profile
|
||||
trigger_error('NO_AUTH_SIGNATURE');
|
||||
}
|
||||
|
||||
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
if (!function_exists('generate_smilies'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
|
||||
}
|
||||
|
||||
if (!function_exists('display_custom_bbcodes'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
}
|
||||
|
||||
$preview = $request->is_set_post('preview');
|
||||
|
||||
|
@@ -481,6 +481,32 @@ class ucp_register
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Modify messenger data before welcome mail is sent
|
||||
*
|
||||
* @event core.ucp_register_welcome_email_before
|
||||
* @var array user_row Array with user registration data
|
||||
* @var array cp_data Array with custom profile fields data
|
||||
* @var array data Array with current ucp registration data
|
||||
* @var string message Message to be displayed to the user after registration
|
||||
* @var string server_url Server URL
|
||||
* @var int user_id New user ID
|
||||
* @var string user_actkey User activation key
|
||||
* @var messenger messenger phpBB Messenger
|
||||
* @since 3.2.4-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'user_row',
|
||||
'cp_data',
|
||||
'data',
|
||||
'message',
|
||||
'server_url',
|
||||
'user_id',
|
||||
'user_actkey',
|
||||
'messenger',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.ucp_register_welcome_email_before', compact($vars)));
|
||||
|
||||
$messenger->send(NOTIFY_EMAIL);
|
||||
}
|
||||
|
||||
@@ -508,6 +534,30 @@ class ucp_register
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform additional actions after user registration
|
||||
*
|
||||
* @event core.ucp_register_register_after
|
||||
* @var array user_row Array with user registration data
|
||||
* @var array cp_data Array with custom profile fields data
|
||||
* @var array data Array with current ucp registration data
|
||||
* @var string message Message to be displayed to the user after registration
|
||||
* @var string server_url Server URL
|
||||
* @var int user_id New user ID
|
||||
* @var string user_actkey User activation key
|
||||
* @since 3.2.4-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'user_row',
|
||||
'cp_data',
|
||||
'data',
|
||||
'message',
|
||||
'server_url',
|
||||
'user_id',
|
||||
'user_actkey',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.ucp_register_register_after', compact($vars)));
|
||||
|
||||
$message = $message . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . append_sid("{$phpbb_root_path}index.$phpEx") . '">', '</a>');
|
||||
trigger_error($message);
|
||||
}
|
||||
|
@@ -50,11 +50,16 @@ class ucp_remind
|
||||
trigger_error('FORM_INVALID');
|
||||
}
|
||||
|
||||
if (empty($email))
|
||||
{
|
||||
trigger_error('NO_EMAIL_USER');
|
||||
}
|
||||
|
||||
$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)) . "'"
|
||||
'WHERE' => "user_email_hash = '" . $db->sql_escape(phpbb_email_hash($email)) . "'" .
|
||||
(!empty($username) ? " AND username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'" : ''),
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -74,82 +79,87 @@ class ucp_remind
|
||||
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);
|
||||
$result = $db->sql_query_limit($sql, 2); // don't waste resources on more rows than we need
|
||||
$rowset = $db->sql_fetchrowset($result);
|
||||
|
||||
if (!$user_row)
|
||||
if (count($rowset) > 1)
|
||||
{
|
||||
trigger_error('NO_EMAIL_USER');
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
$template->assign_vars(array(
|
||||
'USERNAME_REQUIRED' => true,
|
||||
'EMAIL' => $email,
|
||||
));
|
||||
}
|
||||
|
||||
if ($user_row['user_type'] == USER_IGNORE)
|
||||
else
|
||||
{
|
||||
trigger_error('NO_USER');
|
||||
}
|
||||
$message = $user->lang['PASSWORD_UPDATED_IF_EXISTED'] . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . append_sid("{$phpbb_root_path}index.$phpEx") . '">', '</a>');
|
||||
|
||||
if ($user_row['user_type'] == USER_INACTIVE)
|
||||
{
|
||||
if ($user_row['user_inactive_reason'] == INACTIVE_MANUAL)
|
||||
if (empty($rowset))
|
||||
{
|
||||
trigger_error('ACCOUNT_DEACTIVATED');
|
||||
trigger_error($message);
|
||||
}
|
||||
else
|
||||
|
||||
$user_row = $rowset[0];
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
if (!$user_row)
|
||||
{
|
||||
trigger_error('ACCOUNT_NOT_ACTIVATED');
|
||||
trigger_error($message);
|
||||
}
|
||||
|
||||
if ($user_row['user_type'] == USER_IGNORE || $user_row['user_type'] == USER_INACTIVE)
|
||||
{
|
||||
trigger_error($message);
|
||||
}
|
||||
|
||||
// Check users permissions
|
||||
$auth2 = new \phpbb\auth\auth();
|
||||
$auth2->acl($user_row);
|
||||
|
||||
if (!$auth2->acl_get('u_chgpasswd'))
|
||||
{
|
||||
trigger_error($message);
|
||||
}
|
||||
|
||||
$server_url = generate_board_url();
|
||||
|
||||
// Make password at least 8 characters long, make it longer if admin wants to.
|
||||
// gen_rand_string() however has a limit of 12 or 13.
|
||||
$user_password = gen_rand_string_friendly(max(8, mt_rand((int) $config['min_pass_chars'], (int) $config['max_pass_chars'])));
|
||||
|
||||
// For the activation key a random length between 6 and 10 will do.
|
||||
$user_actkey = gen_rand_string(mt_rand(6, 10));
|
||||
|
||||
// Instantiate passwords manager
|
||||
/* @var $manager \phpbb\passwords\manager */
|
||||
$passwords_manager = $phpbb_container->get('passwords.manager');
|
||||
|
||||
$sql = 'UPDATE ' . USERS_TABLE . "
|
||||
SET user_newpasswd = '" . $db->sql_escape($passwords_manager->hash($user_password)) . "', user_actkey = '" . $db->sql_escape($user_actkey) . "'
|
||||
WHERE user_id = " . $user_row['user_id'];
|
||||
$db->sql_query($sql);
|
||||
|
||||
include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
|
||||
|
||||
$messenger = new messenger(false);
|
||||
|
||||
$messenger->template('user_activate_passwd', $user_row['user_lang']);
|
||||
|
||||
$messenger->set_addresses($user_row);
|
||||
|
||||
$messenger->anti_abuse_headers($config, $user);
|
||||
|
||||
$messenger->assign_vars(array(
|
||||
'USERNAME' => htmlspecialchars_decode($user_row['username']),
|
||||
'PASSWORD' => htmlspecialchars_decode($user_password),
|
||||
'U_ACTIVATE' => "$server_url/ucp.$phpEx?mode=activate&u={$user_row['user_id']}&k=$user_actkey")
|
||||
);
|
||||
|
||||
$messenger->send($user_row['user_notify_type']);
|
||||
|
||||
trigger_error($message);
|
||||
}
|
||||
|
||||
// Check users permissions
|
||||
$auth2 = new \phpbb\auth\auth();
|
||||
$auth2->acl($user_row);
|
||||
|
||||
if (!$auth2->acl_get('u_chgpasswd'))
|
||||
{
|
||||
send_status_line(403, 'Forbidden');
|
||||
trigger_error('NO_AUTH_PASSWORD_REMINDER');
|
||||
}
|
||||
|
||||
$server_url = generate_board_url();
|
||||
|
||||
// Make password at least 8 characters long, make it longer if admin wants to.
|
||||
// gen_rand_string() however has a limit of 12 or 13.
|
||||
$user_password = gen_rand_string_friendly(max(8, mt_rand((int) $config['min_pass_chars'], (int) $config['max_pass_chars'])));
|
||||
|
||||
// For the activation key a random length between 6 and 10 will do.
|
||||
$user_actkey = gen_rand_string(mt_rand(6, 10));
|
||||
|
||||
// Instantiate passwords manager
|
||||
/* @var $manager \phpbb\passwords\manager */
|
||||
$passwords_manager = $phpbb_container->get('passwords.manager');
|
||||
|
||||
$sql = 'UPDATE ' . USERS_TABLE . "
|
||||
SET user_newpasswd = '" . $db->sql_escape($passwords_manager->hash($user_password)) . "', user_actkey = '" . $db->sql_escape($user_actkey) . "'
|
||||
WHERE user_id = " . $user_row['user_id'];
|
||||
$db->sql_query($sql);
|
||||
|
||||
include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
|
||||
|
||||
$messenger = new messenger(false);
|
||||
|
||||
$messenger->template('user_activate_passwd', $user_row['user_lang']);
|
||||
|
||||
$messenger->set_addresses($user_row);
|
||||
|
||||
$messenger->anti_abuse_headers($config, $user);
|
||||
|
||||
$messenger->assign_vars(array(
|
||||
'USERNAME' => htmlspecialchars_decode($user_row['username']),
|
||||
'PASSWORD' => htmlspecialchars_decode($user_password),
|
||||
'U_ACTIVATE' => "$server_url/ucp.$phpEx?mode=activate&u={$user_row['user_id']}&k=$user_actkey")
|
||||
);
|
||||
|
||||
$messenger->send($user_row['user_notify_type']);
|
||||
|
||||
meta_refresh(3, append_sid("{$phpbb_root_path}index.$phpEx"));
|
||||
|
||||
$message = $user->lang['PASSWORD_UPDATED'] . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . append_sid("{$phpbb_root_path}index.$phpEx") . '">', '</a>');
|
||||
trigger_error($message);
|
||||
}
|
||||
|
||||
$template->assign_vars(array(
|
||||
|
@@ -55,6 +55,17 @@ if (($mark_notification = $request->variable('mark_notification', 0)))
|
||||
|
||||
$notification->mark_read();
|
||||
|
||||
/**
|
||||
* You can use this event to perform additional tasks or redirect user elsewhere.
|
||||
*
|
||||
* @event core.index_mark_notification_after
|
||||
* @var int mark_notification Notification ID
|
||||
* @var \phpbb\notification\type\type_interface notification Notification instance
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = array('mark_notification', 'notification');
|
||||
extract($phpbb_dispatcher->trigger_event('core.index_mark_notification_after', compact($vars)));
|
||||
|
||||
if ($request->is_ajax())
|
||||
{
|
||||
$json_response = new \phpbb\json_response();
|
||||
|
@@ -20,9 +20,9 @@ define('PHPBB_ENVIRONMENT', 'production');
|
||||
$phpbb_root_path = '../';
|
||||
$phpEx = substr(strrchr(__FILE__, '.'), 1);
|
||||
|
||||
if (version_compare(PHP_VERSION, '5.4') < 0)
|
||||
if (version_compare(PHP_VERSION, '5.4.7', '<') || version_compare(PHP_VERSION, '7.3-dev', '>='))
|
||||
{
|
||||
die('You are running an unsupported PHP version. Please upgrade to PHP 5.4.0 or higher before trying to install or update to phpBB 3.2');
|
||||
die('You are running an unsupported PHP version. Please upgrade to PHP equal to or greater than 5.4.7 but less than 7.3-dev in order to install or update to phpBB 3.2');
|
||||
}
|
||||
|
||||
$startup_new_path = $phpbb_root_path . 'install/update/update/new/install/startup.' . $phpEx;
|
||||
|
@@ -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.2.3',
|
||||
'phpbb_version' => '3.2.6',
|
||||
'author' => '<a href="https://www.phpbb.com/">phpBB Limited</a>',
|
||||
'dbms' => $dbms,
|
||||
'dbhost' => $dbhost,
|
||||
|
@@ -1694,7 +1694,6 @@ function phpbb_import_attach_config()
|
||||
$config->set('img_create_thumbnail', $attach_config['img_create_thumbnail']);
|
||||
$config->set('img_max_thumb_width', 400);
|
||||
$config->set('img_min_thumb_filesize', $attach_config['img_min_thumb_filesize']);
|
||||
$config->set('img_imagick', $attach_config['img_imagick']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -23,7 +23,7 @@ if (php_sapi_name() !== 'cli')
|
||||
define('IN_PHPBB', true);
|
||||
define('IN_INSTALL', true);
|
||||
define('PHPBB_ENVIRONMENT', 'production');
|
||||
define('PHPBB_VERSION', '3.2.3-RC1');
|
||||
define('PHPBB_VERSION', '3.2.6-RC1');
|
||||
$phpbb_root_path = __DIR__ . '/../';
|
||||
$phpEx = substr(strrchr(__FILE__, '.'), 1);
|
||||
|
||||
|
@@ -149,7 +149,6 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('hot_threshold', '2
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('icons_path', 'images/icons');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('img_create_thumbnail', '0');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('img_display_inlined', '1');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('img_imagick', '');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('img_link_height', '0');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('img_link_width', '0');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('img_max_height', '0');
|
||||
@@ -280,7 +279,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.2.3-RC1');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.2.6-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');
|
||||
|
||||
|
@@ -111,8 +111,6 @@ $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_EXPLAIN' => 'Full path to the imagemagick convert application, e.g. <samp>/usr/bin/</samp>.',
|
||||
|
||||
'MAX_ATTACHMENTS' => 'Maximum number of attachments per post',
|
||||
'MAX_ATTACHMENTS_PM' => 'Maximum number of attachments per private message',
|
||||
@@ -135,7 +133,6 @@ $lang = array_merge($lang, array(
|
||||
'NO_EXT_GROUP_SPECIFIED' => 'No extension group specified.',
|
||||
'NO_FILE_CAT' => 'None',
|
||||
'NO_IMAGE' => 'No image',
|
||||
'NO_THUMBNAIL_SUPPORT' => 'Thumbnail support has been disabled. For proper functionality either the GD extension need to be available or imagemagick being installed. Both were not found.',
|
||||
'NO_UPLOAD_DIR' => 'The upload directory you specified does not exist.',
|
||||
'NO_WRITE_UPLOAD' => 'The upload directory you specified cannot be written to. Please alter the permissions to allow the webserver to write to it.',
|
||||
|
||||
@@ -147,7 +144,6 @@ $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',
|
||||
'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',
|
||||
|
@@ -348,7 +348,7 @@ $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. 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>.',
|
||||
'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 <strong><a href="https://www.phpbb.com/support/go/cookie-settings">phpBB.com Knowledge Base - Fixing incorrect cookie settings</a></strong>.',
|
||||
|
||||
'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).',
|
||||
@@ -371,7 +371,7 @@ $lang = array_merge($lang, array(
|
||||
'ACP_CONTACT_SETTINGS_EXPLAIN' => 'Here you can enable and disable the contact page and also add a text that is displayed on the page.',
|
||||
|
||||
'CONTACT_US_ENABLE' => 'Enable contact page',
|
||||
'CONTACT_US_ENABLE_EXPLAIN' => 'This page allows users to send emails to board administrators. Please note that board-wide emails option must be enabled as well. You can find this option in General > Client Communication > Email settings.',
|
||||
'CONTACT_US_ENABLE_EXPLAIN' => 'This page allows users to send emails to board administrators. Please note that board-wide emails option must be enabled as well. You can find this option in General > Client Communication > Email settings.',
|
||||
|
||||
'CONTACT_US_INFO' => 'Contact information',
|
||||
'CONTACT_US_INFO_EXPLAIN' => 'The message is displayed on the contact page',
|
||||
@@ -404,10 +404,10 @@ $lang = array_merge($lang, array(
|
||||
'READ_NOTIFICATION_EXPIRE_DAYS_EXPLAIN' => 'Number of days that will elapse before a read notification will automatically be deleted. Set this value to 0 to make notifications permanent.',
|
||||
'RECOMPILE_STYLES' => 'Recompile stale style components',
|
||||
'RECOMPILE_STYLES_EXPLAIN' => 'Check for updated style components on filesystem and recompile.',
|
||||
'YES_ACCURATE_PM_BUTTON' => 'Enable permission specific PM button in topic pages',
|
||||
'YES_ACCURATE_PM_BUTTON_EXPLAIN' => 'If this setting is enabled, only post profiles of users who are permitted to read private messages will have a private message button.',
|
||||
'YES_ANON_READ_MARKING' => 'Enable topic marking for guests',
|
||||
'YES_ANON_READ_MARKING_EXPLAIN' => 'Stores read/unread status information for guests. If disabled, posts are always marked read for guests.',
|
||||
'YES_ACCURATE_PM_BUTTON' => 'Enable accurate PM indicator in topic pages',
|
||||
'YES_ACCURATE_PM_BUTTON_EXPLAIN' => 'If this setting is enabled, only users who are permitted to read private messages will have a private message button.',
|
||||
'YES_BIRTHDAYS' => 'Enable birthday listing',
|
||||
'YES_BIRTHDAYS_EXPLAIN' => 'If disabled the birthday listing is no longer displayed. To let this setting take effect the birthday feature needs to be enabled too.',
|
||||
'YES_JUMPBOX' => 'Enable display of jumpbox',
|
||||
|
@@ -38,14 +38,15 @@ if (empty($lang) || !is_array($lang))
|
||||
|
||||
// Database Backup/Restore
|
||||
$lang = array_merge($lang, array(
|
||||
'ACP_BACKUP_EXPLAIN' => 'Here you can backup all your phpBB related data. You may store the resulting archive in your <samp>store/</samp> folder or download it directly. Depending on your server configuration you may be able to compress the file in a number of formats.',
|
||||
'ACP_BACKUP_EXPLAIN' => 'Here you can backup all your phpBB related data. The resulting archive will be stored in your <samp>store/</samp> folder. Depending on your server configuration you may be able to compress the file in a number of formats.',
|
||||
'ACP_RESTORE_EXPLAIN' => 'This will perform a full restore of all phpBB tables from a saved file. If your server supports it you may use a gzip or bzip2 compressed text file and it will automatically be decompressed. <strong>WARNING</strong> This will overwrite any existing data. The restore may take a long time to process please do not move from this page till it is complete. Backups are stored in the <samp>store/</samp> folder and are assumed to be generated by phpBB’s backup functionality. Restoring backups that were not created by the built in system may or may not work.',
|
||||
|
||||
'BACKUP_DELETE' => 'The backup file has been deleted successfully.',
|
||||
'BACKUP_INVALID' => 'The selected file to backup is invalid.',
|
||||
'BACKUP_OPTIONS' => 'Backup options',
|
||||
'BACKUP_SUCCESS' => 'The backup file has been created successfully.',
|
||||
'BACKUP_TYPE' => 'Backup type',
|
||||
'BACKUP_DELETE' => 'The backup file has been deleted successfully.',
|
||||
'BACKUP_INVALID' => 'The selected file to backup is invalid.',
|
||||
'BACKUP_NOT_SUPPORTED' => 'The selected backup is not supported',
|
||||
'BACKUP_OPTIONS' => 'Backup options',
|
||||
'BACKUP_SUCCESS' => 'The backup file has been created successfully.',
|
||||
'BACKUP_TYPE' => 'Backup type',
|
||||
|
||||
'DATABASE' => 'Database utilities',
|
||||
'DATA_ONLY' => 'Data only',
|
||||
|
@@ -92,7 +92,7 @@ $lang = array_merge($lang, array(
|
||||
'GROUP_OPEN' => 'Open',
|
||||
'GROUP_PENDING' => 'Pending members',
|
||||
'GROUP_MAX_RECIPIENTS' => 'Maximum number of allowed recipients per private message',
|
||||
'GROUP_MAX_RECIPIENTS_EXPLAIN' => 'The maximum number of allowed recipients in a private message. The maximum for all groups of the user is used to determine the actual value.<br />Set this value to 0 to overwrite the setting for all users of this group with the board-wide setting.',
|
||||
'GROUP_MAX_RECIPIENTS_EXPLAIN' => 'The maximum number of allowed recipients in a private message. The maximum for all groups of the user is used to determine the actual value.<br />Set this value to 0 to overwrite the setting for all users of this group with the board-wide setting.',
|
||||
'GROUP_OPTIONS_SAVE' => 'Group wide options',
|
||||
'GROUP_PROMOTE' => 'Promote to group leader',
|
||||
'GROUP_RANK' => 'Group rank',
|
||||
@@ -111,6 +111,7 @@ $lang = array_merge($lang, array(
|
||||
'GROUP_USERS_ADDED' => 'New users added to group successfully.',
|
||||
'GROUP_USERS_EXIST' => 'The selected users are already members.',
|
||||
'GROUP_USERS_REMOVE' => 'Users removed from group and new defaults set successfully.',
|
||||
'GROUP_USERS_INVALID' => 'No users were added to the group as the following usernames do not exist: %s',
|
||||
|
||||
'LEGEND_EXPLAIN' => 'These are the groups which are displayed in the group legend:',
|
||||
'LEGEND_SETTINGS' => 'Legend settings',
|
||||
|
@@ -54,7 +54,7 @@ $lang = array_merge($lang, array(
|
||||
|
||||
<br />
|
||||
|
||||
<p>For further information on setting up and managing permissions on your phpBB3 board, please see the section on <a href="https://www.phpbb.com/support/docs/en/3.1/ug/quickstart/permissions/">Setting permissions of our Quick Start Guide</a>.</p>
|
||||
<p>For further information on setting up and managing permissions on your phpBB3 board, please see the section on <a href="https://www.phpbb.com/support/docs/en/3.2/ug/quickstart/permissions/">Setting permissions of our Quick Start Guide</a>.</p>
|
||||
',
|
||||
|
||||
'ACL_NEVER' => 'Never',
|
||||
|
@@ -161,8 +161,8 @@ $lang = array_merge($lang, array(
|
||||
'STEP_2_EXPLAIN_EDIT' => 'Here you are able to change some common options.<br /><strong>Please note that changes to profile fields will not affect existing profile fields entered by your users.</strong>',
|
||||
'STEP_2_TITLE_CREATE' => 'Profile type specific options',
|
||||
'STEP_2_TITLE_EDIT' => 'Profile type specific options',
|
||||
'STEP_3_EXPLAIN_CREATE' => 'Since you have more than one board language installed, you have to fill out the remaining language items too. The profile field will work with the default language enabled, you are able to fill out the remaining language items later too.',
|
||||
'STEP_3_EXPLAIN_EDIT' => 'Since you have more than one board language installed, you now can change or add the remaining language items too. The profile field will work with the default language enabled.',
|
||||
'STEP_3_EXPLAIN_CREATE' => 'Since you have more than one board language installed, you have to fill out the remaining language items too. If you don’t, then default language setting for this custom profile field will be used, you are able to fill out the remaining language items later too.',
|
||||
'STEP_3_EXPLAIN_EDIT' => 'Since you have more than one board language installed, you now can change or add the remaining language items too. If you don’t, then default language setting for this custom profile field will be used.',
|
||||
'STEP_3_TITLE_CREATE' => 'Remaining language definitions',
|
||||
'STEP_3_TITLE_EDIT' => 'Language definitions',
|
||||
'STRING_DEFAULT_VALUE_EXPLAIN' => 'Enter a default phrase to be displayed, a default value. Leave empty if you want to show it empty at the first place.',
|
||||
|
@@ -116,7 +116,10 @@ $lang = array_merge($lang, array(
|
||||
2 => 'The current rate of indexing is approximately %1$.1f posts per second.<br />Indexing in progress…',
|
||||
),
|
||||
'SEARCH_INDEX_DELETE_REDIRECT' => array(
|
||||
2 => 'All posts up to post id %2$d have been removed from the search index.<br />Deleting in progress…',
|
||||
2 => 'All posts up to post id %2$d have been removed from the search index, of which %1$d posts were within this step.<br />',
|
||||
),
|
||||
'SEARCH_INDEX_DELETE_REDIRECT_RATE' => array(
|
||||
2 => 'The current rate of deleting is approximately %1$.1f posts per second.<br />Deleting in progress…',
|
||||
),
|
||||
'SEARCH_INDEX_CREATED' => 'Successfully indexed all posts in the board database.',
|
||||
'SEARCH_INDEX_REMOVED' => 'Successfully deleted the search index for this backend.',
|
||||
|
@@ -49,7 +49,7 @@ $lang = array_merge($lang, array(
|
||||
'ANSWER' => 'Answer',
|
||||
'EDIT_QUESTION' => 'Edit Question',
|
||||
'QUESTIONS' => 'Questions',
|
||||
'QUESTIONS_EXPLAIN' => 'For every form submission where you have enabled the Q&A plugin, users will be asked one of the questions specified here. To use this plugin at least one question must be set in the default language. These questions should be easy for your target audience to answer but beyond the ability of a bot capable of running a Google™ search. Using a large and regularly changed set of questions will yield the best results. Enable the strict setting if your question relies on mixed case, punctuation or whitespace.',
|
||||
'QUESTIONS_EXPLAIN' => 'For every form submission where you have enabled the Q&A plugin, users will be asked one of the questions specified here. To use this plugin at least one question must be set in the default language. These questions should be easy for your target audience to answer but beyond the ability of a bot capable of running a Google™ search. Only a single proper question is necessary. If you start receiving spam registrations, the question should be changed. Enable the strict setting if your question relies on mixed case, punctuation or whitespace.',
|
||||
'QUESTION_DELETED' => 'Question deleted',
|
||||
'QUESTION_LANG' => 'Language',
|
||||
'QUESTION_LANG_EXPLAIN' => 'The language this question and its answers are written in.',
|
||||
|
@@ -37,7 +37,7 @@ if (empty($lang) || !is_array($lang))
|
||||
// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
|
||||
|
||||
$lang = array_merge($lang, array(
|
||||
'RECAPTCHA_LANG' => 'en',
|
||||
'RECAPTCHA_LANG' => 'en-GB', // Find the language/country code on https://developers.google.com/recaptcha/docs/language - If no code exists for your language you can use "en" or leave the string empty
|
||||
'RECAPTCHA_NOT_AVAILABLE' => 'In order to use reCaptcha, you must create an account on <a href="http://www.google.com/recaptcha">www.google.com/recaptcha</a>.',
|
||||
'CAPTCHA_RECAPTCHA' => 'reCaptcha',
|
||||
'RECAPTCHA_INCORRECT' => 'The solution you provided was incorrect',
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user