mirror of
https://github.com/phpbb/phpbb.git
synced 2025-09-14 18:14:17 +02:00
Compare commits
966 Commits
release-3.
...
release-3.
Author | SHA1 | Date | |
---|---|---|---|
|
4dc26274bf | ||
|
166c3988ff | ||
|
4449793b07 | ||
|
c0e0011b10 | ||
|
dd78b564e5 | ||
|
35588c20bd | ||
|
1a1fb4a915 | ||
|
a58cc394bc | ||
|
248b11c4db | ||
|
b2a883d504 | ||
|
147b942e5c | ||
|
9f76b3414c | ||
|
cc0f931473 | ||
|
3a11fec5de | ||
|
83f4bd9ee7 | ||
|
d5fd1ecfc8 | ||
|
8de8cbab5e | ||
|
e68094679e | ||
|
c468a5d8d4 | ||
|
b132939471 | ||
|
91f5d59f69 | ||
|
e3e236da72 | ||
|
633a517791 | ||
|
dca8afcd6f | ||
|
f2745d1e57 | ||
|
b170c6a8db | ||
|
bdfca39e07 | ||
|
b4d7192b62 | ||
|
4679fa543b | ||
|
9374d14e27 | ||
|
de1da3170c | ||
|
b08497f66c | ||
|
42fde81b21 | ||
|
5ef7510fb3 | ||
|
14e9c7695d | ||
|
80f8c550f9 | ||
|
4c1a9d1e5d | ||
|
e8e9ad1bdf | ||
|
f340e54e0c | ||
|
29a07404d3 | ||
|
b9750bb590 | ||
|
22448a9c6d | ||
|
6759004642 | ||
|
0a286e044b | ||
|
fbc07d3b14 | ||
|
3a317edc92 | ||
|
0b91c5488a | ||
|
c5b4d0afb7 | ||
|
58a52fe5b9 | ||
|
e2cbaf4f1a | ||
|
5b11ee8c97 | ||
|
285656a6d4 | ||
|
6c57fbecac | ||
|
8c0d179e3e | ||
|
35c0b6d77a | ||
|
d226a73111 | ||
|
ed812a9dfb | ||
|
98e8be966b | ||
|
15c23e60b8 | ||
|
f2e8e928c0 | ||
|
2db160ff87 | ||
|
40937e21c5 | ||
|
11ff91c87d | ||
|
926e47e5a1 | ||
|
afffec8184 | ||
|
1d966fbc86 | ||
|
c87f44c669 | ||
|
91ca12f20e | ||
|
cefffe0777 | ||
|
20912d7af2 | ||
|
ef1346c931 | ||
|
e7804ecce4 | ||
|
f87e76b910 | ||
|
78648514fa | ||
|
98890fe1a3 | ||
|
4f56f9b904 | ||
|
01c25d3d6b | ||
|
b9995405cf | ||
|
301d9ce990 | ||
|
cbe846a64e | ||
|
86205454af | ||
|
cdf87e0078 | ||
|
0bec9897d7 | ||
|
bd0f692bf3 | ||
|
730991e785 | ||
|
a2af95cb37 | ||
|
f8eca98b3f | ||
|
e3e0c79b7a | ||
|
39261907da | ||
|
5dd19c726e | ||
|
18054332e4 | ||
|
57567d5611 | ||
|
5527044a00 | ||
|
5136be4225 | ||
|
b412339cad | ||
|
1504ec4ba3 | ||
|
21320820ce | ||
|
c190ee315e | ||
|
b323a01fd3 | ||
|
8d6d21c7de | ||
|
addcbb1585 | ||
|
b7fb2e557e | ||
|
dbefb74abe | ||
|
b6816c4237 | ||
|
182d22567d | ||
|
9dfce860e7 | ||
|
7399f29df8 | ||
|
ba207cd3b5 | ||
|
2d2525f382 | ||
|
606d82f7dd | ||
|
53ff23671c | ||
|
3c223c2978 | ||
|
8643ca6303 | ||
|
e01e7b1529 | ||
|
4cec5bcd55 | ||
|
86e21a9b26 | ||
|
d95c97c3b4 | ||
|
ddf3ab323b | ||
|
e7b9013dba | ||
|
76cd9ec953 | ||
|
45458b240b | ||
|
3bfc9ccbc7 | ||
|
bf5d3030b4 | ||
|
e1513a985b | ||
|
35fab0fc72 | ||
|
2ff8302c51 | ||
|
90a8c7e29a | ||
|
c1627ef52e | ||
|
5878314671 | ||
|
3ca708edad | ||
|
c9da9ec858 | ||
|
b4e8e9e29f | ||
|
0deacb8438 | ||
|
d8d6e3e943 | ||
|
8222eeaaff | ||
|
0232fcc22a | ||
|
c23c56f31c | ||
|
a0e00889d1 | ||
|
b0a3f2dc8f | ||
|
380e9c2ef4 | ||
|
520f3b3bd6 | ||
|
107693ff58 | ||
|
ad967b1122 | ||
|
868179c295 | ||
|
a6d66b2ab0 | ||
|
eff07032c0 | ||
|
e99b25e273 | ||
|
3f0dec4ce6 | ||
|
fbc15407a2 | ||
|
b83c623480 | ||
|
2b729c67bd | ||
|
3568eec4df | ||
|
04550fcd8c | ||
|
330f21ab76 | ||
|
54a143c968 | ||
|
f870bc0f18 | ||
|
0190d1b207 | ||
|
5783b00fb6 | ||
|
20e9480ba5 | ||
|
710e0e7aa6 | ||
|
bf3ac9b1dc | ||
|
8ef8056fd4 | ||
|
194224b550 | ||
|
7d04d953c7 | ||
|
6d1403cb13 | ||
|
5652f33ccc | ||
|
bc47e719b1 | ||
|
97725db3f4 | ||
|
41047bc369 | ||
|
ffbd7cf1a7 | ||
|
31099a8efd | ||
|
8feb383468 | ||
|
b7e1959d56 | ||
|
779d8a68ff | ||
|
f383d4221c | ||
|
18631801d5 | ||
|
52204e0e6d | ||
|
e3b07274ef | ||
|
b70a1cc4af | ||
|
564924e876 | ||
|
539eadc450 | ||
|
ce74a4f263 | ||
|
abc0147daa | ||
|
07cb08fd18 | ||
|
ca770e476c | ||
|
eb13b4ae28 | ||
|
2d116ffede | ||
|
daeb635d6c | ||
|
e6b8ae6bd5 | ||
|
7ef983b426 | ||
|
b484439691 | ||
|
6d40b87661 | ||
|
404c2f1144 | ||
|
e6f9b060dc | ||
|
8cb7afa503 | ||
|
482a22351d | ||
|
919e1a6bc8 | ||
|
9051248e12 | ||
|
dbc223b4c3 | ||
|
8fa4ca49e0 | ||
|
b0286bf854 | ||
|
aadc6de9c4 | ||
|
6d464e0bc4 | ||
|
98262a5a17 | ||
|
2cf4a4f6fe | ||
|
c1df2ce62a | ||
|
f776ac7d58 | ||
|
7484859c71 | ||
|
c82a0b74cf | ||
|
51bc31da20 | ||
|
6251d68be4 | ||
|
aebe03f88c | ||
|
6cf6ec3354 | ||
|
6d23cc3a0e | ||
|
18763d7286 | ||
|
8e8b493fae | ||
|
4d9e451f60 | ||
|
d13e02c7b1 | ||
|
59c0a31fc4 | ||
|
cc4f1e401e | ||
|
e8d7204580 | ||
|
7e769083bf | ||
|
ffa1f9baf5 | ||
|
66efb1889d | ||
|
ff6e026a40 | ||
|
a730c0291f | ||
|
a54d74bf09 | ||
|
eb3e1b35d6 | ||
|
deb393bff3 | ||
|
fbbf210747 | ||
|
9b27d00d5f | ||
|
eb9321c3a1 | ||
|
40a65abc3a | ||
|
c14db9ccd0 | ||
|
570acb7ccc | ||
|
5a76b36dfb | ||
|
de250273db | ||
|
69b9aa2859 | ||
|
9bc1f7924d | ||
|
993afd9140 | ||
|
29ec455a45 | ||
|
8b00be6fce | ||
|
367c6aafca | ||
|
665742945f | ||
|
419de00a9c | ||
|
6d641ad590 | ||
|
9c2ef168c1 | ||
|
020218fcea | ||
|
23caeb7712 | ||
|
775dc316b0 | ||
|
dd18085ba6 | ||
|
faa47cd176 | ||
|
8c7127f573 | ||
|
e528a57c2f | ||
|
99065e18ca | ||
|
5c90b82fde | ||
|
bd0110ae79 | ||
|
b8f8b884e7 | ||
|
5a00054f52 | ||
|
ac89c84808 | ||
|
329b1826af | ||
|
f41947f726 | ||
|
4a98d7e46d | ||
|
cf1b56af8d | ||
|
a540cdc3b2 | ||
|
5265091c83 | ||
|
d083f29244 | ||
|
1b0b4cd5e2 | ||
|
e42b316d87 | ||
|
3e9d62b9b0 | ||
|
19b4391eef | ||
|
60cb10e62b | ||
|
cf92032ebb | ||
|
6a9baaab0b | ||
|
894dcaaaad | ||
|
70a98e6f63 | ||
|
b5b0175d59 | ||
|
2596dbc850 | ||
|
c563d96633 | ||
|
8b3cc9a6c4 | ||
|
24eeab4883 | ||
|
e406cc6fad | ||
|
15929201b8 | ||
|
ab6d36dd57 | ||
|
309dbb4ef9 | ||
|
277e9a7a85 | ||
|
e9fbaac212 | ||
|
7a5afdeb4c | ||
|
8cef0b6971 | ||
|
349fbabd2e | ||
|
ac97497d95 | ||
|
2b451a174b | ||
|
507eca319d | ||
|
4169fd65f0 | ||
|
08e2c07f0b | ||
|
1edcfcb502 | ||
|
5ee1e07e17 | ||
|
e427d203b6 | ||
|
41becd9c92 | ||
|
0b4abd01c8 | ||
|
8c44b2721c | ||
|
05bcce3169 | ||
|
ba456bb00e | ||
|
7517cc0e05 | ||
|
919fee6b1b | ||
|
8547fd4c2e | ||
|
1189fc9e51 | ||
|
1cf6a0e124 | ||
|
b83b72b271 | ||
|
6f9674228c | ||
|
f888b31645 | ||
|
eda3c36b1c | ||
|
2ebd86611a | ||
|
952b4de231 | ||
|
4ac43856f7 | ||
|
c315fc6c89 | ||
|
bba23f61b3 | ||
|
e4437e19e8 | ||
|
5403b48788 | ||
|
0abc1f0f97 | ||
|
b72fdd9acf | ||
|
7575c478c7 | ||
|
307c9bc15f | ||
|
3fd7fd435d | ||
|
e45cd32de7 | ||
|
aff67b99b5 | ||
|
8332671813 | ||
|
8817b59377 | ||
|
8984dc6103 | ||
|
052a4e6f58 | ||
|
ec4924cf14 | ||
|
c740772d93 | ||
|
08f244229c | ||
|
26eb15ffab | ||
|
453f2904c2 | ||
|
dfbe072d51 | ||
|
61fa0908bc | ||
|
2147a5eba5 | ||
|
1f9e1fd177 | ||
|
12590af750 | ||
|
5b02613a83 | ||
|
99e9f198b0 | ||
|
3113963cb6 | ||
|
4cb7cbd093 | ||
|
ec69a22899 | ||
|
647869721d | ||
|
74a37259f7 | ||
|
1d5e94ba36 | ||
|
7958a97fdd | ||
|
147ae8374c | ||
|
2ff9064ffb | ||
|
fa5afb60aa | ||
|
e46ef86104 | ||
|
4f2acbaed2 | ||
|
de04304e94 | ||
|
d3b3e9265c | ||
|
bb8be29fd5 | ||
|
1e97502d90 | ||
|
1a3c1d5b9a | ||
|
334c77cd0d | ||
|
2ee8b738e5 | ||
|
5bbcc39b66 | ||
|
c4e48ed0b9 | ||
|
f0e115fdcc | ||
|
a92c1d1ec0 | ||
|
f5aa9732d1 | ||
|
2d1a998003 | ||
|
c26fa6a15b | ||
|
019b345171 | ||
|
648cbbd9a0 | ||
|
01f350a614 | ||
|
0ebf6011b7 | ||
|
dc5e2f5d9a | ||
|
d387d08db3 | ||
|
641f8f6121 | ||
|
cfae4ed0eb | ||
|
6afd09fcb0 | ||
|
a487fab0ea | ||
|
152d5fc263 | ||
|
165c5f8f15 | ||
|
dd075e4bbc | ||
|
992fb8e452 | ||
|
e8dd7904e9 | ||
|
cd31aea4be | ||
|
85b37a5f4d | ||
|
9c6f74daff | ||
|
e05df3bf3d | ||
|
80ac276971 | ||
|
b41a730471 | ||
|
d421187cb6 | ||
|
92a385dea6 | ||
|
eddf77d2c2 | ||
|
bd7fdb32cf | ||
|
7afc13b4db | ||
|
d3db8b6565 | ||
|
dc7ed58bf5 | ||
|
afe9d3c3f3 | ||
|
e5b7414589 | ||
|
22966927ea | ||
|
fdcc544ae6 | ||
|
ddb35531ac | ||
|
e10bf39d08 | ||
|
900a5b07c4 | ||
|
82c43e258b | ||
|
e7c6da2c54 | ||
|
32a2c95f90 | ||
|
566615fa31 | ||
|
89a7a55190 | ||
|
0499655ba4 | ||
|
40d264654c | ||
|
6b90a0d095 | ||
|
d4679e6a95 | ||
|
e51a5791dd | ||
|
ff057dfc8e | ||
|
72f3ff2dcc | ||
|
4b49d451aa | ||
|
985dbd4482 | ||
|
83966a575b | ||
|
ea0e073c12 | ||
|
4690709212 | ||
|
b50744ae09 | ||
|
9c18df8690 | ||
|
30cce1ed49 | ||
|
474dc57782 | ||
|
b516da649f | ||
|
1363dccf12 | ||
|
e1454ec487 | ||
|
d15706bff5 | ||
|
0e04748d7f | ||
|
ab83995f44 | ||
|
3cebb18ce8 | ||
|
18bf45ab1b | ||
|
3c38fcce40 | ||
|
b9890c6a4c | ||
|
8595fee040 | ||
|
6b58f40663 | ||
|
0404d3b910 | ||
|
aeeaf2f6ef | ||
|
51b4dc7077 | ||
|
10b466848a | ||
|
cdfcbfc6d0 | ||
|
27d761d08e | ||
|
abc55dcb40 | ||
|
01e05ccc6b | ||
|
cc67f49fce | ||
|
a5ca7479b2 | ||
|
acbc0ea1f7 | ||
|
03c5de594e | ||
|
a4db81b379 | ||
|
deae22b85f | ||
|
04e43e2087 | ||
|
d7edf31b95 | ||
|
fac6ab1fd4 | ||
|
c61a67503e | ||
|
c23532e052 | ||
|
f850d5fa90 | ||
|
fc6cb02e1f | ||
|
5701a4658c | ||
|
2ba12a17b2 | ||
|
e127a4fcce | ||
|
f310bc00a7 | ||
|
ab47798a3e | ||
|
c408ac52c3 | ||
|
310b8af148 | ||
|
9b85e4b141 | ||
|
352f3b7e78 | ||
|
9d3f437149 | ||
|
da4b1d25a1 | ||
|
28012dc9e1 | ||
|
04164affe6 | ||
|
70d4ede9b2 | ||
|
752b5b6628 | ||
|
4472a492da | ||
|
3ac73a831a | ||
|
b855f5fc6a | ||
|
ccb8fd18e2 | ||
|
8595b2ae86 | ||
|
99e08bffd8 | ||
|
51b2cc14f8 | ||
|
f62ec14926 | ||
|
729c353f27 | ||
|
de103f60e3 | ||
|
7e66fa0f8d | ||
|
73c69cc653 | ||
|
f076b43915 | ||
|
d1f517ad65 | ||
|
9f478de2ca | ||
|
566f76a6b0 | ||
|
e820143e87 | ||
|
f549a6ce9f | ||
|
aee20bcf0c | ||
|
934db6ded1 | ||
|
5fc51fd7b7 | ||
|
c15ab1e87e | ||
|
80d9e4b2e3 | ||
|
5964ca21c2 | ||
|
82cf239294 | ||
|
e1b72c0b86 | ||
|
d38816fc14 | ||
|
70db69cb8c | ||
|
2fc5c51d9a | ||
|
995690e192 | ||
|
165d7c4b98 | ||
|
8be079bd66 | ||
|
6534e13c33 | ||
|
e08a4eaf9a | ||
|
87729c81fc | ||
|
e8a6fee743 | ||
|
86754cf572 | ||
|
cee46f2405 | ||
|
3cb04756bf | ||
|
16f6edc02a | ||
|
b1da3e9c7e | ||
|
7ee3e3f73f | ||
|
09de0c3df9 | ||
|
89af115071 | ||
|
afcca62784 | ||
|
6b52155a2a | ||
|
13c03b6fcf | ||
|
a94581e7ca | ||
|
99a2f2fdb4 | ||
|
09fc008e62 | ||
|
06bf864c41 | ||
|
34a4ba36cd | ||
|
1aec0d29fd | ||
|
4d6afb2638 | ||
|
ca3cdadd08 | ||
|
0b106ab0e3 | ||
|
d2aee6d2ea | ||
|
6db849cba5 | ||
|
9531691537 | ||
|
754e36e378 | ||
|
663c375f5c | ||
|
5a320adc75 | ||
|
f27be59cf1 | ||
|
f4ef1ab6bd | ||
|
e6a8df7f7e | ||
|
2dc389c936 | ||
|
bae1724476 | ||
|
1eb50c67df | ||
|
cfa399110d | ||
|
9bd23917dc | ||
|
7f3e0e5e42 | ||
|
706484c80d | ||
|
dba01c5690 | ||
|
0d0113e6da | ||
|
e6b422517b | ||
|
5ab6998e0e | ||
|
5dfb1cc66a | ||
|
52e8359497 | ||
|
03ad0b3e08 | ||
|
0d0465bc08 | ||
|
d357dd9e47 | ||
|
d3e35149a5 | ||
|
51ade62400 | ||
|
df041c1086 | ||
|
047b709c47 | ||
|
1033da36a3 | ||
|
3039d000c6 | ||
|
4ac9315728 | ||
|
358a10d8a9 | ||
|
ad11925c77 | ||
|
2ca9e25bf2 | ||
|
8966e4a269 | ||
|
413754af1f | ||
|
48b19ac37c | ||
|
b6f3bf9b0c | ||
|
569ebd1592 | ||
|
d7b9e33b94 | ||
|
05ae46acdc | ||
|
7c51418420 | ||
|
c805e53da3 | ||
|
8e06d76aaa | ||
|
a9e6caa775 | ||
|
976bda83db | ||
|
49a1896a76 | ||
|
693cbd247c | ||
|
72d29e76ce | ||
|
d5f4d288e9 | ||
|
3a96c5b753 | ||
|
587759bd6a | ||
|
44269b3660 | ||
|
24bbd06d49 | ||
|
c7ae61f2f3 | ||
|
d310ffc26c | ||
|
34848afeb0 | ||
|
0f034ca717 | ||
|
04e2fcd4d8 | ||
|
c11ad7bc9d | ||
|
25e58669d2 | ||
|
661c9f1f73 | ||
|
925c4dc739 | ||
|
dd141d55f9 | ||
|
e17b5796bf | ||
|
0f4c947a03 | ||
|
edd9c0e064 | ||
|
def39a670b | ||
|
c0063a9e2e | ||
|
73c2a3f177 | ||
|
e539fd53db | ||
|
ee9fceedff | ||
|
3ed767351c | ||
|
55ffcca591 | ||
|
b242a15af6 | ||
|
2149bd4e8f | ||
|
5f4a058655 | ||
|
a120e4bdf6 | ||
|
f460287856 | ||
|
a6e9da5a7c | ||
|
8a5cb4a026 | ||
|
87a13a8c77 | ||
|
ff808b341c | ||
|
88987306de | ||
|
21b5a52381 | ||
|
a4c75d8970 | ||
|
0260c0ccaf | ||
|
102faf4d1f | ||
|
08ce6b96a4 | ||
|
a620a6c5fe | ||
|
482f60f1bd | ||
|
f1adf82aea | ||
|
828e995f03 | ||
|
d33ed1edf6 | ||
|
232a1c4fcb | ||
|
30a62d2e11 | ||
|
0e4c7dbda5 | ||
|
d4cc6990e4 | ||
|
6e47886227 | ||
|
bea9372efa | ||
|
a0985c7a22 | ||
|
a4c15bbf4f | ||
|
7642fbbd63 | ||
|
99c3ca18be | ||
|
a262bfc78f | ||
|
8e9b27314b | ||
|
bbc63456f9 | ||
|
c605e8f423 | ||
|
f6ee0152ed | ||
|
dc4132a494 | ||
|
93c39477e0 | ||
|
e18365dc63 | ||
|
f2e57d339e | ||
|
f17eee19de | ||
|
2c70cec4fb | ||
|
309aa1d8bf | ||
|
7c527adee8 | ||
|
f7f65fe6c2 | ||
|
be54b64893 | ||
|
d70554760f | ||
|
b93269f7bb | ||
|
6c0fd61b1d | ||
|
453cb70963 | ||
|
ceef85ee0e | ||
|
204904441a | ||
|
1fdb47bb20 | ||
|
afbf4ba296 | ||
|
694f8391c9 | ||
|
06e6c91513 | ||
|
e1f371d14a | ||
|
cab1f2cf16 | ||
|
d7ebc2c1fc | ||
|
e71f65c2bb | ||
|
916db1a0b1 | ||
|
3a48f76558 | ||
|
38c2d42304 | ||
|
d0766a2321 | ||
|
3d347d47f2 | ||
|
18d145f38f | ||
|
7b0b6a99c0 | ||
|
13217fe3ff | ||
|
5bae2911a2 | ||
|
709296e54a | ||
|
997028a0ec | ||
|
af60861cfd | ||
|
02c53595b5 | ||
|
9842137028 | ||
|
1e769ba87f | ||
|
39b76a628b | ||
|
5ee7f20f4e | ||
|
ad59f371bf | ||
|
a77a19af93 | ||
|
0134acd53f | ||
|
c82ae94f8a | ||
|
1e9492bcaa | ||
|
fb3c6b94ae | ||
|
6980fbd27b | ||
|
e1707b27ca | ||
|
183492b019 | ||
|
d45c681b40 | ||
|
c20653dfbe | ||
|
0aa6381834 | ||
|
2964fb37e8 | ||
|
456ff2559a | ||
|
3a167ee801 | ||
|
2d90c754fe | ||
|
f7f80a424f | ||
|
771cbb2b3a | ||
|
169a9a560d | ||
|
65884bf2bd | ||
|
b8151b1299 | ||
|
74842b2354 | ||
|
86a320ff5c | ||
|
b6232aa9b2 | ||
|
89f7067377 | ||
|
0c5af536f1 | ||
|
1ee39d8c93 | ||
|
41a5c3bf2b | ||
|
223c8c4784 | ||
|
4d3fcd19ac | ||
|
5e9cb35457 | ||
|
233cdbfd66 | ||
|
a0c442d16e | ||
|
14d0a5f66b | ||
|
373918583d | ||
|
92f43c5371 | ||
|
e3c3a5d2a7 | ||
|
1a6d8dd94d | ||
|
6c1ff04ca0 | ||
|
e8174f3d66 | ||
|
edc5908e48 | ||
|
b667923bcc | ||
|
ae35c4b05c | ||
|
8841f7f960 | ||
|
d5865e316c | ||
|
f8a9eccb2a | ||
|
9a02dc3e27 | ||
|
f5415619eb | ||
|
ac74dc876c | ||
|
fc4275ab2b | ||
|
69e50dffae | ||
|
088ce641be | ||
|
1f78ab536b | ||
|
347de7f060 | ||
|
371e363c30 | ||
|
49beb2075b | ||
|
8f0a04f318 | ||
|
36b42d376e | ||
|
4d24681259 | ||
|
c6999481e7 | ||
|
2d8ca3ea90 | ||
|
5bd46c467b | ||
|
087a91f628 | ||
|
cd326ae093 | ||
|
d218f707b1 | ||
|
ef435cb89d | ||
|
09a433be61 | ||
|
57a051c023 | ||
|
27c678125a | ||
|
c47b546bf0 | ||
|
9808b55258 | ||
|
f2c7890c64 | ||
|
cd90b39a83 | ||
|
140ecf1c98 | ||
|
da1d24a1f0 | ||
|
015ddc8fa8 | ||
|
c3b24e2005 | ||
|
f119e060b7 | ||
|
49c875413c | ||
|
e67a19a940 | ||
|
3c3a182f07 | ||
|
5ae331a27a | ||
|
d79ad22a21 | ||
|
5b51acf245 | ||
|
5e9c8a0cea | ||
|
012702307b | ||
|
f9c0a6b96e | ||
|
1e7a782fb3 | ||
|
ce104e2c72 | ||
|
442e12828b | ||
|
99ebf4b8dd | ||
|
fb46e42ab3 | ||
|
7c22d653e9 | ||
|
a14d16172c | ||
|
6c9518ea32 | ||
|
5efd55a348 | ||
|
5aca27e8cf | ||
|
721a1d0bc4 | ||
|
760aa9d402 | ||
|
2d47f85801 | ||
|
f980fed5d2 | ||
|
3e31764007 | ||
|
5b5f3a5d0c | ||
|
8ba083f886 | ||
|
0baf501569 | ||
|
71fb956498 | ||
|
c3ccef10d1 | ||
|
85e8d1c2ef | ||
|
dc7be4f273 | ||
|
dc43073450 | ||
|
560e0f97be | ||
|
8ecb6b2aa2 | ||
|
082a6b29a9 | ||
|
58d7302b49 | ||
|
ac311e1b39 | ||
|
94b2b64ca1 | ||
|
6f5f0d6d8d | ||
|
306beab4cb | ||
|
4698f6928e | ||
|
0a1e21c17f | ||
|
dde9201975 | ||
|
fcaae9b047 | ||
|
4b3aacfd18 | ||
|
f3eba6275a | ||
|
97c36b00b3 | ||
|
cf61d35d75 | ||
|
2d7593995e | ||
|
61a5fd59cf | ||
|
146d3cfe75 | ||
|
c6e1b51d78 | ||
|
252a061864 | ||
|
af25aef04c | ||
|
dc5a5a7cdf | ||
|
033272f968 | ||
|
d9e49fae23 | ||
|
b35ed3bc69 | ||
|
3508409c89 | ||
|
5a243af879 | ||
|
60cb648ab0 | ||
|
f78b99dce4 | ||
|
2a96b9e285 | ||
|
1e758ba7f0 | ||
|
57e4fb3810 | ||
|
ed1d4fe4a0 | ||
|
68f59defb0 | ||
|
ee72e7b3ad | ||
|
2ea45a06e7 | ||
|
eeb077c336 | ||
|
92c7d07c65 | ||
|
c7687ba5aa | ||
|
572debd0e8 | ||
|
8e2a0caf54 | ||
|
6794c6b79b | ||
|
48679eeff8 | ||
|
6a00ff3fa6 | ||
|
95b9c93892 | ||
|
6d3bc7a60b | ||
|
dce7c7e0e0 | ||
|
fd9c17ca04 | ||
|
9c497a7b46 | ||
|
36071ded9d | ||
|
f7b8043b43 | ||
|
9c2687ddc9 | ||
|
7c4bd8cc76 | ||
|
f4dcb69dae | ||
|
7c16d1c2ab | ||
|
b92787a132 | ||
|
40218ba5e6 | ||
|
be52ea882a | ||
|
9f87c497fe | ||
|
669a6c3e3d | ||
|
a6a2d1bc2d | ||
|
21c6102d55 | ||
|
b372d515ff | ||
|
cc41e2eef7 | ||
|
bbb83c09c0 | ||
|
4d80d90f73 | ||
|
a8e412e2b7 | ||
|
807e000b91 | ||
|
da48b7df22 | ||
|
fa3a634ae1 | ||
|
376d6a2d91 | ||
|
638d43d6fe | ||
|
41e52d9c9d | ||
|
b8f3972afa | ||
|
58cfdfe143 | ||
|
64f51bd3dd | ||
|
b378bd7a2e | ||
|
9cda850b3a | ||
|
01dba249d7 | ||
|
43fbb84cc3 | ||
|
3b845b1893 | ||
|
fda2cc636c | ||
|
2f2e404639 | ||
|
335faafae8 | ||
|
03e0e736ab | ||
|
7508d2b546 | ||
|
79bdcdf988 | ||
|
c17a1e92c5 | ||
|
e7fd259766 | ||
|
505b26ed86 | ||
|
63c62f86ee | ||
|
4b3bba6693 | ||
|
6a9fd06b73 | ||
|
e2e7e2a55b | ||
|
1c0036f118 | ||
|
975afa9048 | ||
|
81f22a1c8e | ||
|
8e48840034 | ||
|
3e0f8d7f1e | ||
|
67281199be | ||
|
c5a51efd20 | ||
|
a2ca0bc611 | ||
|
427d70d138 | ||
|
0108e19d21 | ||
|
911725a581 | ||
|
f01e0a2eef | ||
|
ed8c16bf0d | ||
|
d1fb8d3c9e | ||
|
d3f65cd66e | ||
|
deee3be9ef | ||
|
4f2f3d9757 | ||
|
971b3f59bf | ||
|
1ffcbdd3c5 | ||
|
d6484a8177 | ||
|
299fe086b4 | ||
|
84a02f5cef | ||
|
ef8d7b995e | ||
|
35b88624f5 | ||
|
67cf0a912c | ||
|
5c13829111 | ||
|
af024ea3e5 | ||
|
ea9756917e | ||
|
fffb07fd91 | ||
|
6c287e57fc | ||
|
389bc0b8dd | ||
|
d52f34f5ec | ||
|
70f313eb4f | ||
|
7f00c38c50 | ||
|
56959a2f83 | ||
|
031273de72 | ||
|
ff5fd3442d | ||
|
59f39273d4 | ||
|
532e4470ea | ||
|
54d60e3f78 | ||
|
9f942776ad | ||
|
61ad42790f | ||
|
18875894ec | ||
|
0d839cbefc | ||
|
5fca308138 | ||
|
9a78772745 | ||
|
6f279c1bf4 | ||
|
9761c1bf61 | ||
|
6f0121e2a4 | ||
|
8a1e189970 | ||
|
50cb9d5838 | ||
|
d3f4dbedde | ||
|
6f3276653f | ||
|
dfec62c68d | ||
|
05e76e55e1 | ||
|
ac1eb2d789 | ||
|
abb8a2892d | ||
|
c517cd6778 | ||
|
d20d86bf10 | ||
|
1ba516a052 | ||
|
2ff3efc4a1 | ||
|
814d10fe5e | ||
|
91305a43af | ||
|
930c5d85ed | ||
|
f7896f46a5 | ||
|
672ffbe8f6 | ||
|
2f52934fad | ||
|
088f5b47c3 | ||
|
6e6891f841 | ||
|
12e0e358d1 | ||
|
237619792d | ||
|
49bc10de4d | ||
|
164f52c3f3 | ||
|
56aaba696f | ||
|
c6d7875b9b | ||
|
c5a4ad3d31 | ||
|
9519c4e8c4 | ||
|
9b9c048702 | ||
|
cc1a304da6 | ||
|
fee4e61933 | ||
|
1c336c3559 | ||
|
dccc9ceeb5 |
6
.gitignore
vendored
6
.gitignore
vendored
@@ -10,7 +10,13 @@
|
||||
/phpBB/files/*
|
||||
/phpBB/images/avatars/gallery/*
|
||||
/phpBB/images/avatars/upload/*
|
||||
/phpBB/images/ranks/*
|
||||
/phpBB/language/*
|
||||
!/phpBB/language/en
|
||||
/phpBB/store/*
|
||||
/phpBB/styles/*
|
||||
!/phpBB/styles/prosilver
|
||||
!/phpBB/styles/subsilver2
|
||||
/phpBB/vendor
|
||||
/tests/phpbb_unit_tests.sqlite*
|
||||
/tests/test_config*.php
|
||||
|
@@ -2,9 +2,9 @@
|
||||
|
||||
<project name="phpBB" description="The phpBB forum software" default="all" basedir="../">
|
||||
<!-- a few settings for the build -->
|
||||
<property name="newversion" value="3.1.0-b4" />
|
||||
<property name="prevversion" value="3.1.0-b3" />
|
||||
<property name="olderversions" value="3.0.12, 3.1.0-a1, 3.1.0-a2, 3.1.0-a3, 3.1.0-b1, 3.1.0-b2" />
|
||||
<property name="newversion" value="3.1.0-RC2" />
|
||||
<property name="prevversion" value="3.1.0-RC1" />
|
||||
<property name="olderversions" value="3.0.12, 3.1.0-a1, 3.1.0-a2, 3.1.0-a3, 3.1.0-b1, 3.1.0-b2, 3.1.0-b3, 3.1.0-b4" />
|
||||
<!-- no configuration should be needed beyond this point -->
|
||||
|
||||
<property name="oldversions" value="${olderversions}, ${prevversion}" />
|
||||
@@ -77,29 +77,39 @@
|
||||
<exec command="phpBB/vendor/bin/phpcs
|
||||
-s
|
||||
--extensions=php
|
||||
--standard=build/code_sniffer/ruleset-php-strict.xml
|
||||
--ignore=phpBB/phpbb/db/migration/data/v30x/*
|
||||
--standard=build/code_sniffer/ruleset-php-strict-core.xml
|
||||
--ignore=${project.basedir}/phpBB/phpbb/db/migration/data/v30x/*
|
||||
phpBB/phpbb"
|
||||
dir="." returnProperty="retval-php-strict" passthru="true" />
|
||||
<exec command="phpBB/vendor/bin/phpcs
|
||||
-s
|
||||
--extensions=php
|
||||
--standard=build/code_sniffer/ruleset-php-legacy.xml
|
||||
--ignore=phpBB/cache/*
|
||||
--ignore=phpBB/develop/*
|
||||
--ignore=phpBB/includes/diff/*.php
|
||||
--ignore=phpBB/includes/sphinxapi.php
|
||||
--ignore=phpBB/includes/utf/data/*
|
||||
--ignore=phpBB/install/data/*
|
||||
--ignore=phpBB/install/database_update.php
|
||||
--ignore=phpBB/phpbb/*
|
||||
--ignore=phpBB/vendor/*
|
||||
--standard=build/code_sniffer/ruleset-php-legacy-core.xml
|
||||
--ignore=${project.basedir}/phpBB/cache/*
|
||||
--ignore=${project.basedir}/phpBB/develop/*
|
||||
--ignore=${project.basedir}/phpBB/ext/*
|
||||
--ignore=${project.basedir}/phpBB/includes/diff/*.php
|
||||
--ignore=${project.basedir}/phpBB/includes/sphinxapi.php
|
||||
--ignore=${project.basedir}/phpBB/includes/utf/data/*
|
||||
--ignore=${project.basedir}/phpBB/install/data/*
|
||||
--ignore=${project.basedir}/phpBB/install/database_update.php
|
||||
--ignore=${project.basedir}/phpBB/phpbb/*
|
||||
--ignore=${project.basedir}/phpBB/vendor/*
|
||||
phpBB"
|
||||
dir="." returnProperty="retval-php-legacy" passthru="true" />
|
||||
<exec command="phpBB/vendor/bin/phpcs
|
||||
-s
|
||||
--extensions=php
|
||||
--standard=build/code_sniffer/ruleset-php-extensions.xml
|
||||
--ignore=${project.basedir}/phpBB/ext/*/tests/*
|
||||
--ignore=${project.basedir}/phpBB/ext/*/vendor/*
|
||||
phpBB/ext"
|
||||
dir="." returnProperty="retval-php-ext" passthru="true" />
|
||||
<if>
|
||||
<or>
|
||||
<not><equals arg1="${retval-php-strict}" arg2="0" /></not>
|
||||
<not><equals arg1="${retval-php-legacy}" arg2="0" /></not>
|
||||
<not><equals arg1="${retval-php-ext}" arg2="0" /></not>
|
||||
</or>
|
||||
<then>
|
||||
<fail message="PHP Code Sniffer failed." />
|
||||
|
@@ -12,9 +12,8 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* Checks that each source file contains the standard header.
|
||||
*
|
||||
* Based on Coding Guidelines 1.ii File Header.
|
||||
* Checks that each PHP source file contains a valid header as defined by the
|
||||
* phpBB Coding Guidelines.
|
||||
*
|
||||
* @package code_sniffer
|
||||
* @author Manuel Pichler <mapi@phpundercontrol.org>
|
||||
@@ -47,10 +46,10 @@ class phpbb_Sniffs_Commenting_FileCommentSniff implements PHP_CodeSniffer_Sniff
|
||||
{
|
||||
if ($phpcsFile->findPrevious(T_OPEN_TAG, $stackPtr - 1) !== false)
|
||||
{
|
||||
return;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Fetch next non whitespace token
|
||||
$tokens = $phpcsFile->getTokens();
|
||||
$start = $phpcsFile->findNext(T_WHITESPACE, $stackPtr + 1, null, true);
|
||||
@@ -66,65 +65,68 @@ class phpbb_Sniffs_Commenting_FileCommentSniff implements PHP_CodeSniffer_Sniff
|
||||
$phpcsFile->addError('Missing required file doc comment.', $stackPtr);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Find comment end token
|
||||
$end = $phpcsFile->findNext(T_DOC_COMMENT, $start + 1, null, true) - 1;
|
||||
|
||||
|
||||
// If there is no end, skip processing here
|
||||
if ($end === false)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// List of found comment tags
|
||||
$tags = array();
|
||||
|
||||
|
||||
// check comment lines without the first(/**) an last(*/) line
|
||||
for ($i = $start + 1, $c = ($end - $start); $i <= $c; ++$i)
|
||||
for ($i = $start + 1, $c = $end - 1; $i <= $c; ++$i)
|
||||
{
|
||||
$line = $tokens[$i]['content'];
|
||||
|
||||
// Check that each line starts with a '*'
|
||||
if (substr($line, 0, 1) !== '*')
|
||||
{
|
||||
$message = 'The file doc comment should not be idented.';
|
||||
$message = 'The file doc comment should not be idented.';
|
||||
$phpcsFile->addWarning($message, $i);
|
||||
}
|
||||
else if (preg_match('/^\*\s+@([\w]+)\s+(.*)$/', $line, $match) !== 0)
|
||||
{
|
||||
$tags[$match[1]] = array($match[2], $i);
|
||||
if (!isset($tags[$match[1]]))
|
||||
{
|
||||
$tags[$match[1]] = array();
|
||||
}
|
||||
|
||||
$tags[$match[1]][] = array($match[2], $i);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Check that the first and last line is empty
|
||||
if (trim($tokens[$start + 1]['content']) !== '*')
|
||||
{
|
||||
$message = 'The first file comment line should be empty.';
|
||||
$phpcsFile->addWarning($message, ($start + 1));
|
||||
$phpcsFile->addWarning($message, ($start + 1));
|
||||
}
|
||||
if (trim($tokens[$end - $start]['content']) !== '*')
|
||||
{
|
||||
$message = 'The last file comment line should be empty.';
|
||||
$phpcsFile->addWarning($message, ($end - $start));
|
||||
}
|
||||
|
||||
$this->processPackage($phpcsFile, $start, $tags);
|
||||
$this->processVersion($phpcsFile, $start, $tags);
|
||||
$this->processCopyright($phpcsFile, $start, $tags);
|
||||
$this->processLicense($phpcsFile, $start, $tags);
|
||||
|
||||
//print_r($tags);
|
||||
if (trim($tokens[$end - 1]['content']) !== '*')
|
||||
{
|
||||
$message = 'The last file comment line should be empty.';
|
||||
$phpcsFile->addWarning($message, $end - 1);
|
||||
}
|
||||
|
||||
//$this->processPackage($phpcsFile, $start, $tags);
|
||||
//$this->processVersion($phpcsFile, $start, $tags);
|
||||
$this->processCopyright($phpcsFile, $start, $tags);
|
||||
$this->processLicense($phpcsFile, $start, $tags);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks that the tags array contains a valid package tag
|
||||
*
|
||||
* @param PHP_CodeSniffer_File $phpcsFile The context source file instance.
|
||||
* @param integer The stack pointer for the first comment token.
|
||||
* @param array(string=>array) $tags The found file doc comment tags.
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
* Checks that the tags array contains a valid package tag
|
||||
*
|
||||
* @param PHP_CodeSniffer_File $phpcsFile The context source file instance.
|
||||
* @param integer The stack pointer for the first comment token.
|
||||
* @param array(string=>array) $tags The found file doc comment tags.
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
protected function processPackage(PHP_CodeSniffer_File $phpcsFile, $ptr, $tags)
|
||||
{
|
||||
if (!isset($tags['package']))
|
||||
@@ -134,80 +136,87 @@ class phpbb_Sniffs_Commenting_FileCommentSniff implements PHP_CodeSniffer_Sniff
|
||||
}
|
||||
else if (preg_match('/^([\w]+)$/', $tags['package'][0]) === 0)
|
||||
{
|
||||
$message = 'Invalid content found for @package tag.';
|
||||
$phpcsFile->addWarning($message, $tags['package'][1]);
|
||||
$message = 'Invalid content found for @package tag.';
|
||||
$phpcsFile->addWarning($message, $tags['package'][1]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks that the tags array contains a valid version tag
|
||||
*
|
||||
* @param PHP_CodeSniffer_File $phpcsFile The context source file instance.
|
||||
* @param integer The stack pointer for the first comment token.
|
||||
* @param array(string=>array) $tags The found file doc comment tags.
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
* Checks that the tags array contains a valid version tag
|
||||
*
|
||||
* @param PHP_CodeSniffer_File $phpcsFile The context source file instance.
|
||||
* @param integer The stack pointer for the first comment token.
|
||||
* @param array(string=>array) $tags The found file doc comment tags.
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
protected function processVersion(PHP_CodeSniffer_File $phpcsFile, $ptr, $tags)
|
||||
{
|
||||
if (!isset($tags['version']))
|
||||
{
|
||||
$message = 'Missing require @version tag in file doc comment.';
|
||||
$phpcsFile->addError($message, $ptr);
|
||||
}
|
||||
else if (preg_match('/^\$Id:[^\$]+\$$/', $tags['version'][0]) === 0)
|
||||
{
|
||||
$message = 'Invalid content found for @version tag, use "$Id: $".';
|
||||
$phpcsFile->addError($message, $tags['version'][1]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks that the tags array contains a valid copyright tag
|
||||
*
|
||||
* @param PHP_CodeSniffer_File $phpcsFile The context source file instance.
|
||||
* @param integer The stack pointer for the first comment token.
|
||||
* @param array(string=>array) $tags The found file doc comment tags.
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
protected function processCopyright(PHP_CodeSniffer_File $phpcsFile, $ptr, $tags)
|
||||
{
|
||||
if (!isset($tags['copyright']))
|
||||
{
|
||||
$message = 'Missing require @copyright tag in file doc comment.';
|
||||
$phpcsFile->addError($message, $ptr);
|
||||
}
|
||||
else if (preg_match('/^\(c\) 2[0-9]{3} phpBB Group\s*$/', $tags['copyright'][0]) === 0)
|
||||
{
|
||||
$message = 'Invalid content found for @copyright tag, use "(c) <year> phpBB Group".';
|
||||
$phpcsFile->addError($message, $tags['copyright'][1]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks that the tags array contains a valid license tag
|
||||
*
|
||||
* @param PHP_CodeSniffer_File $phpcsFile The context source file instance.
|
||||
* @param integer The stack pointer for the first comment token.
|
||||
* @param array(string=>array) $tags The found file doc comment tags.
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
protected function processLicense(PHP_CodeSniffer_File $phpcsFile, $ptr, $tags)
|
||||
{
|
||||
$license = 'http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2';
|
||||
|
||||
if (!isset($tags['license']))
|
||||
{
|
||||
$message = 'Missing require @license tag in file doc comment.';
|
||||
$phpcsFile->addError($message, $ptr);
|
||||
}
|
||||
else if (trim($tags['license'][0]) !== $license)
|
||||
{
|
||||
$message = 'Invalid content found for @license tag, use '
|
||||
. '"' . $license . '".';
|
||||
$phpcsFile->addError($message, $tags['license'][1]);
|
||||
}
|
||||
}
|
||||
{
|
||||
if (!isset($tags['version']))
|
||||
{
|
||||
$message = 'Missing require @version tag in file doc comment.';
|
||||
$phpcsFile->addError($message, $ptr);
|
||||
}
|
||||
else if (preg_match('/^\$Id:[^\$]+\$$/', $tags['version'][0]) === 0)
|
||||
{
|
||||
$message = 'Invalid content found for @version tag, use "$Id: $".';
|
||||
$phpcsFile->addError($message, $tags['version'][1]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks that the tags array contains a valid copyright tag
|
||||
*
|
||||
* @param PHP_CodeSniffer_File $phpcsFile The context source file instance.
|
||||
* @param integer The stack pointer for the first comment token.
|
||||
* @param array(string=>array) $tags The found file doc comment tags.
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
protected function processCopyright(PHP_CodeSniffer_File $phpcsFile, $ptr, $tags)
|
||||
{
|
||||
$copyright = '(c) phpBB Limited <https://www.phpbb.com>';
|
||||
|
||||
if (!isset($tags['copyright']))
|
||||
{
|
||||
$message = 'Missing require @copyright tag in file doc comment.';
|
||||
$phpcsFile->addError($message, $ptr);
|
||||
}
|
||||
else if ($tags['copyright'][0][0] !== $copyright)
|
||||
{
|
||||
$message = 'Invalid content found for the first @copyright tag, use "' . $copyright . '".';
|
||||
$phpcsFile->addError($message, $tags['copyright'][0][1]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks that the tags array contains a valid license tag
|
||||
*
|
||||
* @param PHP_CodeSniffer_File $phpcsFile The context source file instance.
|
||||
* @param integer The stack pointer for the first comment token.
|
||||
* @param array(string=>array) $tags The found file doc comment tags.
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
protected function processLicense(PHP_CodeSniffer_File $phpcsFile, $ptr, $tags)
|
||||
{
|
||||
$license = 'GNU General Public License, version 2 (GPL-2.0)';
|
||||
|
||||
if (!isset($tags['license']))
|
||||
{
|
||||
$message = 'Missing require @license tag in file doc comment.';
|
||||
$phpcsFile->addError($message, $ptr);
|
||||
}
|
||||
else if (sizeof($tags['license']) !== 1)
|
||||
{
|
||||
$message = 'It must be only one @license tag in file doc comment.';
|
||||
$phpcsFile->addError($message, $ptr);
|
||||
}
|
||||
else if (trim($tags['license'][0][0]) !== $license)
|
||||
{
|
||||
$message = 'Invalid content found for @license tag, use '
|
||||
. '"' . $license . '".';
|
||||
$phpcsFile->addError($message, $tags['license'][0][1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
209
build/code_sniffer/phpbb/Sniffs/Namespaces/UnusedUseSniff.php
Normal file
209
build/code_sniffer/phpbb/Sniffs/Namespaces/UnusedUseSniff.php
Normal file
@@ -0,0 +1,209 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Checks that each use statement is used.
|
||||
*/
|
||||
class phpbb_Sniffs_Namespaces_UnusedUseSniff implements PHP_CodeSniffer_Sniff
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
return array(T_USE);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr)
|
||||
{
|
||||
if ($this->should_ignore_use($phpcsFile, $stackPtr) === true)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$tokens = $phpcsFile->getTokens();
|
||||
|
||||
$class_name_start = $phpcsFile->findNext(array(T_NS_SEPARATOR, T_STRING), ($stackPtr + 1));
|
||||
|
||||
$find = array(
|
||||
T_NS_SEPARATOR,
|
||||
T_STRING,
|
||||
T_WHITESPACE,
|
||||
);
|
||||
|
||||
$class_name_end = $phpcsFile->findNext($find, ($stackPtr + 1), null, true);
|
||||
|
||||
$aliasing_as_position = $phpcsFile->findNext(T_AS, $class_name_end, null, false, null, true);
|
||||
if ($aliasing_as_position !== false)
|
||||
{
|
||||
$alias_position = $phpcsFile->findNext(T_STRING, $aliasing_as_position, null, false, null, true);
|
||||
$class_name_short = $tokens[$alias_position]['content'];
|
||||
$class_name_full = $phpcsFile->getTokensAsString($class_name_start, ($class_name_end - $class_name_start - 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
$class_name_full = $phpcsFile->getTokensAsString($class_name_start, ($class_name_end - $class_name_start));
|
||||
$class_name_short = $tokens[$class_name_end - 1]['content'];
|
||||
}
|
||||
|
||||
$ok = false;
|
||||
|
||||
// Checks in simple statements (new, instanceof and extends)
|
||||
foreach (array(T_INSTANCEOF, T_NEW, T_EXTENDS) as $keyword)
|
||||
{
|
||||
$old_simple_statement = $stackPtr;
|
||||
while (($simple_statement = $phpcsFile->findNext($keyword, ($old_simple_statement + 1))) !== false)
|
||||
{
|
||||
$old_simple_statement = $simple_statement;
|
||||
|
||||
$simple_class_name_start = $phpcsFile->findNext(array(T_NS_SEPARATOR, T_STRING), ($simple_statement + 1));
|
||||
$simple_class_name_end = $phpcsFile->findNext($find, ($simple_statement + 1), null, true);
|
||||
|
||||
$simple_class_name = trim($phpcsFile->getTokensAsString($simple_class_name_start, ($simple_class_name_end - $simple_class_name_start)));
|
||||
|
||||
if ($simple_class_name === $class_name_full)
|
||||
{
|
||||
$error = 'Either use statement or full name must be used.';
|
||||
$phpcsFile->addError($error, $simple_statement, 'FullName');
|
||||
}
|
||||
|
||||
if ($simple_class_name === $class_name_short)
|
||||
{
|
||||
$ok = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Checks paamayim nekudotayim
|
||||
$old_paamayim_nekudotayim = $stackPtr;
|
||||
while (($paamayim_nekudotayim = $phpcsFile->findNext(T_PAAMAYIM_NEKUDOTAYIM, ($old_paamayim_nekudotayim + 1))) !== false)
|
||||
{
|
||||
$old_paamayim_nekudotayim = $paamayim_nekudotayim;
|
||||
|
||||
$paamayim_nekudotayim_class_name_start = $phpcsFile->findPrevious($find, $paamayim_nekudotayim - 1, null, true);
|
||||
$paamayim_nekudotayim_class_name_end = $paamayim_nekudotayim - 1;
|
||||
|
||||
$paamayim_nekudotayim_class_name = trim($phpcsFile->getTokensAsString($paamayim_nekudotayim_class_name_start + 1, ($paamayim_nekudotayim_class_name_end - $paamayim_nekudotayim_class_name_start)));
|
||||
|
||||
if ($paamayim_nekudotayim_class_name === $class_name_full)
|
||||
{
|
||||
$error = 'Either use statement or full name must be used.';
|
||||
$phpcsFile->addError($error, $paamayim_nekudotayim, 'FullName');
|
||||
}
|
||||
|
||||
if ($paamayim_nekudotayim_class_name === $class_name_short)
|
||||
{
|
||||
$ok = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Checks in implements
|
||||
$old_implements = $stackPtr;
|
||||
while (($implements = $phpcsFile->findNext(T_IMPLEMENTS, ($old_implements + 1))) !== false)
|
||||
{
|
||||
$old_implements = $implements;
|
||||
|
||||
$old_implemented_class = $implements;
|
||||
while (($implemented_class = $phpcsFile->findNext(T_STRING, ($old_implemented_class + 1), null, false, null, true)) !== false)
|
||||
{
|
||||
$old_implemented_class = $implemented_class;
|
||||
|
||||
$implements_class_name_start = $phpcsFile->findNext(array(T_NS_SEPARATOR, T_STRING), ($implemented_class - 1));
|
||||
$implements_class_name_end = $phpcsFile->findNext($find, ($implemented_class - 1), null, true);
|
||||
|
||||
$implements_class_name = trim($phpcsFile->getTokensAsString($implements_class_name_start, ($implements_class_name_end - $implements_class_name_start)));
|
||||
|
||||
if ($implements_class_name === $class_name_full)
|
||||
{
|
||||
$error = 'Either use statement or full name must be used.';
|
||||
$phpcsFile->addError($error, $implements, 'FullName');
|
||||
}
|
||||
|
||||
if ($implements_class_name === $class_name_short)
|
||||
{
|
||||
$ok = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Checks in type hinting
|
||||
$old_function_declaration = $stackPtr;
|
||||
while (($function_declaration = $phpcsFile->findNext(T_FUNCTION, ($old_function_declaration + 1))) !== false)
|
||||
{
|
||||
$old_function_declaration = $function_declaration;
|
||||
|
||||
$end_function = $phpcsFile->findNext(array(T_CLOSE_PARENTHESIS), ($function_declaration + 1));
|
||||
$old_argument = $function_declaration;
|
||||
while (($argument = $phpcsFile->findNext(T_VARIABLE, ($old_argument + 1), $end_function)) !== false)
|
||||
{
|
||||
$old_argument = $argument;
|
||||
|
||||
$start_argument = $phpcsFile->findPrevious(array(T_OPEN_PARENTHESIS, T_COMMA), $argument);
|
||||
$argument_class_name_start = $phpcsFile->findNext(array(T_NS_SEPARATOR, T_STRING), ($start_argument + 1), $argument);
|
||||
$argument_class_name_end = $phpcsFile->findNext($find, ($argument_class_name_start + 1), null, true);
|
||||
|
||||
$argument_class_name = $phpcsFile->getTokensAsString($argument_class_name_start, ($argument_class_name_end - $argument_class_name_start - 1));
|
||||
|
||||
if ($argument_class_name === $class_name_full)
|
||||
{
|
||||
$error = 'Either use statement or full name must be used.';
|
||||
$phpcsFile->addError($error, $function_declaration, 'FullName');
|
||||
}
|
||||
|
||||
if ($argument_class_name === $class_name_short)
|
||||
{
|
||||
$ok = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$ok)
|
||||
{
|
||||
$error = 'There must not be unused USE statements.';
|
||||
$phpcsFile->addError($error, $stackPtr, 'Unused');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if this use statement is part of the namespace block.
|
||||
*
|
||||
* @param PHP_CodeSniffer_File $phpcsFile The file being scanned.
|
||||
* @param int $stackPtr The position of the current token in
|
||||
* the stack passed in $tokens.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function should_ignore_use(PHP_CodeSniffer_File $phpcsFile, $stackPtr)
|
||||
{
|
||||
$tokens = $phpcsFile->getTokens();
|
||||
|
||||
// Ignore USE keywords inside closures.
|
||||
$next = $phpcsFile->findNext(T_WHITESPACE, ($stackPtr + 1), null, true);
|
||||
if ($tokens[$next]['code'] === T_OPEN_PARENTHESIS)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// Ignore USE keywords for traits.
|
||||
if ($phpcsFile->hasCondition($stackPtr, array(T_CLASS, T_TRAIT)) === true)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
}
|
@@ -1,19 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package code_sniffer³
|
||||
* @version $Id: $
|
||||
* @copyright (c) 2008 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-license.php BSD License
|
||||
*
|
||||
*/
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* Broken but not first file doc comment.
|
||||
*
|
||||
* @version @package_version@
|
||||
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||
* @copyright (c) 2007 phpBB Group
|
||||
*
|
||||
*/
|
@@ -1,54 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Unit test class for the EmptyStatement sniff.
|
||||
*
|
||||
* @package code_sniffer
|
||||
* @author Manuel Pichler <mapi@phpundercontrol.org>
|
||||
*/
|
||||
class phpbb_Tests_Commenting_FileCommentUnitTest extends AbstractSniffUnitTest
|
||||
{
|
||||
|
||||
/**
|
||||
* Returns the lines where errors should occur.
|
||||
*
|
||||
* The key of the array should represent the line number and the value
|
||||
* should represent the number of errors that should occur on that line.
|
||||
*
|
||||
* @return array(int => int)
|
||||
*/
|
||||
public function getErrorList()
|
||||
{
|
||||
return array(
|
||||
7 => 1 // BSD License error :)
|
||||
);
|
||||
}//end getErrorList()
|
||||
|
||||
|
||||
/**
|
||||
* Returns the lines where warnings should occur.
|
||||
*
|
||||
* The key of the array should represent the line number and the value
|
||||
* should represent the number of warnings that should occur on that line.
|
||||
*
|
||||
* @return array(int => int)
|
||||
*/
|
||||
public function getWarningList()
|
||||
{
|
||||
return array(
|
||||
4 => 1,
|
||||
8 => 1
|
||||
);
|
||||
}//end getWarningList()
|
||||
}
|
@@ -1,23 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project name="code_sniffer" basedir="." default="install">
|
||||
|
||||
<property name="working.dir" value="${basedir}" />
|
||||
<property name="target.dir" value="/usr/share/php/PHP/CodeSniffer/Standards" />
|
||||
|
||||
<!--
|
||||
Install phpbb sniff
|
||||
-->
|
||||
<target name="install">
|
||||
<delete dir="${target.dir}/phpbb" />
|
||||
<mkdir dir="${target.dir}/phpbb"/>
|
||||
|
||||
<copy todir="${target.dir}/phpbb">
|
||||
<fileset file="${working.dir}/phpbbCodingStandard.php" />
|
||||
</copy>
|
||||
<copy todir="${target.dir}/phpbb/Sniffs">
|
||||
<fileset dir="${working.dir}/Sniffs" />
|
||||
</copy>
|
||||
|
||||
</target>
|
||||
|
||||
</project>
|
@@ -1,46 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ignore
|
||||
*/
|
||||
if (class_exists('PHP_CodeSniffer_Standards_CodingStandard', true) === false) {
|
||||
throw new PHP_CodeSniffer_Exception(
|
||||
'Class PHP_CodeSniffer_Standards_CodingStandard not found'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Primary class for the phpbb coding standard.
|
||||
*
|
||||
* @package code_sniffer
|
||||
*/
|
||||
class PHP_CodeSniffer_Standards_phpbb_phpbbCodingStandard extends PHP_CodeSniffer_Standards_CodingStandard
|
||||
{
|
||||
/**
|
||||
* Return a list of external sniffs to include with this standard.
|
||||
*
|
||||
* External locations can be single sniffs, a whole directory of sniffs, or
|
||||
* an entire coding standard. Locations start with the standard name. For
|
||||
* example:
|
||||
* PEAR => include all sniffs in this standard
|
||||
* PEAR/Sniffs/Files => include all sniffs in this dir
|
||||
* PEAR/Sniffs/Files/LineLengthSniff => include this single sniff
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getIncludedSniffs()
|
||||
{
|
||||
return array();
|
||||
}
|
||||
}
|
8
build/code_sniffer/ruleset-php-extensions.xml
Normal file
8
build/code_sniffer/ruleset-php-extensions.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<ruleset name="phpBB PHP Strict Standard Extensions">
|
||||
|
||||
<description>phpBB coding standard for PHP files of phpBB extensions</description>
|
||||
|
||||
<rule ref="./ruleset-php-strict.xml" />
|
||||
|
||||
</ruleset>
|
11
build/code_sniffer/ruleset-php-legacy-core.xml
Normal file
11
build/code_sniffer/ruleset-php-legacy-core.xml
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0"?>
|
||||
<ruleset name="phpBB PHP Legacy Standard Core">
|
||||
|
||||
<description>phpBB legacy coding standard for PHP files of phpBB core</description>
|
||||
|
||||
<rule ref="./ruleset-php-legacy.xml" />
|
||||
|
||||
<!-- Each file MUST start with a valid header as defined by the Coding Guidelines -->
|
||||
<rule ref="./phpbb/Sniffs/Commenting/FileCommentSniff.php" />
|
||||
|
||||
</ruleset>
|
@@ -20,6 +20,16 @@
|
||||
<!-- Call-time pass-by-reference MUST not be used. -->
|
||||
<rule ref="Generic.Functions.CallTimePassByReference.NotAllowed" />
|
||||
|
||||
<!-- Filenames MUST be lowercase. -->
|
||||
<rule ref="Generic.Files.LowercasedFilename" />
|
||||
|
||||
<!-- The function brace MUST be on the line following the function declaration
|
||||
and MUST be indented to the same column as the start of the function declaration. -->
|
||||
<rule ref="Generic.Functions.OpeningFunctionBraceBsdAllman" />
|
||||
|
||||
<!-- There MUST be exactly one space after a cast. -->
|
||||
<rule ref="Generic.Formatting.SpaceAfterCast" />
|
||||
|
||||
<!-- Class constants MUST be declared in all upper case with underscore separators. -->
|
||||
<rule ref="Generic.NamingConventions.UpperCaseConstantName" />
|
||||
|
||||
@@ -32,6 +42,20 @@
|
||||
<!-- Each file MUST end with exactly one newline character -->
|
||||
<rule ref="PSR2.Files.EndFileNewline" />
|
||||
|
||||
<!-- When referencing arrays there MUST NOT be any whitespace around the opening bracket
|
||||
or before the closing bracket. -->
|
||||
<rule ref="Squiz.Arrays.ArrayBracketSpacing" />
|
||||
|
||||
<!-- The "else if" statement MUST be written with a space between the words else and if. -->
|
||||
<rule ref="Squiz.ControlStructures.ElseIfDeclaration" />
|
||||
|
||||
<!-- There MUST be a space between each element of a foreach loop. -->
|
||||
<rule ref="Squiz.ControlStructures.ForEachLoopDeclaration" />
|
||||
|
||||
<!-- In a for loop declaration, there MUST be no space inside the brackets
|
||||
and there MUST be 0 spaces before and 1 space after semicolons. -->
|
||||
<rule ref="Squiz.ControlStructures.ForLoopDeclaration" />
|
||||
|
||||
<!-- In the argument list, there MUST NOT be a space before each comma,
|
||||
and there MUST be one space after each comma. -->
|
||||
<rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing">
|
||||
@@ -41,6 +65,12 @@
|
||||
</rule>
|
||||
<rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing.SpacingAfterHint" />
|
||||
|
||||
<!-- All built-in PHP functions MUST be called lowercased. -->
|
||||
<rule ref="Squiz.Functions.LowercaseFunctionKeywords" />
|
||||
|
||||
<!-- The eval() function MUST NOT be used. -->
|
||||
<rule ref="Squiz.PHP.Eval" />
|
||||
|
||||
<!-- There MUST NOT be trailing whitespace at the end of lines. -->
|
||||
<rule ref="Squiz.WhiteSpace.SuperfluousWhitespace" />
|
||||
|
||||
|
9
build/code_sniffer/ruleset-php-strict-core.xml
Normal file
9
build/code_sniffer/ruleset-php-strict-core.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0"?>
|
||||
<ruleset name="phpBB PHP Strict Standard Core">
|
||||
|
||||
<description>phpBB coding standard for PHP files of phpBB core</description>
|
||||
|
||||
<rule ref="./ruleset-php-legacy-core.xml" />
|
||||
<rule ref="./ruleset-php-strict.xml" />
|
||||
|
||||
</ruleset>
|
@@ -22,6 +22,9 @@
|
||||
<!-- PHP keywords MUST be in lower case. -->
|
||||
<rule ref="Generic.PHP.LowerCaseKeyword" />
|
||||
|
||||
<!-- Constructors MUST be called __construct() instead of after the class. -->
|
||||
<rule ref="Generic.NamingConventions.ConstructorName" />
|
||||
|
||||
<!-- Classes etc. MUST be namespaced -->
|
||||
<rule ref="PSR1.Classes.ClassDeclaration.MissingNamespace" />
|
||||
|
||||
@@ -36,4 +39,10 @@
|
||||
There MUST be one blank line after the use block. -->
|
||||
<rule ref="PSR2.Namespaces.UseDeclaration" />
|
||||
|
||||
<!-- There MUST be one blank line after the namespace declaration -->
|
||||
<rule ref="PSR2.Namespaces.NamespaceDeclaration" />
|
||||
|
||||
<!-- There MUST NOT be unused use statements. -->
|
||||
<rule ref="./phpbb/Sniffs/Namespaces/UnusedUseSniff.php" />
|
||||
|
||||
</ruleset>
|
||||
|
@@ -195,12 +195,6 @@ if (sizeof($package->old_packages))
|
||||
* referenced files from the same or subsequent directories.
|
||||
*/
|
||||
$copy_relative_directories = array(
|
||||
'adm/style/admin.css' => array(
|
||||
'copied' => false,
|
||||
'copy' => array(
|
||||
'adm/images/*' => 'adm/images',
|
||||
),
|
||||
),
|
||||
'config/' => array(
|
||||
'copied' => false,
|
||||
'copy' => array(
|
||||
@@ -269,6 +263,42 @@ if (sizeof($package->old_packages))
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* We need to always copy the template and asset files that we need in
|
||||
* the update, to ensure that the page is displayed correctly.
|
||||
*/
|
||||
$copy_update_files = array(
|
||||
'adm/images/*' => 'adm/images',
|
||||
'adm/style/admin.css' => 'adm/style',
|
||||
'adm/style/admin.js' => 'adm/style',
|
||||
'adm/style/ajax.js' => 'adm/style',
|
||||
'adm/style/install_*' => 'adm/style',
|
||||
'assets/javascript/*' => 'assets/javascript',
|
||||
);
|
||||
|
||||
foreach ($copy_update_files as $source_files => $destination_dir)
|
||||
{
|
||||
// Create directories along the way?
|
||||
$directories = explode('/', $destination_dir);
|
||||
|
||||
chdir($dest_filename_dir . '/install/update/new');
|
||||
foreach ($directories as $dir)
|
||||
{
|
||||
$dir = trim($dir);
|
||||
if ($dir)
|
||||
{
|
||||
if (!file_exists('./' . $dir))
|
||||
{
|
||||
$package->run_command('mkdir ' . $dir);
|
||||
}
|
||||
chdir('./' . $dir);
|
||||
}
|
||||
}
|
||||
$source_dir_files = $package->locations['old_versions'] . $package->get('simple_name') . '/' . $source_files;
|
||||
$destination_dir = $dest_filename_dir . '/install/update/new/' . $destination_dir;
|
||||
$package->run_command('cp ' . $source_dir_files . ' ' . $destination_dir);
|
||||
}
|
||||
|
||||
// Build index.php file for holding the file structure
|
||||
$index_contents = '<?php
|
||||
|
||||
|
@@ -191,12 +191,12 @@ do
|
||||
err=$ERR_HEADER;
|
||||
echo "$line" | grep -Eq "^\[(ticket/[0-9]+|feature/$branch_regex|task/$branch_regex)\] .+$"
|
||||
result=$?
|
||||
if ! echo "$line" | grep -Eq "^\[(ticket/[0-9]+|feature/$branch_regex|task/$branch_regex)\] [A-Z].+$"
|
||||
if ! echo "$line" | grep -Eq "^\[(ticket/[0-9]+|feature/$branch_regex|task/$branch_regex)\] [a-zA-Z].+$"
|
||||
then
|
||||
# Don't be too strict.
|
||||
# Commits may be temporary, intended to be squashed later.
|
||||
# Just issue a warning here.
|
||||
complain "$severity: heading should be a sentence beginning with a capital letter." 1>&2
|
||||
complain "$severity: heading should be a sentence beginning with a letter." 1>&2
|
||||
complain "You entered:" 1>&2
|
||||
complain "$line" 1>&2
|
||||
fi
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 2.3 KiB |
Binary file not shown.
Before Width: | Height: | Size: 541 B |
@@ -205,8 +205,8 @@
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="allowed_forums">{L_ALLOWED_FORUMS}{L_COLON}</label><br /><span>{L_ALLOWED_FORUMS_EXPLAIN}</span></dt>
|
||||
<dd><label><input type="radio" id="allowed_forums" class="radio" name="forum_select" value="0"<!-- IF not S_FORUM_IDS --> checked="checked"<!-- ENDIF --> /> {L_ALLOW_ALL_FORUMS}</label>
|
||||
<label><input type="radio" class="radio" name="forum_select" value="1"<!-- IF S_FORUM_IDS --> checked="checked"<!-- ENDIF --> /> {L_ALLOW_SELECTED_FORUMS}</label></dd>
|
||||
<dd><label><input type="radio" id="allowed_forums" class="radio" name="forum_select" value="0"<!-- IF not S_FORUM_IDS --> checked="checked"<!-- ENDIF --> /> {L_ALLOW_ALL_FORUMS}</label></dd>
|
||||
<dd><label><input type="radio" class="radio" name="forum_select" value="1"<!-- IF S_FORUM_IDS --> checked="checked"<!-- ENDIF --> /> {L_ALLOW_SELECTED_FORUMS}</label></dd>
|
||||
<dd><select name="allowed_forums[]" multiple="multiple" size="8">{S_FORUM_ID_OPTIONS}</select></dd>
|
||||
</dl>
|
||||
|
||||
|
@@ -1,7 +1,6 @@
|
||||
<dl>
|
||||
<dt><label for="category">{L_AVATAR_CATEGORY}{L_COLON}</label></dt>
|
||||
<dd><select name="avatar_local_cat" id="category">
|
||||
<option value="">{L_NO_AVATAR_CATEGORY}</option>
|
||||
<!-- BEGIN avatar_local_cats -->
|
||||
<option value="{avatar_local_cats.NAME}"<!-- IF avatar_local_cats.SELECTED --> selected="selected"<!-- ENDIF -->>{avatar_local_cats.NAME}</option>
|
||||
<!-- END avatar_local_cats -->
|
||||
|
76
phpBB/adm/style/acp_contact.html
Normal file
76
phpBB/adm/style/acp_contact.html
Normal file
@@ -0,0 +1,76 @@
|
||||
<!-- INCLUDE overall_header.html -->
|
||||
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
|
||||
var form_name = 'acp_contact';
|
||||
var text_name = 'contact_admin_info';
|
||||
var load_draft = false;
|
||||
var upload = false;
|
||||
var imageTag = false;
|
||||
|
||||
// ]]>
|
||||
</script>
|
||||
|
||||
<a id="maincontent"></a>
|
||||
|
||||
<h1>{L_ACP_CONTACT_SETTINGS}</h1>
|
||||
|
||||
<p>{L_ACP_CONTACT_SETTINGS_EXPLAIN}</p>
|
||||
|
||||
<form id="acp_contact" method="post" action="{U_ACTION}">
|
||||
<fieldset>
|
||||
<legend>{L_GENERAL_OPTIONS}</legend>
|
||||
<dl>
|
||||
<dt><label for="contact_admin_form_enable">{L_CONTACT_US_ENABLE}{L_COLON}</label><br /><span>{L_CONTACT_US_ENABLE_EXPLAIN}</span></dt>
|
||||
<dd>
|
||||
<label><input type="radio" class="radio" id="contact_admin_form_enable" name="contact_admin_form_enable" value="1"<!-- IF CONTACT_ENABLED --> checked="checked"<!-- ENDIF --> /> {L_ENABLED}</label>
|
||||
<label><input type="radio" class="radio" name="contact_admin_form_enable" value="0"<!-- IF not CONTACT_ENABLED --> checked="checked"<!-- ENDIF --> /> {L_DISABLED}</label>
|
||||
</dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
||||
<!-- IF CONTACT_US_INFO_PREVIEW -->
|
||||
<fieldset>
|
||||
<legend>{L_CONTACT_US_INFO_PREVIEW}</legend>
|
||||
<p>{CONTACT_US_INFO_PREVIEW}</p>
|
||||
</fieldset>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<fieldset>
|
||||
<legend>{L_CONTACT_US_INFO}</legend>
|
||||
<p>{L_CONTACT_US_INFO_EXPLAIN}</p>
|
||||
|
||||
<!-- INCLUDE acp_posting_buttons.html -->
|
||||
|
||||
<dl class="responsive-columns">
|
||||
<dt style="width: 90px;" id="color_palette_placeholder" data-orientation="v" data-height="12" data-width="15" data-bbcode="true">
|
||||
</dt>
|
||||
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 90px;">
|
||||
<textarea name="contact_admin_info" rows="10" cols="60" style="width: 95%;" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" onfocus="initInsertions();" data-bbcode="true">{CONTACT_US_INFO}</textarea>
|
||||
</dd>
|
||||
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 90px; margin-top: 5px;">
|
||||
<!-- IF S_BBCODE_ALLOWED -->
|
||||
<label><input type="checkbox" class="radio" name="disable_bbcode"<!-- IF S_BBCODE_DISABLE_CHECKED --> checked="checked"<!-- ENDIF --> /> {L_DISABLE_BBCODE}</label>
|
||||
<!-- ENDIF -->
|
||||
<!-- IF S_SMILIES_ALLOWED -->
|
||||
<label><input type="checkbox" class="radio" name="disable_smilies"<!-- IF S_SMILIES_DISABLE_CHECKED --> checked="checked"<!-- ENDIF --> /> {L_DISABLE_SMILIES}</label>
|
||||
<!-- ENDIF -->
|
||||
<!-- IF S_LINKS_ALLOWED -->
|
||||
<label><input type="checkbox" class="radio" name="disable_magic_url"<!-- IF S_MAGIC_URL_DISABLE_CHECKED --> checked="checked"<!-- ENDIF --> /> {L_DISABLE_MAGIC_URL}</label>
|
||||
<!-- ENDIF -->
|
||||
</dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 90px; margin-top: 10px;"><strong>{L_OPTIONS}{L_COLON} </strong>{BBCODE_STATUS} :: {IMG_STATUS} :: {FLASH_STATUS} :: {URL_STATUS} :: {SMILIES_STATUS}</dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="submit" name="preview" value="{L_PREVIEW}" />
|
||||
{S_FORM_TOKEN}
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
<!-- INCLUDE overall_footer.html -->
|
@@ -284,12 +284,12 @@
|
||||
<label><input type="radio" class="radio" name="enable_shadow_prune" value="0"<!-- IF not S_PRUNE_SHADOW_ENABLE --> id="enable_shadow_prune" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="prune_shadow_freq">{L_AUTO_PRUNE_FREQ}{L_COLON}</label><br /><span>{L_AUTO_PRUNE_FREQ_EXPLAIN}</span></dt>
|
||||
<dd><input type="number" id="prune_shadow_freq" name="prune_shadow_freq" value="{PRUNE_FREQ}" maxlength="4" size="4" min="0" max="9999" /> {L_DAYS}</dd>
|
||||
<dt><label for="prune_shadow_freq">{L_AUTO_PRUNE_SHADOW_FREQ}{L_COLON}</label><br /><span>{L_AUTO_PRUNE_SHADOW_FREQ_EXPLAIN}</span></dt>
|
||||
<dd><input type="number" id="prune_shadow_freq" name="prune_shadow_freq" value="{PRUNE_SHADOW_FREQ}" maxlength="4" size="4" min="0" max="9999" /> {L_DAYS}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="prune_shadow_days">{L_AUTO_PRUNE_DAYS}{L_COLON}</label><br /><span>{L_AUTO_PRUNE_DAYS_EXPLAIN}</span></dt>
|
||||
<dd><input type="number" id="prune_shadow_days" name="prune_shadow_days" value="{PRUNE_DAYS}" maxlength="4" size="4" min="0" max="9999" /> {L_DAYS}</dd>
|
||||
<dt><label for="prune_shadow_days">{L_AUTO_PRUNE_SHADOW_DAYS}{L_COLON}</label><br /><span>{L_AUTO_PRUNE_SHADOW_DAYS_EXPLAIN}</span></dt>
|
||||
<dd><input type="number" id="prune_shadow_days" name="prune_shadow_days" value="{PRUNE_SHADOW_DAYS}" maxlength="4" size="4" min="0" max="9999" /> {L_DAYS}</dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
@@ -117,7 +117,7 @@
|
||||
<dl>
|
||||
<dt><label>{L_AVATAR_TYPE}{L_COLON}</label></dt>
|
||||
<dd><select name="avatar_driver" id="avatar_driver" data-togglable-settings="true">
|
||||
<option value="">{L_NO_AVATAR_CATEGORY}</option>
|
||||
<option value="">{L_NO_AVATAR}</option>
|
||||
<!-- BEGIN avatar_drivers -->
|
||||
<option value="{avatar_drivers.DRIVER}"<!-- IF avatar_drivers.SELECTED --> selected="selected"<!-- ENDIF --> data-toggle-setting="#avatar_option_{avatar_drivers.DRIVER}">{avatar_drivers.L_TITLE}</option>
|
||||
<!-- END avatar_drivers -->
|
||||
|
70
phpBB/adm/style/acp_posting_buttons.html
Normal file
70
phpBB/adm/style/acp_posting_buttons.html
Normal file
@@ -0,0 +1,70 @@
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
|
||||
// Define the bbCode tags
|
||||
var bbcode = new Array();
|
||||
var bbtags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]','[quote]','[/quote]','[code]','[/code]','[list]','[/list]','[list=]','[/list]','[img]','[/img]','[url]','[/url]','[flash=]', '[/flash]','[size=]','[/size]'<!-- BEGIN custom_tags -->, {custom_tags.BBCODE_NAME}<!-- END custom_tags -->);
|
||||
|
||||
// Helpline messages
|
||||
var help_line = {
|
||||
b: '{LA_BBCODE_B_HELP}',
|
||||
i: '{LA_BBCODE_I_HELP}',
|
||||
u: '{LA_BBCODE_U_HELP}',
|
||||
q: '{LA_BBCODE_Q_HELP}',
|
||||
c: '{LA_BBCODE_C_HELP}',
|
||||
l: '{LA_BBCODE_L_HELP}',
|
||||
o: '{LA_BBCODE_O_HELP}',
|
||||
p: '{LA_BBCODE_P_HELP}',
|
||||
w: '{LA_BBCODE_W_HELP}',
|
||||
a: '{LA_BBCODE_A_HELP}',
|
||||
s: '{LA_BBCODE_S_HELP}',
|
||||
f: '{LA_BBCODE_F_HELP}',
|
||||
y: '{LA_BBCODE_Y_HELP}',
|
||||
d: '{LA_BBCODE_D_HELP}'
|
||||
<!-- BEGIN custom_tags -->
|
||||
,cb_{custom_tags.BBCODE_ID}{L_COLON} '{custom_tags.A_BBCODE_HELPLINE}'
|
||||
<!-- END custom_tags -->
|
||||
}
|
||||
|
||||
// ]]>
|
||||
</script>
|
||||
|
||||
<!-- INCLUDEJS {T_ASSETS_PATH}/javascript/editor.js -->
|
||||
|
||||
<!-- EVENT acp_posting_buttons_before -->
|
||||
<div id="format-buttons">
|
||||
<input type="button" class="button2" accesskey="b" name="addbbcode0" value=" B " style="font-weight:bold; width: 30px" onclick="bbstyle(0)" title="{L_BBCODE_B_HELP}" />
|
||||
<input type="button" class="button2" accesskey="i" name="addbbcode2" value=" i " style="font-style:italic; width: 30px" onclick="bbstyle(2)" title="{L_BBCODE_I_HELP}" />
|
||||
<input type="button" class="button2" accesskey="u" name="addbbcode4" value=" u " style="text-decoration: underline; width: 30px" onclick="bbstyle(4)" title="{L_BBCODE_U_HELP}" />
|
||||
<!-- IF S_BBCODE_QUOTE -->
|
||||
<input type="button" class="button2" accesskey="q" name="addbbcode6" value="Quote" style="width: 50px" onclick="bbstyle(6)" title="{L_BBCODE_Q_HELP}" />
|
||||
<!-- ENDIF -->
|
||||
<input type="button" class="button2" accesskey="c" name="addbbcode8" value="Code" style="width: 40px" onclick="bbstyle(8)" title="{L_BBCODE_C_HELP}" />
|
||||
<input type="button" class="button2" accesskey="l" name="addbbcode10" value="List" style="width: 40px" onclick="bbstyle(10)" title="{L_BBCODE_L_HELP}" />
|
||||
<input type="button" class="button2" accesskey="o" name="addbbcode12" value="List=" style="width: 40px" onclick="bbstyle(12)" title="{L_BBCODE_O_HELP}" />
|
||||
<input type="button" class="button2" accesskey="y" name="addlistitem" value="[*]" style="width: 40px" onclick="bbstyle(-1)" title="{L_BBCODE_LISTITEM_HELP}" />
|
||||
<!-- IF S_BBCODE_IMG -->
|
||||
<input type="button" class="button2" accesskey="p" name="addbbcode14" value="Img" style="width: 40px" onclick="bbstyle(14)" title="{L_BBCODE_P_HELP}" />
|
||||
<!-- ENDIF -->
|
||||
<!-- IF S_LINKS_ALLOWED -->
|
||||
<input type="button" class="button2" accesskey="w" name="addbbcode16" value="URL" style="text-decoration: underline; width: 40px" onclick="bbstyle(16)" title="{L_BBCODE_W_HELP}" />
|
||||
<!-- ENDIF -->
|
||||
<!-- IF S_BBCODE_FLASH -->
|
||||
<input type="button" class="button2" accesskey="d" name="addbbcode18" value="Flash" onclick="bbstyle(18)" title="{L_BBCODE_D_HELP}" />
|
||||
<!-- ENDIF -->
|
||||
<select name="addbbcode20" onchange="bbfontstyle('[size=' + this.form.addbbcode20.options[this.form.addbbcode20.selectedIndex].value + ']', '[/size]');this.form.addbbcode20.selectedIndex = 2;" title="{L_BBCODE_F_HELP}">
|
||||
<option value="50">{L_FONT_TINY}</option>
|
||||
<option value="85">{L_FONT_SMALL}</option>
|
||||
<option value="100" selected="selected">{L_FONT_NORMAL}</option>
|
||||
<!-- IF not MAX_FONT_SIZE or MAX_FONT_SIZE >= 150 -->
|
||||
<option value="150">{L_FONT_LARGE}</option>
|
||||
<!-- IF not MAX_FONT_SIZE or MAX_FONT_SIZE >= 200 -->
|
||||
<option value="200">{L_FONT_HUGE}</option>
|
||||
<!-- ENDIF -->
|
||||
<!-- ENDIF -->
|
||||
</select>
|
||||
<!-- BEGIN custom_tags -->
|
||||
<input type="button" class="button2" name="addbbcode{custom_tags.BBCODE_ID}" value="{custom_tags.BBCODE_TAG}" onclick="bbstyle({custom_tags.BBCODE_ID})" title="{custom_tags.BBCODE_HELPLINE}" />
|
||||
<!-- END custom_tags -->
|
||||
</div>
|
||||
<!-- EVENT acp_posting_buttons_after -->
|
@@ -14,7 +14,7 @@
|
||||
<dl>
|
||||
<dt><label>{L_AVATAR_TYPE}</label></dt>
|
||||
<dd><select name="avatar_driver" id="avatar_driver" data-togglable-settings="true">
|
||||
<option value="">{L_NO_AVATAR_CATEGORY}</option>
|
||||
<option value="">{L_NO_AVATAR}</option>
|
||||
<!-- BEGIN avatar_drivers -->
|
||||
<option value="{avatar_drivers.DRIVER}"<!-- IF avatar_drivers.SELECTED --> selected="selected"<!-- ENDIF --> data-toggle-setting="#avatar_option_{avatar_drivers.DRIVER}">{avatar_drivers.L_TITLE}</option>
|
||||
<!-- END avatar_drivers -->
|
||||
|
@@ -5,36 +5,10 @@
|
||||
var text_name = 'signature';
|
||||
var load_draft = false;
|
||||
var upload = false;
|
||||
|
||||
// Define the bbCode tags
|
||||
var bbcode = new Array();
|
||||
var bbtags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]','[quote]','[/quote]','[code]','[/code]','[list]','[/list]','[list=]','[/list]','[img]','[/img]','[url]','[/url]','[flash=]', '[/flash]','[size=]','[/size]'<!-- BEGIN custom_tags -->, {custom_tags.BBCODE_NAME}<!-- END custom_tags -->);
|
||||
var imageTag = false;
|
||||
|
||||
// Helpline messages
|
||||
var help_line = {
|
||||
b: '{LA_BBCODE_B_HELP}',
|
||||
i: '{LA_BBCODE_I_HELP}',
|
||||
u: '{LA_BBCODE_U_HELP}',
|
||||
q: '{LA_BBCODE_Q_HELP}',
|
||||
c: '{LA_BBCODE_C_HELP}',
|
||||
l: '{LA_BBCODE_L_HELP}',
|
||||
o: '{LA_BBCODE_O_HELP}',
|
||||
p: '{LA_BBCODE_P_HELP}',
|
||||
w: '{LA_BBCODE_W_HELP}',
|
||||
a: '{LA_BBCODE_A_HELP}',
|
||||
s: '{LA_BBCODE_S_HELP}',
|
||||
f: '{LA_BBCODE_F_HELP}',
|
||||
y: '{LA_BBCODE_Y_HELP}',
|
||||
d: '{LA_BBCODE_D_HELP}'
|
||||
<!-- BEGIN custom_tags -->
|
||||
,cb_{custom_tags.BBCODE_ID}{L_COLON} '{custom_tags.A_BBCODE_HELPLINE}'
|
||||
<!-- END custom_tags -->
|
||||
}
|
||||
|
||||
// ]]>
|
||||
</script>
|
||||
<!-- INCLUDEJS {T_ASSETS_PATH}/javascript/editor.js -->
|
||||
|
||||
<form id="user_signature" method="post" action="{U_ACTION}">
|
||||
|
||||
@@ -49,43 +23,7 @@
|
||||
<legend>{L_SIGNATURE}</legend>
|
||||
<p>{L_SIGNATURE_EXPLAIN}</p>
|
||||
|
||||
<!-- EVENT acp_users_signature_editor_buttons_before -->
|
||||
<div id="format-buttons">
|
||||
<input type="button" class="button2" accesskey="b" name="addbbcode0" value=" B " style="font-weight:bold; width: 30px" onclick="bbstyle(0)" title="{L_BBCODE_B_HELP}" />
|
||||
<input type="button" class="button2" accesskey="i" name="addbbcode2" value=" i " style="font-style:italic; width: 30px" onclick="bbstyle(2)" title="{L_BBCODE_I_HELP}" />
|
||||
<input type="button" class="button2" accesskey="u" name="addbbcode4" value=" u " style="text-decoration: underline; width: 30px" onclick="bbstyle(4)" title="{L_BBCODE_U_HELP}" />
|
||||
<!-- IF S_BBCODE_QUOTE -->
|
||||
<input type="button" class="button2" accesskey="q" name="addbbcode6" value="Quote" style="width: 50px" onclick="bbstyle(6)" title="{L_BBCODE_Q_HELP}" />
|
||||
<!-- ENDIF -->
|
||||
<input type="button" class="button2" accesskey="c" name="addbbcode8" value="Code" style="width: 40px" onclick="bbstyle(8)" title="{L_BBCODE_C_HELP}" />
|
||||
<input type="button" class="button2" accesskey="l" name="addbbcode10" value="List" style="width: 40px" onclick="bbstyle(10)" title="{L_BBCODE_L_HELP}" />
|
||||
<input type="button" class="button2" accesskey="o" name="addbbcode12" value="List=" style="width: 40px" onclick="bbstyle(12)" title="{L_BBCODE_O_HELP}" />
|
||||
<input type="button" class="button2" accesskey="y" name="addlistitem" value="[*]" style="width: 40px" onclick="bbstyle(-1)" title="{L_BBCODE_LISTITEM_HELP}" />
|
||||
<!-- IF S_BBCODE_IMG -->
|
||||
<input type="button" class="button2" accesskey="p" name="addbbcode14" value="Img" style="width: 40px" onclick="bbstyle(14)" title="{L_BBCODE_P_HELP}" />
|
||||
<!-- ENDIF -->
|
||||
<!-- IF S_LINKS_ALLOWED -->
|
||||
<input type="button" class="button2" accesskey="w" name="addbbcode16" value="URL" style="text-decoration: underline; width: 40px" onclick="bbstyle(16)" title="{L_BBCODE_W_HELP}" />
|
||||
<!-- ENDIF -->
|
||||
<!-- IF S_BBCODE_FLASH -->
|
||||
<input type="button" class="button2" accesskey="d" name="addbbcode18" value="Flash" onclick="bbstyle(18)" title="{L_BBCODE_D_HELP}" />
|
||||
<!-- ENDIF -->
|
||||
<select name="addbbcode20" onchange="bbfontstyle('[size=' + this.form.addbbcode20.options[this.form.addbbcode20.selectedIndex].value + ']', '[/size]');this.form.addbbcode20.selectedIndex = 2;" title="{L_BBCODE_F_HELP}">
|
||||
<option value="50">{L_FONT_TINY}</option>
|
||||
<option value="85">{L_FONT_SMALL}</option>
|
||||
<option value="100" selected="selected">{L_FONT_NORMAL}</option>
|
||||
<!-- IF not MAX_FONT_SIZE or MAX_FONT_SIZE >= 150 -->
|
||||
<option value="150">{L_FONT_LARGE}</option>
|
||||
<!-- IF not MAX_FONT_SIZE or MAX_FONT_SIZE >= 200 -->
|
||||
<option value="200">{L_FONT_HUGE}</option>
|
||||
<!-- ENDIF -->
|
||||
<!-- ENDIF -->
|
||||
</select>
|
||||
<!-- BEGIN custom_tags -->
|
||||
<input type="button" class="button2" name="addbbcode{custom_tags.BBCODE_ID}" value="{custom_tags.BBCODE_TAG}" onclick="bbstyle({custom_tags.BBCODE_ID})" title="{custom_tags.BBCODE_HELPLINE}" />
|
||||
<!-- END custom_tags -->
|
||||
</div>
|
||||
<!-- EVENT acp_users_signature_editor_buttons_after -->
|
||||
<!-- INCLUDE acp_posting_buttons.html -->
|
||||
|
||||
<dl class="responsive-columns">
|
||||
<dt style="width: 90px;" id="color_palette_placeholder" data-orientation="v" data-height="12" data-width="15" data-bbcode="true">
|
||||
|
@@ -209,6 +209,9 @@ li {
|
||||
|
||||
#page-footer {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.copyright {
|
||||
font-size: 0.75em;
|
||||
text-align: center;
|
||||
}
|
||||
@@ -317,176 +320,156 @@ li {
|
||||
|
||||
|
||||
/* Tabbed menu
|
||||
Based on: http://www.alistapart.com/articles/slidingdoors2/
|
||||
----------------------------------------*/
|
||||
#tabs {
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
line-height: normal;
|
||||
margin: 0 7px;
|
||||
min-width: 600px;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
#tabs ul {
|
||||
margin:0;
|
||||
padding: 0;
|
||||
#tabs > ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
#tabs ul:after {
|
||||
content: '';
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
#tabs li {
|
||||
display: block;
|
||||
float: left;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 0.85em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#tabs li:after {
|
||||
#tabs > ul:after {
|
||||
content: '';
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
#tabs a {
|
||||
#tabs .tab {
|
||||
display: inline-block;
|
||||
float: left;
|
||||
background:url("../images/bg_tabs1.gif") no-repeat 0% -34px;
|
||||
margin: 0 1px 0 0;
|
||||
padding: 0 0 0 7px;
|
||||
text-decoration: none;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.rtl #tabs li {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#tabs a span {
|
||||
float: left;
|
||||
display: block;
|
||||
background: url("../images/bg_tabs2.gif") no-repeat 100% -34px;
|
||||
padding: 7px 10px 4px 4px;
|
||||
min-height: 14px;
|
||||
color: #767676;
|
||||
white-space: nowrap;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
text-transform: uppercase;
|
||||
font-size: 0.85em;
|
||||
font-weight: bold;
|
||||
line-height: 14px;
|
||||
}
|
||||
|
||||
.rtl #tabs a span {
|
||||
.rtl #tabs .tab {
|
||||
float: right;
|
||||
}
|
||||
|
||||
/* Commented Backslash Hack hides rule from IE5-Mac \*/
|
||||
#tabs a span, .rtl #tabs a span { float:none;}
|
||||
/* End hack */
|
||||
#tabs .tab > a {
|
||||
background: #D4D6DA;
|
||||
background: -moz-linear-gradient(top, #CACBCF 0%, #D4D6DA 100%);
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #CACBCF), color-stop(100%, #D4D6DA));
|
||||
background: -webkit-linear-gradient(top, #CACBCF 0%, #D4D6DA 100%);
|
||||
background: -o-linear-gradient(top, #CACBCF 0%, #D4D6DA 100%);
|
||||
background: -ms-linear-gradient(top, #CACBCF 0%, #D4D6DA 100%);
|
||||
background: linear-gradient(to bottom, #CACBCF 0%, #D4D6DA 100%);
|
||||
border: 1px solid #BBB;
|
||||
border-bottom-width: 0;
|
||||
border-radius: 5px 5px 0 0;
|
||||
color: #767676;
|
||||
display: block;
|
||||
font-weight: bold;
|
||||
margin: 1px 1px 2px 0;
|
||||
padding: 6px 9px 4px;
|
||||
position: relative;
|
||||
text-decoration: none;
|
||||
text-transform: uppercase;
|
||||
white-space: nowrap;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#tabs a:hover span {
|
||||
#tabs .tab > a:hover {
|
||||
background: #F1F1EE;
|
||||
border-color: #C0BFBB;
|
||||
color: #BC2A4D;
|
||||
}
|
||||
|
||||
#tabs a:hover {
|
||||
background-position: 0 -69px;
|
||||
}
|
||||
|
||||
#tabs a:hover span {
|
||||
background-position: 100% -69px;
|
||||
}
|
||||
|
||||
#tabs .activetab a {
|
||||
background-position: 0 0;
|
||||
border-bottom: 1px solid #DCDEE2;
|
||||
}
|
||||
|
||||
#tabs .activetab a span {
|
||||
background-position: 100% 0;
|
||||
padding-bottom: 5px;
|
||||
#tabs .activetab > a,
|
||||
#tabs .activetab > a:hover {
|
||||
background: #DCDEE2;
|
||||
background: -moz-linear-gradient(top, #F2F2F2 0%, #DCDEE2 100%);
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #F2F2F2), color-stop(100%, #DCDEE2));
|
||||
background: -webkit-linear-gradient(top, #F2F2F2 0%, #DCDEE2 100%);
|
||||
background: -o-linear-gradient(top, #F2F2F2 0%, #DCDEE2 100%);
|
||||
background: -ms-linear-gradient(top, #F2F2F2 0%, #DCDEE2 100%);
|
||||
background: linear-gradient(to bottom, #F2F2F2 0%, #DCDEE2 100%);
|
||||
border-color: #999;
|
||||
border-bottom: 2px solid #DCDEE2;
|
||||
box-shadow: 0 1px 1px #FFF inset;
|
||||
color: #23649F;
|
||||
margin: 0 1px 0 0;
|
||||
padding: 7px 10px 4px;
|
||||
}
|
||||
|
||||
#tabs .activetab a:hover span {
|
||||
#tabs .activetab > a:hover {
|
||||
color: #115098;
|
||||
}
|
||||
|
||||
/* Responsive tabs
|
||||
----------------------------------------*/
|
||||
.responsive-tab {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.responsive-tab .responsive-tab-link span {
|
||||
display: inline-block;
|
||||
.responsive-tab > a.responsive-tab-link {
|
||||
display: block;
|
||||
font-size: 16px;
|
||||
position: relative;
|
||||
width: 16px;
|
||||
line-height: 14px;
|
||||
text-decoration: none;
|
||||
padding-left: 9px !important;
|
||||
padding-right: 9px !important;
|
||||
}
|
||||
|
||||
.responsive-tab .responsive-tab-link span:before {
|
||||
.responsive-tab .responsive-tab-link:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 5px;
|
||||
top: 8px;
|
||||
left: 10px;
|
||||
top: 7px;
|
||||
height: .125em;
|
||||
width: 14px;
|
||||
border-bottom: 0.125em solid #767676;
|
||||
border-top: 0.375em double #767676;
|
||||
}
|
||||
|
||||
.responsive-tab .responsive-tab-link:hover span:before {
|
||||
.responsive-tab .responsive-tab-link:hover:before {
|
||||
border-color: #BC2A4D;
|
||||
}
|
||||
|
||||
.responsive-tab.activetab .responsive-tab-link span:before {
|
||||
.responsive-tab.activetab .responsive-tab-link:before {
|
||||
border-color: #23649F;
|
||||
}
|
||||
|
||||
.responsive-tab.activetab .responsive-tab-link:hover span:before {
|
||||
.responsive-tab.activetab .responsive-tab-link:hover:before {
|
||||
border-color: #115098;
|
||||
}
|
||||
|
||||
#tabs .dropdown {
|
||||
top: 18px;
|
||||
margin-right: -1px;
|
||||
#tabs .dropdown, #minitabs .dropdown {
|
||||
top: 20px;
|
||||
margin-right: -2px;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
#tabs .dropdown-right .dropdown {
|
||||
margin-left: -2px;
|
||||
}
|
||||
|
||||
#tabs .dropdown li {
|
||||
display: block !important;
|
||||
float: none;
|
||||
background: transparent none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#tabs .dropdown a, #tabs .dropdown a span {
|
||||
background: transparent;
|
||||
display: block;
|
||||
border-width: 0;
|
||||
float: none;
|
||||
#tabs .dropdown-contents {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#tabs .dropdown a span {
|
||||
#tabs .dropdown li {
|
||||
border-bottom: 1px dotted #DCDCDC;
|
||||
}
|
||||
|
||||
#tabs .dropdown li:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
#tabs .dropdown a {
|
||||
display: block;
|
||||
padding: 4px 8px;
|
||||
color: inherit !important;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 700px), only screen and (max-device-width: 700px)
|
||||
{
|
||||
#tabs {
|
||||
min-width: 0;
|
||||
}
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* Main Panel
|
||||
@@ -984,6 +967,10 @@ table.fixed-width-table {
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
.rtl table.responsive td {
|
||||
text-align: right !important;
|
||||
}
|
||||
|
||||
table.responsive td.empty {
|
||||
display: none !important;
|
||||
}
|
||||
@@ -1004,6 +991,10 @@ table.fixed-width-table {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.rtl table.responsive.two-columns td {
|
||||
float: right;
|
||||
}
|
||||
|
||||
table.responsive.two-columns td:nth-child(2n+1) {
|
||||
clear: left;
|
||||
}
|
||||
@@ -1594,7 +1585,6 @@ input.button1:focus, input.button2:focus {
|
||||
z-index: 50;
|
||||
padding: 25px;
|
||||
padding: 0 25px 20px 25px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.phpbb_alert .alert_close {
|
||||
|
@@ -75,7 +75,7 @@ function parse_document(container)
|
||||
var cell = $(this),
|
||||
colspan = parseInt(cell.attr('colspan')),
|
||||
dfn = cell.attr('data-dfn'),
|
||||
text = dfn ? dfn : cell.text().trim();
|
||||
text = dfn ? dfn : $.trim(cell.text());
|
||||
|
||||
if (text == ' ') text = '';
|
||||
colspan = isNaN(colspan) || colspan < 1 ? 1 : colspan;
|
||||
@@ -114,7 +114,7 @@ function parse_document(container)
|
||||
cells.each(function() {
|
||||
var cell = $(this),
|
||||
colspan = parseInt(cell.attr('colspan')),
|
||||
text = cell.text().trim();
|
||||
text = $.trim(cell.text());
|
||||
|
||||
if (headersLength <= column) {
|
||||
return;
|
||||
@@ -169,7 +169,7 @@ function parse_document(container)
|
||||
ul = $this.children(),
|
||||
tabs = ul.children().not('[data-skip-responsive]'),
|
||||
links = tabs.children('a'),
|
||||
item = ul.append('<li class="responsive-tab" style="display:none;"><a href="javascript:void(0);" class="responsive-tab-link"><span> </span></a><div class="dropdown tab-dropdown" style="display: none;"><div class="pointer"><div class="pointer-inner" /></div><ul class="dropdown-contents" /></div></li>').find('li.responsive-tab'),
|
||||
item = ul.append('<li class="tab responsive-tab" style="display:none;"><a href="javascript:void(0);" class="responsive-tab-link"> </a><div class="dropdown tab-dropdown" style="display: none;"><div class="pointer"><div class="pointer-inner" /></div><ul class="dropdown-contents" /></div></li>').find('li.responsive-tab'),
|
||||
menu = item.find('.dropdown-contents'),
|
||||
maxHeight = 0,
|
||||
lastWidth = false,
|
||||
@@ -211,7 +211,7 @@ function parse_document(container)
|
||||
|
||||
for (i = total - 1; i >= 0; i --) {
|
||||
tab = availableTabs.eq(i);
|
||||
menu.prepend(tab.clone(true));
|
||||
menu.prepend(tab.clone(true).removeClass('tab'));
|
||||
tab.hide();
|
||||
if ($this.height() <= maxHeight) {
|
||||
menu.find('a').click(function() { check(true); });
|
||||
|
@@ -5,7 +5,9 @@
|
||||
</div>
|
||||
|
||||
<div id="page-footer">
|
||||
Powered by <a href="https://www.phpbb.com/">phpBB</a>® Forum Software © phpBB Limited
|
||||
<div class="copyright">
|
||||
Powered by <a href="https://www.phpbb.com/">phpBB</a>® Forum Software © phpBB Limited
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@@ -29,7 +29,7 @@
|
||||
<div id="tabs">
|
||||
<ul>
|
||||
<!-- BEGIN t_block1 -->
|
||||
<li<!-- IF t_block1.S_SELECTED --> class="activetab"<!-- ENDIF -->><a href="{t_block1.U_TITLE}"><span>{t_block1.L_TITLE}</span></a></li>
|
||||
<li class="tab<!-- IF t_block1.S_SELECTED --> activetab<!-- ENDIF -->"><a href="{t_block1.U_TITLE}">{t_block1.L_TITLE}</a></li>
|
||||
<!-- END t_block1 -->
|
||||
</ul>
|
||||
</div>
|
||||
|
@@ -184,26 +184,138 @@
|
||||
|
||||
<form id="install_update" method="post" action="{U_UPDATE_ACTION}">
|
||||
|
||||
<!-- IF .up_to_date -->
|
||||
<h2>{L_FILES_UP_TO_DATE}</h2>
|
||||
<p>{L_FILES_UP_TO_DATE_EXPLAIN}</p>
|
||||
<!-- IF .deleted -->
|
||||
<h2>{L_FILES_DELETED}</h2>
|
||||
<div style="float: {S_CONTENT_FLOW_END};">» <a href="#" onclick="phpbb.toggleDisplay('deleted', 0); return false;">{L_TOGGLE_DISPLAY}</a></div>
|
||||
<p>{L_FILES_DELETED_EXPLAIN}</p>
|
||||
|
||||
<fieldset>
|
||||
<legend><img src="{T_IMAGE_PATH}file_up_to_date.gif" alt="{L_STATUS_UP_TO_DATE}" /></legend>
|
||||
<!-- BEGIN up_to_date -->
|
||||
<fieldset id="deleted">
|
||||
<legend><img src="{T_IMAGE_PATH}icon_delete.gif" alt="{L_STATUS_DELETED}" /></legend>
|
||||
<!-- BEGIN deleted -->
|
||||
<dl>
|
||||
<dd class="full" style="text-align: {S_CONTENT_FLOW_BEGIN};"><strong>{up_to_date.FILENAME}</strong></dd>
|
||||
<dt style="width: 60%;"><strong><!-- IF deleted.DIR_PART -->{deleted.DIR_PART}<br /><!-- ENDIF -->{deleted.FILE_PART}</strong></dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 60%;">
|
||||
<!-- IF not deleted.S_BINARY -->[<a href="{deleted.U_SHOW_DIFF}" onclick="diff_popup(this.href); return false;">{deleted.L_SHOW_DIFF}</a>]<!-- ELSE -->{L_BINARY_FILE}<!-- ENDIF -->
|
||||
</dd>
|
||||
</dl>
|
||||
<!-- END up_to_date -->
|
||||
<!-- END deleted -->
|
||||
</fieldset>
|
||||
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF .conflict -->
|
||||
<h2>{L_FILES_CONFLICT}</h2>
|
||||
<div style="float: {S_CONTENT_FLOW_END};">» <a href="#" onclick="phpbb.toggleDisplay('conflict', 0); return false;">{L_TOGGLE_DISPLAY}</a></div>
|
||||
<p>{L_FILES_CONFLICT_EXPLAIN}</p>
|
||||
|
||||
<!-- BEGIN conflict -->
|
||||
<fieldset id="conflict">
|
||||
<legend><img src="{T_IMAGE_PATH}file_conflict.gif" alt="{L_STATUS_CONFLICT}" /></legend>
|
||||
<dl>
|
||||
<dt style="width: 60%;"><strong><!-- IF conflict.DIR_PART -->{conflict.DIR_PART}<br /><!-- ENDIF -->{conflict.FILE_PART}</strong>
|
||||
<!-- IF conflict.S_CUSTOM --><br /><span><em>{L_FILE_USED}{L_COLON} </em>{conflict.CUSTOM_ORIGINAL}</span><!-- ENDIF -->
|
||||
<!-- IF conflict.NUM_CONFLICTS --><br /><span>{L_NUM_CONFLICTS}{L_COLON} {conflict.NUM_CONFLICTS}</span><!-- ENDIF -->
|
||||
</dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;">
|
||||
<!-- IF not conflict.S_BINARY -->[<a href="{conflict.U_SHOW_DIFF}">{L_DOWNLOAD_CONFLICTS}</a>]<br />{L_DOWNLOAD_CONFLICTS_EXPLAIN}
|
||||
<!-- ELSE -->{L_BINARY_FILE}<!-- ENDIF -->
|
||||
</dd>
|
||||
<!-- IF conflict.S_CUSTOM -->
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;"><label><input type="checkbox" name="no_update[]" value="{conflict.FILENAME}" class="radio" /> {L_DO_NOT_UPDATE}</label></dd>
|
||||
<!-- ENDIF -->
|
||||
</dl>
|
||||
<!-- IF conflict.S_BINARY -->
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="conflict[{conflict.FILENAME}]" value="1" checked="checked" /> {L_MERGE_NO_MERGE_NEW_OPTION}</label></dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;"> </dd>
|
||||
</dl>
|
||||
<!-- ELSE -->
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="conflict[{conflict.FILENAME}]" value="3" checked="checked" /> {L_MERGE_NEW_FILE_OPTION}</label></dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;">[<a href="{conflict.U_VIEW_NEW_FILE}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_MODIFIED}</a>]</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="conflict[{conflict.FILENAME}]" value="4" /> {L_MERGE_MOD_FILE_OPTION}</label></dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;">[<a href="{conflict.U_VIEW_MOD_FILE}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_MODIFIED}</a>]</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="conflict[{conflict.FILENAME}]" value="1" /> {L_MERGE_NO_MERGE_NEW_OPTION}</label></dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;">[<a href="{conflict.U_VIEW_NO_MERGE_NEW}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_FINAL}</a>]</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="conflict[{conflict.FILENAME}]" value="2" /> {L_MERGE_NO_MERGE_MOD_OPTION}</label></dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;">[<a href="{conflict.U_VIEW_NO_MERGE_MOD}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_FINAL}</a>]</dd>
|
||||
</dl>
|
||||
<!-- ENDIF -->
|
||||
</fieldset>
|
||||
<!-- END conflict -->
|
||||
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF .new_conflict -->
|
||||
<h2>{L_FILES_NEW_CONFLICT}</h2>
|
||||
<div style="float: {S_CONTENT_FLOW_END};">» <a href="#" onclick="phpbb.toggleDisplay('new_conflict', 0); return false;">{L_TOGGLE_DISPLAY}</a></div>
|
||||
<p>{L_FILES_NEW_CONFLICT_EXPLAIN}</p>
|
||||
|
||||
<fieldset id="new_conflict">
|
||||
<legend><img src="{T_IMAGE_PATH}file_new_conflict.gif" alt="{L_STATUS_NEW_CONFLICT}" /></legend>
|
||||
<!-- BEGIN new_conflict -->
|
||||
<dl>
|
||||
<dt style="width: 60%;"><strong><!-- IF new_conflict.DIR_PART -->{new_conflict.DIR_PART}<br /><!-- ENDIF -->{new_conflict.FILE_PART}</strong>
|
||||
<!-- IF new_conflict.S_CUSTOM --><br /><span><em>{L_FILE_USED}{L_COLON} </em>{new_conflict.CUSTOM_ORIGINAL}</span><!-- ENDIF -->
|
||||
</dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;">
|
||||
<!-- IF not new_conflict.S_BINARY -->[<a href="{new_conflict.U_SHOW_DIFF}" onclick="diff_popup(this.href); return false;">{new_conflict.L_SHOW_DIFF}</a>]<!-- ELSE -->{L_BINARY_FILE}<!-- ENDIF -->
|
||||
</dd>
|
||||
<!-- IF new_conflict.S_CUSTOM -->
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;"><label><input type="checkbox" name="no_update[]" value="{new_conflict.FILENAME}" class="radio" /> {L_DO_NOT_UPDATE}</label></dd>
|
||||
<!-- ENDIF -->
|
||||
</dl>
|
||||
<!-- END new_conflict -->
|
||||
</fieldset>
|
||||
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF .modified -->
|
||||
<h2>{L_FILES_MODIFIED}</h2>
|
||||
<div style="float: {S_CONTENT_FLOW_END};">» <a href="#" onclick="phpbb.toggleDisplay('modified', 0); return false;">{L_TOGGLE_DISPLAY}</a></div>
|
||||
<p>{L_FILES_MODIFIED_EXPLAIN}</p>
|
||||
|
||||
<!-- BEGIN modified -->
|
||||
<fieldset id="modified">
|
||||
<legend><img src="{T_IMAGE_PATH}file_modified.gif" alt="{L_STATUS_MODIFIED}" /></legend>
|
||||
<dl>
|
||||
<dt style="width: 60%;"><strong><!-- IF modified.DIR_PART -->{modified.DIR_PART}<br /><!-- ENDIF -->{modified.FILE_PART}</strong>
|
||||
<!-- IF modified.S_CUSTOM --><br /><span><em>{L_FILE_USED}{L_COLON} </em>{modified.CUSTOM_ORIGINAL}</span><!-- ENDIF -->
|
||||
</dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;"> </dd>
|
||||
<!-- IF modified.S_CUSTOM -->
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;"><label><input type="checkbox" name="no_update[]" value="{modified.FILENAME}" class="radio" /> {L_DO_NOT_UPDATE}</label></dd>
|
||||
<!-- ENDIF -->
|
||||
</dl>
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="modified[{modified.FILENAME}]" value="0" checked="checked" /> {L_MERGE_MODIFICATIONS_OPTION}</label></dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;"><!-- IF not modified.S_BINARY -->[<a href="{modified.U_SHOW_DIFF}" onclick="diff_popup(this.href); return false;">{modified.L_SHOW_DIFF}</a>]<!-- ELSE -->{L_BINARY_FILE}<!-- ENDIF --></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="modified[{modified.FILENAME}]" value="1" /> {L_MERGE_NO_MERGE_NEW_OPTION}</label></dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;"><!-- IF not modified.S_BINARY -->[<a href="{modified.U_VIEW_NO_MERGE_NEW}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_FINAL}</a>]<!-- ELSE --> <!-- ENDIF --></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="modified[{modified.FILENAME}]" value="2" /> {L_MERGE_NO_MERGE_MOD_OPTION}</label></dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;"><!-- IF not modified.S_BINARY -->[<a href="{modified.U_VIEW_NO_MERGE_MOD}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_FINAL}</a>]<!-- ELSE --> <!-- ENDIF --></dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
<!-- END modified -->
|
||||
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF .new -->
|
||||
<h2>{L_FILES_NEW}</h2>
|
||||
<div style="float: {S_CONTENT_FLOW_END};">» <a href="#" onclick="phpbb.toggleDisplay('new_files', 0); return false;">{L_TOGGLE_DISPLAY}</a></div>
|
||||
<p>{L_FILES_NEW_EXPLAIN}</p>
|
||||
|
||||
<fieldset>
|
||||
<fieldset id="new_files" style="display: none;">
|
||||
<legend><img src="{T_IMAGE_PATH}file_new.gif" alt="{L_STATUS_NEW}" /></legend>
|
||||
<!-- BEGIN new -->
|
||||
<dl>
|
||||
@@ -244,107 +356,19 @@
|
||||
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF .modified -->
|
||||
<h2>{L_FILES_MODIFIED}</h2>
|
||||
<p>{L_FILES_MODIFIED_EXPLAIN}</p>
|
||||
<!-- IF .up_to_date -->
|
||||
<h2>{L_FILES_UP_TO_DATE}</h2>
|
||||
<div style="float: {S_CONTENT_FLOW_END};">» <a href="#" onclick="phpbb.toggleDisplay('up_to_date', 0); return false;">{L_TOGGLE_DISPLAY}</a></div>
|
||||
<p>{L_FILES_UP_TO_DATE_EXPLAIN}</p>
|
||||
|
||||
<!-- BEGIN modified -->
|
||||
<fieldset>
|
||||
<legend><img src="{T_IMAGE_PATH}file_modified.gif" alt="{L_STATUS_MODIFIED}" /></legend>
|
||||
<fieldset id="up_to_date" style="display: none;">
|
||||
<legend><img src="{T_IMAGE_PATH}file_up_to_date.gif" alt="{L_STATUS_UP_TO_DATE}" /></legend>
|
||||
<!-- BEGIN up_to_date -->
|
||||
<dl>
|
||||
<dt style="width: 60%;"><strong><!-- IF modified.DIR_PART -->{modified.DIR_PART}<br /><!-- ENDIF -->{modified.FILE_PART}</strong>
|
||||
<!-- IF modified.S_CUSTOM --><br /><span><em>{L_FILE_USED}{L_COLON} </em>{modified.CUSTOM_ORIGINAL}</span><!-- ENDIF -->
|
||||
</dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;"> </dd>
|
||||
<!-- IF modified.S_CUSTOM -->
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;"><label><input type="checkbox" name="no_update[]" value="{modified.FILENAME}" class="radio" /> {L_DO_NOT_UPDATE}</label></dd>
|
||||
<!-- ENDIF -->
|
||||
</dl>
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="modified[{modified.FILENAME}]" value="0" checked="checked" /> {L_MERGE_MODIFICATIONS_OPTION}</label></dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;"><!-- IF not modified.S_BINARY -->[<a href="{modified.U_SHOW_DIFF}" onclick="diff_popup(this.href); return false;">{modified.L_SHOW_DIFF}</a>]<!-- ELSE -->{L_BINARY_FILE}<!-- ENDIF --></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="modified[{modified.FILENAME}]" value="1" /> {L_MERGE_NO_MERGE_NEW_OPTION}</label></dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;"><!-- IF not modified.S_BINARY -->[<a href="{modified.U_VIEW_NO_MERGE_NEW}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_FINAL}</a>]<!-- ELSE --> <!-- ENDIF --></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="modified[{modified.FILENAME}]" value="2" /> {L_MERGE_NO_MERGE_MOD_OPTION}</label></dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;"><!-- IF not modified.S_BINARY -->[<a href="{modified.U_VIEW_NO_MERGE_MOD}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_FINAL}</a>]<!-- ELSE --> <!-- ENDIF --></dd>
|
||||
<dd class="full" style="text-align: {S_CONTENT_FLOW_BEGIN};"><strong>{up_to_date.FILENAME}</strong></dd>
|
||||
</dl>
|
||||
<!-- END up_to_date -->
|
||||
</fieldset>
|
||||
<!-- END modified -->
|
||||
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF .new_conflict -->
|
||||
<h2>{L_FILES_NEW_CONFLICT}</h2>
|
||||
<p>{L_FILES_NEW_CONFLICT_EXPLAIN}</p>
|
||||
|
||||
<fieldset>
|
||||
<legend><img src="{T_IMAGE_PATH}file_new_conflict.gif" alt="{L_STATUS_NEW_CONFLICT}" /></legend>
|
||||
<!-- BEGIN new_conflict -->
|
||||
<dl>
|
||||
<dt style="width: 60%;"><strong><!-- IF new_conflict.DIR_PART -->{new_conflict.DIR_PART}<br /><!-- ENDIF -->{new_conflict.FILE_PART}</strong>
|
||||
<!-- IF new_conflict.S_CUSTOM --><br /><span><em>{L_FILE_USED}{L_COLON} </em>{new_conflict.CUSTOM_ORIGINAL}</span><!-- ENDIF -->
|
||||
</dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;">
|
||||
<!-- IF not new_conflict.S_BINARY -->[<a href="{new_conflict.U_SHOW_DIFF}" onclick="diff_popup(this.href); return false;">{new_conflict.L_SHOW_DIFF}</a>]<!-- ELSE -->{L_BINARY_FILE}<!-- ENDIF -->
|
||||
</dd>
|
||||
<!-- IF new_conflict.S_CUSTOM -->
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;"><label><input type="checkbox" name="no_update[]" value="{new_conflict.FILENAME}" class="radio" /> {L_DO_NOT_UPDATE}</label></dd>
|
||||
<!-- ENDIF -->
|
||||
</dl>
|
||||
<!-- END new_conflict -->
|
||||
</fieldset>
|
||||
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF .conflict -->
|
||||
<h2>{L_FILES_CONFLICT}</h2>
|
||||
<p>{L_FILES_CONFLICT_EXPLAIN}</p>
|
||||
|
||||
<!-- BEGIN conflict -->
|
||||
<fieldset>
|
||||
<legend><img src="{T_IMAGE_PATH}file_conflict.gif" alt="{L_STATUS_CONFLICT}" /></legend>
|
||||
<dl>
|
||||
<dt style="width: 60%;"><strong><!-- IF conflict.DIR_PART -->{conflict.DIR_PART}<br /><!-- ENDIF -->{conflict.FILE_PART}</strong>
|
||||
<!-- IF conflict.S_CUSTOM --><br /><span><em>{L_FILE_USED}{L_COLON} </em>{conflict.CUSTOM_ORIGINAL}</span><!-- ENDIF -->
|
||||
<!-- IF conflict.NUM_CONFLICTS --><br /><span>{L_NUM_CONFLICTS}{L_COLON} {conflict.NUM_CONFLICTS}</span><!-- ENDIF -->
|
||||
</dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;">
|
||||
<!-- IF not conflict.S_BINARY -->[<a href="{conflict.U_SHOW_DIFF}">{L_DOWNLOAD_CONFLICTS}</a>]<br />{L_DOWNLOAD_CONFLICTS_EXPLAIN}
|
||||
<!-- ELSE -->{L_BINARY_FILE}<!-- ENDIF -->
|
||||
</dd>
|
||||
<!-- IF conflict.S_CUSTOM -->
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;"><label><input type="checkbox" name="no_update[]" value="{conflict.FILENAME}" class="radio" /> {L_DO_NOT_UPDATE}</label></dd>
|
||||
<!-- ENDIF -->
|
||||
</dl>
|
||||
<!-- IF conflict.S_BINARY -->
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="conflict[{conflict.FILENAME}]" value="1" checked="checked" /> {L_MERGE_NO_MERGE_NEW_OPTION}</label></dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;"> </dd>
|
||||
</dl>
|
||||
<!-- ELSE -->
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="conflict[{conflict.FILENAME}]" value="3" checked="checked" /> {L_MERGE_NEW_FILE_OPTION}</label></dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;">[<a href="{conflict.U_VIEW_NEW_FILE}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_MODIFIED}</a>]</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="conflict[{conflict.FILENAME}]" value="4" /> {L_MERGE_MOD_FILE_OPTION}</label></dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;">[<a href="{conflict.U_VIEW_MOD_FILE}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_MODIFIED}</a>]</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="conflict[{conflict.FILENAME}]" value="1" /> {L_MERGE_NO_MERGE_NEW_OPTION}</label></dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;">[<a href="{conflict.U_VIEW_NO_MERGE_NEW}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_FINAL}</a>]</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="conflict[{conflict.FILENAME}]" value="2" /> {L_MERGE_NO_MERGE_MOD_OPTION}</label></dt>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 60%;">[<a href="{conflict.U_VIEW_NO_MERGE_MOD}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_FINAL}</a>]</dd>
|
||||
</dl>
|
||||
<!-- ENDIF -->
|
||||
</fieldset>
|
||||
<!-- END conflict -->
|
||||
|
||||
<!-- ENDIF -->
|
||||
|
||||
|
@@ -5,15 +5,17 @@
|
||||
</div>
|
||||
|
||||
<div id="page-footer">
|
||||
<!-- IF S_COPYRIGHT_HTML -->
|
||||
{CREDIT_LINE}
|
||||
<!-- IF TRANSLATION_INFO --><br />{TRANSLATION_INFO}<!-- ENDIF -->
|
||||
<!-- ENDIF -->
|
||||
<div class="copyright">
|
||||
<!-- IF S_COPYRIGHT_HTML -->
|
||||
{CREDIT_LINE}
|
||||
<!-- IF TRANSLATION_INFO --><br />{TRANSLATION_INFO}<!-- ENDIF -->
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF DEBUG_OUTPUT -->
|
||||
<!-- IF S_COPYRIGHT_HTML --><br /><!-- ENDIF -->
|
||||
{DEBUG_OUTPUT}
|
||||
<!-- ENDIF -->
|
||||
<!-- IF DEBUG_OUTPUT -->
|
||||
<!-- IF S_COPYRIGHT_HTML --><br /><!-- ENDIF -->
|
||||
{DEBUG_OUTPUT}
|
||||
<!-- ENDIF -->
|
||||
</div>
|
||||
|
||||
<div id="darkenwrapper" data-ajax-error-title="{L_AJAX_ERROR_TITLE}" data-ajax-error-text="{L_AJAX_ERROR_TEXT}" data-ajax-error-text-abort="{L_AJAX_ERROR_TEXT_ABORT}" data-ajax-error-text-timeout="{L_AJAX_ERROR_TEXT_TIMEOUT}" data-ajax-error-text-parsererror="{L_AJAX_ERROR_TEXT_PARSERERROR}">
|
||||
<div id="darken"> </div>
|
||||
|
@@ -106,7 +106,7 @@ function popup(url, width, height, name)
|
||||
<div id="tabs">
|
||||
<ul>
|
||||
<!-- BEGIN t_block1 -->
|
||||
<li<!-- IF t_block1.S_SELECTED --> class="activetab"<!-- ENDIF -->><a href="{t_block1.U_TITLE}"><span>{t_block1.L_TITLE}</span></a></li>
|
||||
<li class="tab<!-- IF t_block1.S_SELECTED --> activetab<!-- ENDIF -->"><a href="{t_block1.U_TITLE}">{t_block1.L_TITLE}</a></li>
|
||||
<!-- END t_block1 -->
|
||||
</ul>
|
||||
</div>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
|
||||
<a href="#" onclick="jumpto(); return false;" title="{L_JUMP_TO_PAGE}">{PAGE_NUMBER}</a> •
|
||||
<a href="#" onclick="jumpto(); return false;" title="{L_JUMP_TO_PAGE_CLICK}">{PAGE_NUMBER}</a> •
|
||||
<ul>
|
||||
<!-- BEGIN pagination -->
|
||||
<!-- IF pagination.S_IS_PREV --><li><a href="{pagination.PAGE_URL}">{L_PREVIOUS}</a></li>
|
||||
|
@@ -7,6 +7,7 @@ phpbb.alertTime = 100;
|
||||
|
||||
// define a couple constants for keydown functions.
|
||||
var keymap = {
|
||||
TAB: 9,
|
||||
ENTER: 13,
|
||||
ESC: 27
|
||||
};
|
||||
@@ -873,19 +874,6 @@ phpbb.timezonePreselectSelect = function(forceSelector) {
|
||||
}
|
||||
};
|
||||
|
||||
// Toggle notification list
|
||||
$('#notification_list_button').click(function(e) {
|
||||
$('#notification_list').toggle();
|
||||
e.preventDefault();
|
||||
});
|
||||
$('#phpbb').click(function(e) {
|
||||
var target = $(e.target);
|
||||
|
||||
if (!target.is('#notification_list, #notification_list_button') && !target.parents().is('#notification_list, #notification_list_button')) {
|
||||
$('#notification_list').hide();
|
||||
}
|
||||
});
|
||||
|
||||
phpbb.ajaxCallbacks = {};
|
||||
|
||||
/**
|
||||
@@ -1201,7 +1189,11 @@ phpbb.applyCodeEditor = function(textarea) {
|
||||
var key = event.keyCode || event.which;
|
||||
|
||||
// intercept tabs
|
||||
if (key == 9) {
|
||||
if (key == keymap.TAB &&
|
||||
!event.ctrlKey &&
|
||||
!event.shiftKey &&
|
||||
!event.altKey &&
|
||||
!event.metaKey) {
|
||||
if (inTag()) {
|
||||
appendText("\t");
|
||||
event.preventDefault();
|
||||
@@ -1210,7 +1202,7 @@ phpbb.applyCodeEditor = function(textarea) {
|
||||
}
|
||||
|
||||
// intercept new line characters
|
||||
if (key == 13) {
|
||||
if (key == keymap.ENTER) {
|
||||
if (inTag()) {
|
||||
var lastLine = getLastLine(true),
|
||||
code = '' + /^\s*/g.exec(lastLine);
|
||||
@@ -1304,11 +1296,29 @@ phpbb.toggleDropdown = function() {
|
||||
else if ((offset + width + 2) > windowWidth) {
|
||||
$this.css('margin-left', (windowWidth - offset - width - 2) + 'px');
|
||||
}
|
||||
|
||||
// Check whether the vertical scrollbar is present.
|
||||
$this.toggleClass('dropdown-nonscroll', this.scrollHeight === $this.innerHeight());
|
||||
|
||||
});
|
||||
var freeSpace = parent.offset().left - 4;
|
||||
|
||||
if (direction == 'left') {
|
||||
options.dropdown.css('margin-left', '-' + freeSpace + 'px');
|
||||
|
||||
// Try to position the notification dropdown correctly in RTL-responsive mode
|
||||
if (options.dropdown.hasClass('dropdown-extended')) {
|
||||
var contentWidth,
|
||||
fullFreeSpace = freeSpace + parent.outerWidth();
|
||||
|
||||
options.dropdown.find('.dropdown-contents').each(function() {
|
||||
contentWidth = parseInt($(this).outerWidth());
|
||||
$(this).css({marginLeft: 0, left: 0});
|
||||
});
|
||||
|
||||
var maxOffset = Math.min(contentWidth, fullFreeSpace) + 'px';
|
||||
options.dropdown.css({'width': maxOffset, 'margin-left': '-' + maxOffset});
|
||||
}
|
||||
} else {
|
||||
options.dropdown.css('margin-right', '-' + (windowWidth + freeSpace) + 'px');
|
||||
}
|
||||
@@ -1511,11 +1521,37 @@ phpbb.getFunctionByName = function (functionName) {
|
||||
};
|
||||
|
||||
/**
|
||||
* Apply code editor to all textarea elements with data-bbcode attribute
|
||||
* Register page dropdowns.
|
||||
*/
|
||||
$(document).ready(function() {
|
||||
$('textarea[data-bbcode]').each(function() {
|
||||
phpbb.applyCodeEditor(this);
|
||||
phpbb.registerPageDropdowns = function() {
|
||||
$('body').find('.dropdown-container').each(function() {
|
||||
var $this = $(this),
|
||||
trigger = $this.find('.dropdown-trigger:first'),
|
||||
contents = $this.find('.dropdown'),
|
||||
options = {
|
||||
direction: 'auto',
|
||||
verticalDirection: 'auto'
|
||||
},
|
||||
data;
|
||||
|
||||
if (!trigger.length) {
|
||||
data = $this.attr('data-dropdown-trigger');
|
||||
trigger = data ? $this.children(data) : $this.children('a:first');
|
||||
}
|
||||
|
||||
if (!contents.length) {
|
||||
data = $this.attr('data-dropdown-contents');
|
||||
contents = data ? $this.children(data) : $this.children('div:first');
|
||||
}
|
||||
|
||||
if (!trigger.length || !contents.length) return;
|
||||
|
||||
if ($this.hasClass('dropdown-up')) options.verticalDirection = 'up';
|
||||
if ($this.hasClass('dropdown-down')) options.verticalDirection = 'down';
|
||||
if ($this.hasClass('dropdown-left')) options.direction = 'left';
|
||||
if ($this.hasClass('dropdown-right')) options.direction = 'right';
|
||||
|
||||
phpbb.registerDropdown(trigger, contents, options);
|
||||
});
|
||||
|
||||
// Hide active dropdowns when click event happens outside
|
||||
@@ -1525,6 +1561,17 @@ $(document).ready(function() {
|
||||
$(phpbb.dropdownHandles).each(phpbb.toggleDropdown);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply code editor to all textarea elements with data-bbcode attribute
|
||||
*/
|
||||
$(document).ready(function() {
|
||||
$('textarea[data-bbcode]').each(function() {
|
||||
phpbb.applyCodeEditor(this);
|
||||
});
|
||||
|
||||
phpbb.registerPageDropdowns();
|
||||
|
||||
$('#color_palette_placeholder').each(function() {
|
||||
phpbb.registerPalette($(this));
|
||||
|
@@ -586,6 +586,11 @@ uploader.bind('FilesAdded', function(up, files) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Switch the active tab if the style supports it
|
||||
if (typeof activateSubPanel == 'function') {
|
||||
activateSubPanel('attach-panel');
|
||||
}
|
||||
|
||||
// Show the file list if there aren't any files currently.
|
||||
if (!$('#file-list-container').is(':visible')) {
|
||||
$('#file-list-container').show(100);
|
||||
|
2
phpBB/assets/plupload/plupload.full.min.js
vendored
2
phpBB/assets/plupload/plupload.full.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -22,23 +22,33 @@ define('IN_PHPBB', true);
|
||||
$phpbb_root_path = __DIR__ . '/../';
|
||||
$phpEx = substr(strrchr(__FILE__, '.'), 1);
|
||||
require($phpbb_root_path . 'includes/startup.' . $phpEx);
|
||||
require($phpbb_root_path . 'config.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/constants.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/functions.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/functions_container.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx);
|
||||
require($phpbb_root_path . 'phpbb/class_loader.' . $phpEx);
|
||||
|
||||
$phpbb_class_loader = new \phpbb\class_loader('phpbb\\', "{$phpbb_root_path}phpbb/", $phpEx);
|
||||
$phpbb_class_loader->register();
|
||||
|
||||
$phpbb_config_php_file = new \phpbb\config_php_file($phpbb_root_path, $phpEx);
|
||||
extract($phpbb_config_php_file->get_all());
|
||||
|
||||
require($phpbb_root_path . 'includes/constants.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/functions.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx);
|
||||
|
||||
$phpbb_class_loader_ext = new \phpbb\class_loader('\\', "{$phpbb_root_path}ext/", $phpEx);
|
||||
$phpbb_class_loader_ext->register();
|
||||
|
||||
$phpbb_container = phpbb_create_update_container($phpbb_root_path, $phpEx, "$phpbb_root_path/config");
|
||||
$phpbb_container_builder = new \phpbb\di\container_builder($phpbb_config_php_file, $phpbb_root_path, $phpEx);
|
||||
$phpbb_container_builder->set_use_extensions(false);
|
||||
$phpbb_container_builder->set_dump_container(false);
|
||||
|
||||
$phpbb_container = $phpbb_container_builder->get_container();
|
||||
$phpbb_container->get('request')->enable_super_globals();
|
||||
require($phpbb_root_path . 'includes/compatibility_globals.' . $phpEx);
|
||||
|
||||
$application = new \phpbb\console\application('phpBB Console', PHPBB_VERSION);
|
||||
$user = $phpbb_container->get('user');
|
||||
$user->add_lang('acp/common');
|
||||
|
||||
$application = new \phpbb\console\application('phpBB Console', PHPBB_VERSION, $user);
|
||||
$application->register_container_commands($phpbb_container);
|
||||
$application->run();
|
||||
|
@@ -21,11 +21,13 @@ if (!defined('IN_PHPBB'))
|
||||
}
|
||||
|
||||
require($phpbb_root_path . 'includes/startup.' . $phpEx);
|
||||
require($phpbb_root_path . 'phpbb/class_loader.' . $phpEx);
|
||||
|
||||
if (file_exists($phpbb_root_path . 'config.' . $phpEx))
|
||||
{
|
||||
require($phpbb_root_path . 'config.' . $phpEx);
|
||||
}
|
||||
$phpbb_class_loader = new \phpbb\class_loader('phpbb\\', "{$phpbb_root_path}phpbb/", $phpEx);
|
||||
$phpbb_class_loader->register();
|
||||
|
||||
$phpbb_config_php_file = new \phpbb\config_php_file($phpbb_root_path, $phpEx);
|
||||
extract($phpbb_config_php_file->get_all());
|
||||
|
||||
if (!defined('PHPBB_INSTALLED'))
|
||||
{
|
||||
@@ -76,11 +78,8 @@ $phpbb_adm_relative_path = (isset($phpbb_adm_relative_path)) ? $phpbb_adm_relati
|
||||
$phpbb_admin_path = (defined('PHPBB_ADMIN_PATH')) ? PHPBB_ADMIN_PATH : $phpbb_root_path . $phpbb_adm_relative_path;
|
||||
|
||||
// Include files
|
||||
require($phpbb_root_path . 'phpbb/class_loader.' . $phpEx);
|
||||
|
||||
require($phpbb_root_path . 'includes/functions.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/functions_content.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/functions_container.' . $phpEx);
|
||||
include($phpbb_root_path . 'includes/functions_compatibility.' . $phpEx);
|
||||
|
||||
require($phpbb_root_path . 'includes/constants.' . $phpEx);
|
||||
@@ -89,14 +88,14 @@ require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx);
|
||||
// Set PHP error handler to ours
|
||||
set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler');
|
||||
|
||||
// Setup class loader first
|
||||
$phpbb_class_loader = new \phpbb\class_loader('phpbb\\', "{$phpbb_root_path}phpbb/", $phpEx);
|
||||
$phpbb_class_loader->register();
|
||||
$phpbb_class_loader_ext = new \phpbb\class_loader('\\', "{$phpbb_root_path}ext/", $phpEx);
|
||||
$phpbb_class_loader_ext->register();
|
||||
|
||||
phpbb_load_extensions_autoloaders($phpbb_root_path);
|
||||
|
||||
// Set up container
|
||||
$phpbb_container = phpbb_create_default_container($phpbb_root_path, $phpEx);
|
||||
$phpbb_container_builder = new \phpbb\di\container_builder($phpbb_config_php_file, $phpbb_root_path, $phpEx);
|
||||
$phpbb_container = $phpbb_container_builder->get_container();
|
||||
|
||||
$phpbb_class_loader->set_cache($phpbb_container->get('cache.driver'));
|
||||
$phpbb_class_loader_ext->set_cache($phpbb_container->get('cache.driver'));
|
||||
|
@@ -15,11 +15,20 @@
|
||||
"twig/twig": "1.13.*"
|
||||
},
|
||||
"require-dev": {
|
||||
"behat/mink": "1.4.*",
|
||||
"behat/mink-goutte-driver": "1.0.*",
|
||||
"fabpot/goutte": "1.0.*",
|
||||
"phpunit/dbunit": "1.3.*",
|
||||
"phpunit/phpunit": "4.1.*",
|
||||
"phing/phing": "2.4.*",
|
||||
"sami/sami": "1.*",
|
||||
"squizlabs/php_codesniffer": "1.*"
|
||||
"squizlabs/php_codesniffer": "1.*",
|
||||
"symfony/browser-kit": "2.3.*",
|
||||
"symfony/debug": "2.3.*",
|
||||
"symfony/dom-crawler": "2.3.*",
|
||||
"symfony/filesystem": "2.3.*",
|
||||
"symfony/finder": "2.3.*",
|
||||
"symfony/http-foundation": "2.3.*",
|
||||
"symfony/process": "2.3.*"
|
||||
}
|
||||
}
|
||||
|
323
phpBB/composer.lock
generated
323
phpBB/composer.lock
generated
@@ -3,7 +3,7 @@
|
||||
"This file locks the dependencies of your project to a known state",
|
||||
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
|
||||
],
|
||||
"hash": "be323c0a1b5baeb83934238033e079ec",
|
||||
"hash": "dcd46c1373cfc4dacd2e1f8a79da0b91",
|
||||
"packages": [
|
||||
{
|
||||
"name": "lusitanian/oauth",
|
||||
@@ -108,17 +108,17 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/config",
|
||||
"version": "v2.3.12",
|
||||
"version": "v2.3.16",
|
||||
"target-dir": "Symfony/Component/Config",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/Config.git",
|
||||
"reference": "91faa2d4944d0c8a94d5b73cb7ccfb219aee9d21"
|
||||
"reference": "259722b5f2e87d3f487630abfd40f922cf2f6900"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/Config/zipball/91faa2d4944d0c8a94d5b73cb7ccfb219aee9d21",
|
||||
"reference": "91faa2d4944d0c8a94d5b73cb7ccfb219aee9d21",
|
||||
"url": "https://api.github.com/repos/symfony/Config/zipball/259722b5f2e87d3f487630abfd40f922cf2f6900",
|
||||
"reference": "259722b5f2e87d3f487630abfd40f922cf2f6900",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -154,21 +154,21 @@
|
||||
],
|
||||
"description": "Symfony Config Component",
|
||||
"homepage": "http://symfony.com",
|
||||
"time": "2014-03-31 10:15:50"
|
||||
"time": "2014-04-22 08:09:28"
|
||||
},
|
||||
{
|
||||
"name": "symfony/console",
|
||||
"version": "v2.3.12",
|
||||
"version": "v2.3.16",
|
||||
"target-dir": "Symfony/Component/Console",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/Console.git",
|
||||
"reference": "df17996d37eb113a5675ca4cc2ac45f4fc057cb7"
|
||||
"reference": "c6c5a354a9945a5e9a9a6a495ca19558eb8639e9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/Console/zipball/df17996d37eb113a5675ca4cc2ac45f4fc057cb7",
|
||||
"reference": "df17996d37eb113a5675ca4cc2ac45f4fc057cb7",
|
||||
"url": "https://api.github.com/repos/symfony/Console/zipball/c6c5a354a9945a5e9a9a6a495ca19558eb8639e9",
|
||||
"reference": "c6c5a354a9945a5e9a9a6a495ca19558eb8639e9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -209,21 +209,21 @@
|
||||
],
|
||||
"description": "Symfony Console Component",
|
||||
"homepage": "http://symfony.com",
|
||||
"time": "2014-03-01 17:25:29"
|
||||
"time": "2014-05-14 13:35:53"
|
||||
},
|
||||
{
|
||||
"name": "symfony/debug",
|
||||
"version": "v2.4.4",
|
||||
"version": "v2.3.16",
|
||||
"target-dir": "Symfony/Component/Debug",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/Debug.git",
|
||||
"reference": "6a8eb9aba50595014fef52d6b4d99b31dfaa6f02"
|
||||
"reference": "ca764f8af9cc4ba5d81b598c1b18b30db5508e18"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/Debug/zipball/6a8eb9aba50595014fef52d6b4d99b31dfaa6f02",
|
||||
"reference": "6a8eb9aba50595014fef52d6b4d99b31dfaa6f02",
|
||||
"url": "https://api.github.com/repos/symfony/Debug/zipball/ca764f8af9cc4ba5d81b598c1b18b30db5508e18",
|
||||
"reference": "ca764f8af9cc4ba5d81b598c1b18b30db5508e18",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -234,13 +234,14 @@
|
||||
"symfony/http-kernel": "~2.1"
|
||||
},
|
||||
"suggest": {
|
||||
"symfony/class-loader": "",
|
||||
"symfony/http-foundation": "",
|
||||
"symfony/http-kernel": ""
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.4-dev"
|
||||
"dev-master": "2.3-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -266,21 +267,21 @@
|
||||
],
|
||||
"description": "Symfony Debug Component",
|
||||
"homepage": "http://symfony.com",
|
||||
"time": "2014-04-16 10:34:42"
|
||||
"time": "2014-04-29 19:42:43"
|
||||
},
|
||||
{
|
||||
"name": "symfony/dependency-injection",
|
||||
"version": "v2.3.12",
|
||||
"version": "v2.3.16",
|
||||
"target-dir": "Symfony/Component/DependencyInjection",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/DependencyInjection.git",
|
||||
"reference": "41e9e2078e8edf261c11be478300c8fcddb64e30"
|
||||
"reference": "5ebd813eac59b4051705a2e29e32f211a966b6ca"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/41e9e2078e8edf261c11be478300c8fcddb64e30",
|
||||
"reference": "41e9e2078e8edf261c11be478300c8fcddb64e30",
|
||||
"url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/5ebd813eac59b4051705a2e29e32f211a966b6ca",
|
||||
"reference": "5ebd813eac59b4051705a2e29e32f211a966b6ca",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -324,21 +325,21 @@
|
||||
],
|
||||
"description": "Symfony DependencyInjection Component",
|
||||
"homepage": "http://symfony.com",
|
||||
"time": "2014-03-27 18:14:33"
|
||||
"time": "2014-05-02 22:42:57"
|
||||
},
|
||||
{
|
||||
"name": "symfony/event-dispatcher",
|
||||
"version": "v2.3.12",
|
||||
"version": "v2.3.16",
|
||||
"target-dir": "Symfony/Component/EventDispatcher",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/EventDispatcher.git",
|
||||
"reference": "15645237c6ff70e74a28e8836362d82492765055"
|
||||
"reference": "cb7cd38c081507d10997553c4c522956a4d2afab"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/15645237c6ff70e74a28e8836362d82492765055",
|
||||
"reference": "15645237c6ff70e74a28e8836362d82492765055",
|
||||
"url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/cb7cd38c081507d10997553c4c522956a4d2afab",
|
||||
"reference": "cb7cd38c081507d10997553c4c522956a4d2afab",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -380,21 +381,21 @@
|
||||
],
|
||||
"description": "Symfony EventDispatcher Component",
|
||||
"homepage": "http://symfony.com",
|
||||
"time": "2014-02-11 10:29:24"
|
||||
"time": "2014-04-16 10:30:19"
|
||||
},
|
||||
{
|
||||
"name": "symfony/filesystem",
|
||||
"version": "v2.4.4",
|
||||
"version": "v2.3.16",
|
||||
"target-dir": "Symfony/Component/Filesystem",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/Filesystem.git",
|
||||
"reference": "a3af8294bcce4a7c1b2892363b0c9d8109affad4"
|
||||
"reference": "69e476c4db31c43ab7ab797adc5fc73d20aa5571"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/Filesystem/zipball/a3af8294bcce4a7c1b2892363b0c9d8109affad4",
|
||||
"reference": "a3af8294bcce4a7c1b2892363b0c9d8109affad4",
|
||||
"url": "https://api.github.com/repos/symfony/Filesystem/zipball/69e476c4db31c43ab7ab797adc5fc73d20aa5571",
|
||||
"reference": "69e476c4db31c43ab7ab797adc5fc73d20aa5571",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -403,7 +404,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.4-dev"
|
||||
"dev-master": "2.3-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -429,33 +430,30 @@
|
||||
],
|
||||
"description": "Symfony Filesystem Component",
|
||||
"homepage": "http://symfony.com",
|
||||
"time": "2014-04-16 10:34:31"
|
||||
"time": "2014-04-16 10:30:19"
|
||||
},
|
||||
{
|
||||
"name": "symfony/http-foundation",
|
||||
"version": "v2.4.4",
|
||||
"version": "v2.3.16",
|
||||
"target-dir": "Symfony/Component/HttpFoundation",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/HttpFoundation.git",
|
||||
"reference": "22c4dee84271ad0cd08d19f26d89f2878e11159b"
|
||||
"reference": "ad7891d4dfe221c5a9edca64b71bdb500f5b026a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/22c4dee84271ad0cd08d19f26d89f2878e11159b",
|
||||
"reference": "22c4dee84271ad0cd08d19f26d89f2878e11159b",
|
||||
"url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/ad7891d4dfe221c5a9edca64b71bdb500f5b026a",
|
||||
"reference": "ad7891d4dfe221c5a9edca64b71bdb500f5b026a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/expression-language": "~2.4"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.4-dev"
|
||||
"dev-master": "2.3-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -484,21 +482,21 @@
|
||||
],
|
||||
"description": "Symfony HttpFoundation Component",
|
||||
"homepage": "http://symfony.com",
|
||||
"time": "2014-04-18 21:02:05"
|
||||
"time": "2014-05-22 16:20:26"
|
||||
},
|
||||
{
|
||||
"name": "symfony/http-kernel",
|
||||
"version": "v2.3.12",
|
||||
"version": "v2.3.16",
|
||||
"target-dir": "Symfony/Component/HttpKernel",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/HttpKernel.git",
|
||||
"reference": "48d61b3622ca35dd924b167441a9810ad55906ce"
|
||||
"reference": "d8c00747f592183692afaacf622c444c36092613"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/HttpKernel/zipball/48d61b3622ca35dd924b167441a9810ad55906ce",
|
||||
"reference": "48d61b3622ca35dd924b167441a9810ad55906ce",
|
||||
"url": "https://api.github.com/repos/symfony/HttpKernel/zipball/d8c00747f592183692afaacf622c444c36092613",
|
||||
"reference": "d8c00747f592183692afaacf622c444c36092613",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -557,21 +555,21 @@
|
||||
],
|
||||
"description": "Symfony HttpKernel Component",
|
||||
"homepage": "http://symfony.com",
|
||||
"time": "2014-04-03 05:42:39"
|
||||
"time": "2014-05-31 02:04:21"
|
||||
},
|
||||
{
|
||||
"name": "symfony/routing",
|
||||
"version": "v2.3.12",
|
||||
"version": "v2.3.16",
|
||||
"target-dir": "Symfony/Component/Routing",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/Routing.git",
|
||||
"reference": "08afcafd9af22a24a8055669f85d63b863c4711b"
|
||||
"reference": "6e4c9024a04340b83e456a1a24597dba066dcdc9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/Routing/zipball/08afcafd9af22a24a8055669f85d63b863c4711b",
|
||||
"reference": "08afcafd9af22a24a8055669f85d63b863c4711b",
|
||||
"url": "https://api.github.com/repos/symfony/Routing/zipball/6e4c9024a04340b83e456a1a24597dba066dcdc9",
|
||||
"reference": "6e4c9024a04340b83e456a1a24597dba066dcdc9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -617,21 +615,21 @@
|
||||
],
|
||||
"description": "Symfony Routing Component",
|
||||
"homepage": "http://symfony.com",
|
||||
"time": "2014-03-28 10:34:27"
|
||||
"time": "2014-04-23 13:35:47"
|
||||
},
|
||||
{
|
||||
"name": "symfony/yaml",
|
||||
"version": "v2.3.12",
|
||||
"version": "v2.3.16",
|
||||
"target-dir": "Symfony/Component/Yaml",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/Yaml.git",
|
||||
"reference": "3acf34f6993db3d873fa77ac2cb6e595db00b88d"
|
||||
"reference": "2e257c292cfce88bf6c894a03d0fe8d782055aee"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/Yaml/zipball/3acf34f6993db3d873fa77ac2cb6e595db00b88d",
|
||||
"reference": "3acf34f6993db3d873fa77ac2cb6e595db00b88d",
|
||||
"url": "https://api.github.com/repos/symfony/Yaml/zipball/2e257c292cfce88bf6c894a03d0fe8d782055aee",
|
||||
"reference": "2e257c292cfce88bf6c894a03d0fe8d782055aee",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -666,7 +664,7 @@
|
||||
],
|
||||
"description": "Symfony Yaml Component",
|
||||
"homepage": "http://symfony.com",
|
||||
"time": "2014-03-04 16:04:39"
|
||||
"time": "2014-05-12 09:13:35"
|
||||
},
|
||||
{
|
||||
"name": "twig/twig",
|
||||
@@ -722,6 +720,167 @@
|
||||
}
|
||||
],
|
||||
"packages-dev": [
|
||||
{
|
||||
"name": "behat/mink",
|
||||
"version": "v1.4.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Behat/Mink.git",
|
||||
"reference": "0817070a6e2ec9f475fad9bfb81a962c462eb934"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Behat/Mink/zipball/0817070a6e2ec9f475fad9bfb81a962c462eb934",
|
||||
"reference": "0817070a6e2ec9f475fad9bfb81a962c462eb934",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.1",
|
||||
"symfony/css-selector": ">=2.0,<2.4-dev"
|
||||
},
|
||||
"suggest": {
|
||||
"behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)",
|
||||
"behat/mink-goutte-driver": "fast headless driver for any app without JS emulation",
|
||||
"behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)",
|
||||
"behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-develop": "1.4.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Behat\\Mink": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Konstantin Kudryashov",
|
||||
"email": "ever.zet@gmail.com",
|
||||
"homepage": "http://everzet.com"
|
||||
}
|
||||
],
|
||||
"description": "Web acceptance testing framework for PHP 5.3",
|
||||
"homepage": "http://mink.behat.org/",
|
||||
"keywords": [
|
||||
"browser",
|
||||
"testing",
|
||||
"web"
|
||||
],
|
||||
"time": "2013-03-02 15:53:18"
|
||||
},
|
||||
{
|
||||
"name": "behat/mink-browserkit-driver",
|
||||
"version": "v1.0.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Behat/MinkBrowserKitDriver.git",
|
||||
"reference": "f2771b5fc4dbc233859addf37a7d150852f78418"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Behat/MinkBrowserKitDriver/zipball/f2771b5fc4dbc233859addf37a7d150852f78418",
|
||||
"reference": "f2771b5fc4dbc233859addf37a7d150852f78418",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"behat/mink": "~1.4.3",
|
||||
"php": ">=5.3.1",
|
||||
"symfony/browser-kit": "~2.0",
|
||||
"symfony/dom-crawler": "~2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"silex/silex": "@dev"
|
||||
},
|
||||
"type": "mink-driver",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Behat\\Mink\\Driver": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Konstantin Kudryashov",
|
||||
"email": "ever.zet@gmail.com",
|
||||
"homepage": "http://everzet.com"
|
||||
}
|
||||
],
|
||||
"description": "Symfony2 BrowserKit driver for Mink framework",
|
||||
"homepage": "http://mink.behat.org/",
|
||||
"keywords": [
|
||||
"Mink",
|
||||
"Symfony2",
|
||||
"browser",
|
||||
"testing"
|
||||
],
|
||||
"time": "2013-04-13 12:17:15"
|
||||
},
|
||||
{
|
||||
"name": "behat/mink-goutte-driver",
|
||||
"version": "v1.0.9",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Behat/MinkGoutteDriver.git",
|
||||
"reference": "fa1b073b48761464feb0b05e6825da44b20118d8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Behat/MinkGoutteDriver/zipball/fa1b073b48761464feb0b05e6825da44b20118d8",
|
||||
"reference": "fa1b073b48761464feb0b05e6825da44b20118d8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"behat/mink-browserkit-driver": ">=1.0.5,<1.2.0",
|
||||
"fabpot/goutte": "~1.0.1",
|
||||
"php": ">=5.3.1"
|
||||
},
|
||||
"type": "mink-driver",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Behat\\Mink\\Driver": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Konstantin Kudryashov",
|
||||
"email": "ever.zet@gmail.com",
|
||||
"homepage": "http://everzet.com"
|
||||
}
|
||||
],
|
||||
"description": "Goutte driver for Mink framework",
|
||||
"homepage": "http://mink.behat.org/",
|
||||
"keywords": [
|
||||
"browser",
|
||||
"goutte",
|
||||
"headless",
|
||||
"testing"
|
||||
],
|
||||
"time": "2013-07-03 18:43:54"
|
||||
},
|
||||
{
|
||||
"name": "fabpot/goutte",
|
||||
"version": "v1.0.3",
|
||||
@@ -2009,17 +2168,17 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/browser-kit",
|
||||
"version": "v2.3.4",
|
||||
"version": "v2.3.16",
|
||||
"target-dir": "Symfony/Component/BrowserKit",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/BrowserKit.git",
|
||||
"reference": "2639dc4eec81f92760e05396a93bb78000b4f5ca"
|
||||
"reference": "bc6cb0fe5196ecfe183483791928ed525ac41728"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/BrowserKit/zipball/2639dc4eec81f92760e05396a93bb78000b4f5ca",
|
||||
"reference": "2639dc4eec81f92760e05396a93bb78000b4f5ca",
|
||||
"url": "https://api.github.com/repos/symfony/BrowserKit/zipball/bc6cb0fe5196ecfe183483791928ed525ac41728",
|
||||
"reference": "bc6cb0fe5196ecfe183483791928ed525ac41728",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2062,21 +2221,21 @@
|
||||
],
|
||||
"description": "Symfony BrowserKit Component",
|
||||
"homepage": "http://symfony.com",
|
||||
"time": "2013-07-21 12:12:18"
|
||||
"time": "2014-04-22 14:58:51"
|
||||
},
|
||||
{
|
||||
"name": "symfony/css-selector",
|
||||
"version": "v2.3.4",
|
||||
"version": "v2.3.16",
|
||||
"target-dir": "Symfony/Component/CssSelector",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/CssSelector.git",
|
||||
"reference": "885544201cb24e79754da1dbd61bd779c2e4353e"
|
||||
"reference": "2ff53e8a7870b453836e879b083b971d455e174d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/CssSelector/zipball/885544201cb24e79754da1dbd61bd779c2e4353e",
|
||||
"reference": "885544201cb24e79754da1dbd61bd779c2e4353e",
|
||||
"url": "https://api.github.com/repos/symfony/CssSelector/zipball/2ff53e8a7870b453836e879b083b971d455e174d",
|
||||
"reference": "2ff53e8a7870b453836e879b083b971d455e174d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2115,21 +2274,21 @@
|
||||
],
|
||||
"description": "Symfony CssSelector Component",
|
||||
"homepage": "http://symfony.com",
|
||||
"time": "2013-07-21 12:12:18"
|
||||
"time": "2014-05-12 09:13:35"
|
||||
},
|
||||
{
|
||||
"name": "symfony/dom-crawler",
|
||||
"version": "v2.3.4",
|
||||
"version": "v2.3.16",
|
||||
"target-dir": "Symfony/Component/DomCrawler",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/DomCrawler.git",
|
||||
"reference": "e05e07fe8958a304b5e135f8e65d4ae6148cf59b"
|
||||
"reference": "5dd259d7842480fa7c5d4a45c4f911bd6fb60bc8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/DomCrawler/zipball/e05e07fe8958a304b5e135f8e65d4ae6148cf59b",
|
||||
"reference": "e05e07fe8958a304b5e135f8e65d4ae6148cf59b",
|
||||
"url": "https://api.github.com/repos/symfony/DomCrawler/zipball/5dd259d7842480fa7c5d4a45c4f911bd6fb60bc8",
|
||||
"reference": "5dd259d7842480fa7c5d4a45c4f911bd6fb60bc8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2170,21 +2329,21 @@
|
||||
],
|
||||
"description": "Symfony DomCrawler Component",
|
||||
"homepage": "http://symfony.com",
|
||||
"time": "2013-07-21 12:12:18"
|
||||
"time": "2014-05-26 22:15:18"
|
||||
},
|
||||
{
|
||||
"name": "symfony/finder",
|
||||
"version": "v2.3.4",
|
||||
"version": "v2.3.16",
|
||||
"target-dir": "Symfony/Component/Finder",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/Finder.git",
|
||||
"reference": "4a0fee5b86f5bbd9dfdc11ec124eba2915737ce1"
|
||||
"reference": "32949721cc76afd75e4ac60d14ac3cf55b10a768"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/Finder/zipball/4a0fee5b86f5bbd9dfdc11ec124eba2915737ce1",
|
||||
"reference": "4a0fee5b86f5bbd9dfdc11ec124eba2915737ce1",
|
||||
"url": "https://api.github.com/repos/symfony/Finder/zipball/32949721cc76afd75e4ac60d14ac3cf55b10a768",
|
||||
"reference": "32949721cc76afd75e4ac60d14ac3cf55b10a768",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2219,21 +2378,21 @@
|
||||
],
|
||||
"description": "Symfony Finder Component",
|
||||
"homepage": "http://symfony.com",
|
||||
"time": "2013-08-13 20:18:00"
|
||||
"time": "2014-05-22 13:42:36"
|
||||
},
|
||||
{
|
||||
"name": "symfony/process",
|
||||
"version": "v2.3.4",
|
||||
"version": "v2.3.16",
|
||||
"target-dir": "Symfony/Component/Process",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/Process.git",
|
||||
"reference": "1e91553e1cedd0b8fb1da6ea4f89b02e21713d5b"
|
||||
"reference": "2cd7d075df6cb0d564c069a66408b3877c07d4e3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/Process/zipball/1e91553e1cedd0b8fb1da6ea4f89b02e21713d5b",
|
||||
"reference": "1e91553e1cedd0b8fb1da6ea4f89b02e21713d5b",
|
||||
"url": "https://api.github.com/repos/symfony/Process/zipball/2cd7d075df6cb0d564c069a66408b3877c07d4e3",
|
||||
"reference": "2cd7d075df6cb0d564c069a66408b3877c07d4e3",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2268,7 +2427,7 @@
|
||||
],
|
||||
"description": "Symfony Process Component",
|
||||
"homepage": "http://symfony.com",
|
||||
"time": "2013-08-22 06:42:25"
|
||||
"time": "2014-05-17 21:49:26"
|
||||
}
|
||||
],
|
||||
"aliases": [
|
||||
|
@@ -1,8 +1,9 @@
|
||||
services:
|
||||
auth.provider_collection:
|
||||
class: phpbb\di\service_collection
|
||||
class: phpbb\auth\provider_collection
|
||||
arguments:
|
||||
- @service_container
|
||||
- @config
|
||||
tags:
|
||||
- { name: service_collection, tag: auth.provider }
|
||||
auth.provider.db:
|
||||
|
@@ -46,6 +46,23 @@ services:
|
||||
tags:
|
||||
- { name: console.command }
|
||||
|
||||
console.command.cron.list:
|
||||
class: phpbb\console\command\cron\cron_list
|
||||
arguments:
|
||||
- @cron.manager
|
||||
- @user
|
||||
tags:
|
||||
- { name: console.command }
|
||||
|
||||
console.command.cron.run:
|
||||
class: phpbb\console\command\cron\run
|
||||
arguments:
|
||||
- @cron.manager
|
||||
- @cron.lock_db
|
||||
- @user
|
||||
tags:
|
||||
- { name: console.command }
|
||||
|
||||
console.command.db.migrate:
|
||||
class: phpbb\console\command\db\migrate
|
||||
arguments:
|
||||
@@ -58,6 +75,13 @@ services:
|
||||
tags:
|
||||
- { name: console.command }
|
||||
|
||||
console.command.dev.migration_tips:
|
||||
class: phpbb\console\command\dev\migration_tips
|
||||
arguments:
|
||||
- @ext.manager
|
||||
tags:
|
||||
- { name: console.command }
|
||||
|
||||
console.command.extension.disable:
|
||||
class: phpbb\console\command\extension\disable
|
||||
arguments:
|
||||
|
@@ -29,6 +29,13 @@ services:
|
||||
tags:
|
||||
- { name: migrator.tool }
|
||||
|
||||
migrator.tool.config_text:
|
||||
class: phpbb\db\migration\tool\config_text
|
||||
arguments:
|
||||
- @config_text
|
||||
tags:
|
||||
- { name: migrator.tool }
|
||||
|
||||
migrator.tool.module:
|
||||
class: phpbb\db\migration\tool\module
|
||||
arguments:
|
||||
|
@@ -22,6 +22,14 @@ services:
|
||||
tags:
|
||||
- { name: passwords.driver }
|
||||
|
||||
passwords.driver.bcrypt_wcf2:
|
||||
class: phpbb\passwords\driver\bcrypt_wcf2
|
||||
arguments:
|
||||
- @passwords.driver.bcrypt
|
||||
- @passwords.driver_helper
|
||||
tags:
|
||||
- { name: passwords.driver }
|
||||
|
||||
passwords.driver.salted_md5:
|
||||
class: phpbb\passwords\driver\salted_md5
|
||||
arguments:
|
||||
@@ -38,6 +46,64 @@ services:
|
||||
tags:
|
||||
- { name: passwords.driver }
|
||||
|
||||
passwords.driver.convert_password:
|
||||
class: phpbb\passwords\driver\convert_password
|
||||
arguments:
|
||||
- @config
|
||||
- @passwords.driver_helper
|
||||
tags:
|
||||
- { name: passwords.driver }
|
||||
|
||||
passwords.driver.sha1_smf:
|
||||
class: phpbb\passwords\driver\sha1_smf
|
||||
arguments:
|
||||
- @config
|
||||
- @passwords.driver_helper
|
||||
tags:
|
||||
- { name: passwords.driver }
|
||||
|
||||
passwords.driver.sha1_wcf1:
|
||||
class: phpbb\passwords\driver\sha1_wcf1
|
||||
arguments:
|
||||
- @config
|
||||
- @passwords.driver_helper
|
||||
tags:
|
||||
- { name: passwords.driver }
|
||||
|
||||
passwords.driver.sha1:
|
||||
class: phpbb\passwords\driver\sha1
|
||||
arguments:
|
||||
- @config
|
||||
- @passwords.driver_helper
|
||||
tags:
|
||||
- { name: passwords.driver }
|
||||
|
||||
passwords.driver.md5_phpbb2:
|
||||
class: phpbb\passwords\driver\md5_phpbb2
|
||||
arguments:
|
||||
- @request
|
||||
- @passwords.driver.salted_md5
|
||||
- %core.root_path%
|
||||
- %core.php_ext%
|
||||
tags:
|
||||
- { name: passwords.driver }
|
||||
|
||||
passwords.driver.md5_mybb:
|
||||
class: phpbb\passwords\driver\md5_mybb
|
||||
arguments:
|
||||
- @config
|
||||
- @passwords.driver_helper
|
||||
tags:
|
||||
- { name: passwords.driver }
|
||||
|
||||
passwords.driver.md5_vb:
|
||||
class: phpbb\passwords\driver\md5_vb
|
||||
arguments:
|
||||
- @config
|
||||
- @passwords.driver_helper
|
||||
tags:
|
||||
- { name: passwords.driver }
|
||||
|
||||
passwords.driver_collection:
|
||||
class: phpbb\di\service_collection
|
||||
arguments:
|
||||
|
@@ -55,6 +55,15 @@ services:
|
||||
tags:
|
||||
- { name: profilefield.type }
|
||||
|
||||
profilefields.type.googleplus:
|
||||
class: phpbb\profilefields\type\type_googleplus
|
||||
arguments:
|
||||
- @request
|
||||
- @template
|
||||
- @user
|
||||
tags:
|
||||
- { name: profilefield.type }
|
||||
|
||||
profilefields.type.int:
|
||||
class: phpbb\profilefields\type\type_int
|
||||
arguments:
|
||||
|
@@ -39,9 +39,6 @@ services:
|
||||
cache.driver:
|
||||
class: %cache.driver.class%
|
||||
|
||||
cache.driver.install:
|
||||
class: phpbb\cache\driver\file
|
||||
|
||||
class_loader:
|
||||
class: phpbb\class_loader
|
||||
arguments:
|
||||
@@ -69,6 +66,9 @@ services:
|
||||
- @cache.driver
|
||||
- %tables.config%
|
||||
|
||||
config.php:
|
||||
synthetic: true
|
||||
|
||||
config_text:
|
||||
class: phpbb\config\db_text
|
||||
arguments:
|
||||
@@ -96,6 +96,7 @@ services:
|
||||
- @config
|
||||
- @controller.provider
|
||||
- @ext.manager
|
||||
- @symfony_request
|
||||
- %core.root_path%
|
||||
- %core.php_ext%
|
||||
|
||||
@@ -139,6 +140,11 @@ services:
|
||||
- @service_container
|
||||
|
||||
dbal.conn:
|
||||
class: phpbb\db\driver\factory
|
||||
arguments:
|
||||
- @service_container
|
||||
|
||||
dbal.conn.driver:
|
||||
class: %dbal.driver.class%
|
||||
calls:
|
||||
- [sql_connect, [%dbal.dbhost%, %dbal.dbuser%, %dbal.dbpasswd%, %dbal.dbname%, %dbal.dbport%, false, %dbal.new_link%]]
|
||||
@@ -170,6 +176,7 @@ services:
|
||||
- @dbal.conn
|
||||
- @config
|
||||
- @filesystem
|
||||
- @user
|
||||
- %tables.ext%
|
||||
- %core.root_path%
|
||||
- %core.php_ext%
|
||||
@@ -238,6 +245,37 @@ services:
|
||||
- %core.php_ext%
|
||||
- %tables.log%
|
||||
|
||||
message.form.admin:
|
||||
class: phpbb\message\admin_form
|
||||
arguments:
|
||||
- @auth
|
||||
- @config
|
||||
- @config_text
|
||||
- @dbal.conn
|
||||
- @user
|
||||
- %core.root_path%
|
||||
- %core.php_ext%
|
||||
|
||||
message.form.topic:
|
||||
class: phpbb\message\topic_form
|
||||
arguments:
|
||||
- @auth
|
||||
- @config
|
||||
- @dbal.conn
|
||||
- @user
|
||||
- %core.root_path%
|
||||
- %core.php_ext%
|
||||
|
||||
message.form.user:
|
||||
class: phpbb\message\user_form
|
||||
arguments:
|
||||
- @auth
|
||||
- @config
|
||||
- @dbal.conn
|
||||
- @user
|
||||
- %core.root_path%
|
||||
- %core.php_ext%
|
||||
|
||||
notification_manager:
|
||||
class: phpbb\notification\manager
|
||||
arguments:
|
||||
@@ -267,6 +305,7 @@ services:
|
||||
arguments:
|
||||
- @symfony_request
|
||||
- @filesystem
|
||||
- @request
|
||||
- %core.root_path%
|
||||
- %core.php_ext%
|
||||
- %core.adm_relative_path%
|
||||
@@ -322,3 +361,8 @@ services:
|
||||
- @cache
|
||||
- @config
|
||||
- @user
|
||||
|
||||
viewonline_helper:
|
||||
class: phpbb\viewonline_helper
|
||||
arguments:
|
||||
- @filesystem
|
||||
|
@@ -37,73 +37,33 @@ function output_image()
|
||||
flush();
|
||||
}
|
||||
|
||||
function do_cron($cron_lock, $run_tasks)
|
||||
{
|
||||
global $config;
|
||||
|
||||
foreach ($run_tasks as $task)
|
||||
{
|
||||
if (defined('DEBUG') && $config['use_system_cron'])
|
||||
{
|
||||
echo "[phpBB cron] Running task '{$task->get_name()}'\n";
|
||||
}
|
||||
|
||||
$task->run();
|
||||
}
|
||||
|
||||
// Unloading cache and closing db after having done the dirty work.
|
||||
$cron_lock->release();
|
||||
garbage_collection();
|
||||
}
|
||||
|
||||
// Thanks to various fatal errors and lack of try/finally, it is quite easy to leave
|
||||
// the cron lock locked, especially when working on cron-related code.
|
||||
//
|
||||
// Attempt to alleviate the problem by doing setup outside of the lock as much as possible.
|
||||
//
|
||||
// If DEBUG is defined and cron lock cannot be obtained, a message will be printed.
|
||||
|
||||
if (!$config['use_system_cron'])
|
||||
{
|
||||
$cron_type = request_var('cron_type', '');
|
||||
$cron_type = request_var('cron_type', '');
|
||||
|
||||
// Comment this line out for debugging so the page does not return an image.
|
||||
output_image();
|
||||
}
|
||||
// Comment this line out for debugging so the page does not return an image.
|
||||
output_image();
|
||||
|
||||
$cron_lock = $phpbb_container->get('cron.lock_db');
|
||||
if ($cron_lock->acquire())
|
||||
{
|
||||
$cron = $phpbb_container->get('cron.manager');
|
||||
|
||||
if ($config['use_system_cron'])
|
||||
$task = $cron->find_task($cron_type);
|
||||
if ($task)
|
||||
{
|
||||
$run_tasks = $cron->find_all_ready_tasks();
|
||||
}
|
||||
else
|
||||
{
|
||||
// If invalid task is specified, empty $run_tasks is passed to do_cron which then does nothing
|
||||
$run_tasks = array();
|
||||
$task = $cron->find_task($cron_type);
|
||||
if ($task)
|
||||
if ($task->is_parametrized())
|
||||
{
|
||||
if ($task->is_parametrized())
|
||||
{
|
||||
$task->parse_parameters($request);
|
||||
}
|
||||
if ($task->is_ready())
|
||||
{
|
||||
$run_tasks = array($task);
|
||||
}
|
||||
$task->parse_parameters($request);
|
||||
}
|
||||
if ($task->is_ready())
|
||||
{
|
||||
$task->run();
|
||||
garbage_collection();
|
||||
}
|
||||
}
|
||||
|
||||
do_cron($cron_lock, $run_tasks);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (defined('DEBUG'))
|
||||
{
|
||||
echo "Could not obtain cron lock.\n";
|
||||
}
|
||||
$cron_lock->release();
|
||||
}
|
||||
|
@@ -371,7 +371,7 @@ function mass_auth($ug_type, $forum_id, $ug_id, $acl_list, $setting)
|
||||
switch ($sql_type)
|
||||
{
|
||||
case 'insert':
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
case 'mysql':
|
||||
case 'mysql4':
|
||||
|
@@ -313,7 +313,7 @@ function make_post($new_topic_id, $forum_id, $user_id, $post_username, $text, $m
|
||||
else
|
||||
{
|
||||
// Rollback
|
||||
if($db->sql_layer == "mysql")
|
||||
if($db->get_sql_layer() == "mysql")
|
||||
{
|
||||
$sql = "DELETE FROM " . POSTS_TABLE . "
|
||||
WHERE post_id = $new_post_id";
|
||||
|
@@ -20,7 +20,6 @@
|
||||
|
||||
$schema_path = dirname(__FILE__) . '/../install/schemas/';
|
||||
$supported_dbms = array(
|
||||
'firebird',
|
||||
'mssql',
|
||||
'mysql_40',
|
||||
'mysql_41',
|
||||
@@ -44,17 +43,9 @@ require($phpbb_root_path . 'phpbb/class_loader.' . $phpEx);
|
||||
$phpbb_class_loader = new \phpbb\class_loader('phpbb\\', "{$phpbb_root_path}phpbb/", $phpEx);
|
||||
$phpbb_class_loader->register();
|
||||
|
||||
class phpbb_extension_empty_manager extends \phpbb\extension\manager
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->extensions = array();
|
||||
}
|
||||
}
|
||||
|
||||
$finder = new \phpbb\extension\finder(new \phpbb_extension_empty_manager(), new \phpbb\filesystem(), $phpbb_root_path);
|
||||
$finder = new \phpbb\finder(new \phpbb\filesystem(), $phpbb_root_path);
|
||||
$classes = $finder->core_path('phpbb/')
|
||||
->directory('db/migration/data')
|
||||
->directory('/db/migration/data')
|
||||
->get_classes();
|
||||
|
||||
$db = new \phpbb\db\driver\sqlite();
|
||||
@@ -66,188 +57,4 @@ $fp = fopen($schema_path . 'schema.json', 'wb');
|
||||
fwrite($fp, json_encode($schema_data, JSON_PRETTY_PRINT));
|
||||
fclose($fp);
|
||||
|
||||
foreach ($supported_dbms as $dbms)
|
||||
{
|
||||
$fp = fopen($schema_path . $dbms . '_schema.sql', 'wb');
|
||||
|
||||
// Write Header
|
||||
switch ($dbms)
|
||||
{
|
||||
case 'mysql_40':
|
||||
case 'mysql_41':
|
||||
case 'firebird':
|
||||
case 'sqlite':
|
||||
case 'sqlite3':
|
||||
fwrite($fp, "# DO NOT EDIT THIS FILE, IT IS GENERATED\n");
|
||||
fwrite($fp, "#\n");
|
||||
fwrite($fp, "# To change the contents of this file, edit\n");
|
||||
fwrite($fp, "# phpBB/develop/create_schema_files.php and\n");
|
||||
fwrite($fp, "# run it.\n");
|
||||
break;
|
||||
|
||||
case 'mssql':
|
||||
case 'oracle':
|
||||
case 'postgres':
|
||||
fwrite($fp, "/*\n");
|
||||
fwrite($fp, " * DO NOT EDIT THIS FILE, IT IS GENERATED\n");
|
||||
fwrite($fp, " *\n");
|
||||
fwrite($fp, " * To change the contents of this file, edit\n");
|
||||
fwrite($fp, " * phpBB/develop/create_schema_files.php and\n");
|
||||
fwrite($fp, " * run it.\n");
|
||||
fwrite($fp, " */\n\n");
|
||||
break;
|
||||
}
|
||||
|
||||
$line = '';
|
||||
switch ($dbms)
|
||||
{
|
||||
case 'oracle':
|
||||
$line .= custom_data('oracle') . "\n";
|
||||
break;
|
||||
|
||||
case 'postgres':
|
||||
$line .= "BEGIN;\n\n";
|
||||
$line .= custom_data('postgres') . "\n";
|
||||
$line .= "COMMIT;\n\n";
|
||||
break;
|
||||
}
|
||||
|
||||
fwrite($fp, $line);
|
||||
fclose($fp);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data put into the header for various dbms
|
||||
*/
|
||||
function custom_data($dbms)
|
||||
{
|
||||
switch ($dbms)
|
||||
{
|
||||
case 'oracle':
|
||||
return <<<EOF
|
||||
/*
|
||||
This first section is optional, however its probably the best method
|
||||
of running phpBB on Oracle. If you already have a tablespace and user created
|
||||
for phpBB you can leave this section commented out!
|
||||
|
||||
The first set of statements create a phpBB tablespace and a phpBB user,
|
||||
make sure you change the password of the phpBB user before you run this script!!
|
||||
*/
|
||||
|
||||
/*
|
||||
CREATE TABLESPACE "PHPBB"
|
||||
LOGGING
|
||||
DATAFILE 'E:\ORACLE\ORADATA\LOCAL\PHPBB.ora'
|
||||
SIZE 10M
|
||||
AUTOEXTEND ON NEXT 10M
|
||||
MAXSIZE 100M;
|
||||
|
||||
CREATE USER "PHPBB"
|
||||
PROFILE "DEFAULT"
|
||||
IDENTIFIED BY "phpbb_password"
|
||||
DEFAULT TABLESPACE "PHPBB"
|
||||
QUOTA UNLIMITED ON "PHPBB"
|
||||
ACCOUNT UNLOCK;
|
||||
|
||||
GRANT ANALYZE ANY TO "PHPBB";
|
||||
GRANT CREATE SEQUENCE TO "PHPBB";
|
||||
GRANT CREATE SESSION TO "PHPBB";
|
||||
GRANT CREATE TABLE TO "PHPBB";
|
||||
GRANT CREATE TRIGGER TO "PHPBB";
|
||||
GRANT CREATE VIEW TO "PHPBB";
|
||||
GRANT "CONNECT" TO "PHPBB";
|
||||
|
||||
COMMIT;
|
||||
DISCONNECT;
|
||||
|
||||
CONNECT phpbb/phpbb_password;
|
||||
*/
|
||||
EOF;
|
||||
|
||||
break;
|
||||
|
||||
case 'postgres':
|
||||
return <<<EOF
|
||||
/*
|
||||
Domain definition
|
||||
*/
|
||||
CREATE DOMAIN varchar_ci AS varchar(255) NOT NULL DEFAULT ''::character varying;
|
||||
|
||||
/*
|
||||
Operation Functions
|
||||
*/
|
||||
CREATE FUNCTION _varchar_ci_equal(varchar_ci, varchar_ci) RETURNS boolean AS 'SELECT LOWER($1) = LOWER($2)' LANGUAGE SQL STRICT;
|
||||
CREATE FUNCTION _varchar_ci_not_equal(varchar_ci, varchar_ci) RETURNS boolean AS 'SELECT LOWER($1) != LOWER($2)' LANGUAGE SQL STRICT;
|
||||
CREATE FUNCTION _varchar_ci_less_than(varchar_ci, varchar_ci) RETURNS boolean AS 'SELECT LOWER($1) < LOWER($2)' LANGUAGE SQL STRICT;
|
||||
CREATE FUNCTION _varchar_ci_less_equal(varchar_ci, varchar_ci) RETURNS boolean AS 'SELECT LOWER($1) <= LOWER($2)' LANGUAGE SQL STRICT;
|
||||
CREATE FUNCTION _varchar_ci_greater_than(varchar_ci, varchar_ci) RETURNS boolean AS 'SELECT LOWER($1) > LOWER($2)' LANGUAGE SQL STRICT;
|
||||
CREATE FUNCTION _varchar_ci_greater_equals(varchar_ci, varchar_ci) RETURNS boolean AS 'SELECT LOWER($1) >= LOWER($2)' LANGUAGE SQL STRICT;
|
||||
|
||||
/*
|
||||
Operators
|
||||
*/
|
||||
CREATE OPERATOR <(
|
||||
PROCEDURE = _varchar_ci_less_than,
|
||||
LEFTARG = varchar_ci,
|
||||
RIGHTARG = varchar_ci,
|
||||
COMMUTATOR = >,
|
||||
NEGATOR = >=,
|
||||
RESTRICT = scalarltsel,
|
||||
JOIN = scalarltjoinsel);
|
||||
|
||||
CREATE OPERATOR <=(
|
||||
PROCEDURE = _varchar_ci_less_equal,
|
||||
LEFTARG = varchar_ci,
|
||||
RIGHTARG = varchar_ci,
|
||||
COMMUTATOR = >=,
|
||||
NEGATOR = >,
|
||||
RESTRICT = scalarltsel,
|
||||
JOIN = scalarltjoinsel);
|
||||
|
||||
CREATE OPERATOR >(
|
||||
PROCEDURE = _varchar_ci_greater_than,
|
||||
LEFTARG = varchar_ci,
|
||||
RIGHTARG = varchar_ci,
|
||||
COMMUTATOR = <,
|
||||
NEGATOR = <=,
|
||||
RESTRICT = scalargtsel,
|
||||
JOIN = scalargtjoinsel);
|
||||
|
||||
CREATE OPERATOR >=(
|
||||
PROCEDURE = _varchar_ci_greater_equals,
|
||||
LEFTARG = varchar_ci,
|
||||
RIGHTARG = varchar_ci,
|
||||
COMMUTATOR = <=,
|
||||
NEGATOR = <,
|
||||
RESTRICT = scalargtsel,
|
||||
JOIN = scalargtjoinsel);
|
||||
|
||||
CREATE OPERATOR <>(
|
||||
PROCEDURE = _varchar_ci_not_equal,
|
||||
LEFTARG = varchar_ci,
|
||||
RIGHTARG = varchar_ci,
|
||||
COMMUTATOR = <>,
|
||||
NEGATOR = =,
|
||||
RESTRICT = neqsel,
|
||||
JOIN = neqjoinsel);
|
||||
|
||||
CREATE OPERATOR =(
|
||||
PROCEDURE = _varchar_ci_equal,
|
||||
LEFTARG = varchar_ci,
|
||||
RIGHTARG = varchar_ci,
|
||||
COMMUTATOR = =,
|
||||
NEGATOR = <>,
|
||||
RESTRICT = eqsel,
|
||||
JOIN = eqjoinsel,
|
||||
HASHES,
|
||||
MERGES,
|
||||
SORT1= <);
|
||||
|
||||
EOF;
|
||||
break;
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
echo 'done';
|
||||
|
@@ -48,7 +48,7 @@ $sql = "CREATE TABLE {$table_prefix}attachments
|
||||
AND a.post_id = p.post_id";
|
||||
$db->sql_query($sql);
|
||||
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
case 'mysql':
|
||||
case 'mysql4':
|
||||
|
@@ -46,7 +46,7 @@ $sql = "CREATE TABLE {$table_prefix}posts
|
||||
WHERE pt.post_id = p.post_id";
|
||||
$db->sql_query($sql);
|
||||
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
case 'mysql':
|
||||
case 'mysql4':
|
||||
@@ -142,7 +142,7 @@ while ($row = $db->sql_fetchrow($result))
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
case 'oracle':
|
||||
$sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id
|
||||
|
@@ -1,46 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
// This is to help with creating migration files for new versions
|
||||
// Use this to find what migrations are not depended on by any other migration
|
||||
// (the current migration tree tips)
|
||||
|
||||
define('IN_PHPBB', true);
|
||||
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './../';
|
||||
$phpEx = substr(strrchr(__FILE__, '.'), 1);
|
||||
include($phpbb_root_path . 'common.' . $phpEx);
|
||||
|
||||
$phpbb_extension_manager = $phpbb_container->get('ext.manager');
|
||||
$finder = $phpbb_extension_manager->get_finder();
|
||||
|
||||
$migrations = $finder
|
||||
->core_path('phpbb/db/migration/data/')
|
||||
->get_classes();
|
||||
$tips = $migrations;
|
||||
|
||||
foreach ($migrations as $migration_class)
|
||||
{
|
||||
foreach ($migration_class::depends_on() as $dependency)
|
||||
{
|
||||
if (($tips_key = array_search($dependency, $tips)) !== false)
|
||||
{
|
||||
unset($tips[$tips_key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($tips as $migration)
|
||||
{
|
||||
echo "\t\t\t'{$migration}',\n";
|
||||
}
|
||||
|
@@ -46,6 +46,8 @@
|
||||
<ol>
|
||||
<li><a href="#changelog">Changelog</a>
|
||||
<ol style="list-style-type: lower-roman;">
|
||||
<li><a href="#v310b3">Changes since 3.1.0-RC1</a></li>
|
||||
<li><a href="#v310b3">Changes since 3.1.0-b4</a></li>
|
||||
<li><a href="#v310b3">Changes since 3.1.0-b3</a></li>
|
||||
<li><a href="#v310b2">Changes since 3.1.0-b2</a></li>
|
||||
<li><a href="#v310b1">Changes since 3.1.0-b1</a></li>
|
||||
@@ -93,7 +95,198 @@
|
||||
|
||||
<div class="content">
|
||||
|
||||
<a name="v310b3"></a><h3>1.i. Changes since 3.1.0-b3</h3>
|
||||
<a name="v310RC1"></a><h3>1.i. Changes since 3.1.0-RC1</h3>
|
||||
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-9801">PHPBB3-9801</a>] - Users on custom pages outside the board directory are being displayed on Index page</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11392">PHPBB3-11392</a>] - "Make normal" in quickmod tool does not ajaxify correctly</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12325">PHPBB3-12325</a>] - Automatic update should notify about outdated files</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12420">PHPBB3-12420</a>] - Reduce config.php inclusions in DIC code</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12446">PHPBB3-12446</a>] - Unnecessary db connect - function phpbb_bootstrap_enabled_exts</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12462">PHPBB3-12462</a>] - Do not use string "None" for different avatar options</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12515">PHPBB3-12515</a>] - FULLTEXT_POSTGRES_TS_NOT_USABLE and FULLTEXT_POSTGRES_VERSION_CHECK_EXPLAIN redundant</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12605">PHPBB3-12605</a>] - Make dropdowns uniform</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12674">PHPBB3-12674</a>] - Last edited by in PMs doesn't show user colour</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12680">PHPBB3-12680</a>] - Contact icons in viewtopic are missing alternative text</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12695">PHPBB3-12695</a>] - Undefined index: MISSING_INLINE_ATTACHMENT notice given when viewing post details</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12716">PHPBB3-12716</a>] - Wrong method call in phpbb\auth\provider\oauth\token_storage</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12759">PHPBB3-12759</a>] - Profile fields lang value db queries can cause query flood</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12760">PHPBB3-12760</a>] - Post approval icon for wrong topics in Last Post column</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12764">PHPBB3-12764</a>] - Wrong error message on install if mysqli is selected and the credentials are wrong</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12766">PHPBB3-12766</a>] - Event exporter does not like RCx as version</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12768">PHPBB3-12768</a>] - 'NOTIFICATION_REPORT_CLOSED' entry has wrong indentation</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12771">PHPBB3-12771</a>] - Bug in \phpbb\db\migration\profilefield_base_migration when used in extensions</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12772">PHPBB3-12772</a>] - Fatal error when "Email topic" is used in topic tools</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12773">PHPBB3-12773</a>] - Fix language variable name in cli extension enable command</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12774">PHPBB3-12774</a>] - Undefined variable $phpbb_adm_relative_path in phpbb_create_install_container()</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12781">PHPBB3-12781</a>] - Template regex for DEFINE has problems when enclosed by other template conditionals</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12783">PHPBB3-12783</a>] - Remove require: phpbb/phpbb from Extensions composer.json files</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12787">PHPBB3-12787</a>] - Incorrect generated url when using ajax and routing</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12788">PHPBB3-12788</a>] - Update Symfony suite from 2.3.12 to 2.3.16</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12790">PHPBB3-12790</a>] - Always use the interface when available (and not directly the class)</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12802">PHPBB3-12802</a>] - Properly handle connection errors in SQLite3</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12808">PHPBB3-12808</a>] - Small gap between username and drop-down arrow</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12810">PHPBB3-12810</a>] - In acp_forums the displayed value for prune_shadow_freq is the value of prune_freq</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12811">PHPBB3-12811</a>] - Margin Bottom not taking effect in Safari with 101% height on same element</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12815">PHPBB3-12815</a>] - Members list link hidden from guests who have permission to view members list page</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12816">PHPBB3-12816</a>] - Fix comment about logs in user_ban function</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12818">PHPBB3-12818</a>] - Deleting a log entry in MCP produces a General error</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12819">PHPBB3-12819</a>] - Wrong text on hover over "Jump to page" field</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12825">PHPBB3-12825</a>] - Allow the extensions to be tested with the sniffer and skip the vendors</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12830">PHPBB3-12830</a>] - .postlink is in colours.css doubled, one should be deleted</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12834">PHPBB3-12834</a>] - Viewonline only matches routes</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12839">PHPBB3-12839</a>] - Missing stylesheet when it is not updated</li>
|
||||
</ul>
|
||||
<h4>Improvement</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12013">PHPBB3-12013</a>] - Quickmod tools and jumpbox should use new dropdown</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12099">PHPBB3-12099</a>] - path_helper returns wrong web root path for ajax requests</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12196">PHPBB3-12196</a>] - Referer vs Referrer in language files</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12197">PHPBB3-12197</a>] - Fix misleading FAQ entries</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12334">PHPBB3-12334</a>] - Add raw values of profile fields to template</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12562">PHPBB3-12562</a>] - Prosilver has no max-width</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12645">PHPBB3-12645</a>] - Update support links to 3.1 forums</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12662">PHPBB3-12662</a>] - Reorganize and modernize the header navbar</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12735">PHPBB3-12735</a>] - Remove all :link, :visited, :active link states</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12777">PHPBB3-12777</a>] - Rename extension status functions and add is_configured()</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12779">PHPBB3-12779</a>] - Change order of file lists on automatic update</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12782">PHPBB3-12782</a>] - Use an interface for the phpbb event_dispatcher</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12784">PHPBB3-12784</a>] - Allow the extensions to add a custom auto loader</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12786">PHPBB3-12786</a>] - Extend profilefield_base_migration.php class</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12812">PHPBB3-12812</a>] - Add a migrator tool for config_text database changes</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12813">PHPBB3-12813</a>] - Improve responsive pagination location and fix page-jump title</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12823">PHPBB3-12823</a>] - Remove trailing whitespace from CSS files</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12824">PHPBB3-12824</a>] - Move ACP & MCP links in the header to the end of the link list</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12827">PHPBB3-12827</a>] - Reorder quick-links</li>
|
||||
</ul>
|
||||
<h4>Task</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12775">PHPBB3-12775</a>] - Refactor functions_container into class container_builder</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12829">PHPBB3-12829</a>] - Remove check for pgsql 8.3/8.2</li>
|
||||
</ul>
|
||||
|
||||
<a name="v310b4"></a><h3>1.ii. Changes since 3.1.0-b4</h3>
|
||||
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-8610">PHPBB3-8610</a>] - Splitting and merging topics does not handle subscriptions and bookmarks correctly</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-10899">PHPBB3-10899</a>] - Using Delete All in log viewer with keyword search</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11331">PHPBB3-11331</a>] - Inform admin of incorrect avatar path instead of stripping unexpected parts from destination path</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11445">PHPBB3-11445</a>] - Suboptimal number of query complexity in phpbb_notification_manager::get_global_subscriptions()</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11467">PHPBB3-11467</a>] - phpbb_extension_metadata_manager uses hard coded language for exceptions</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11659">PHPBB3-11659</a>] - Information about file_upload is missing from the requirement page</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11942">PHPBB3-11942</a>] - Delete post/topic reason should be added to the generated log entry</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12109">PHPBB3-12109</a>] - Bug when setting users forum permissions with "Select all users" checkbox</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12209">PHPBB3-12209</a>] - OAuth Authentication in ACP does not explain that it allows regular login too</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12332">PHPBB3-12332</a>] - Attachments with long file names break the Uploader layout</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12352">PHPBB3-12352</a>] - The service definition "auth.provider.smf" does not exist.</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12443">PHPBB3-12443</a>] - Responsive tabs broken in IE</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12457">PHPBB3-12457</a>] - Gallery avatar category "Main" is empty</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12508">PHPBB3-12508</a>] - phpbb\finder (currently phpbb\extension\finder) should not depend on extension manager</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12521">PHPBB3-12521</a>] - When selecting the target to merge two topics, the last column is pushed on a new line</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12552">PHPBB3-12552</a>] - [RTL] - Forum list content forced into single char column when responsive</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12553">PHPBB3-12553</a>] - Right-to-left language bugs in prosilver</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12566">PHPBB3-12566</a>] - "Private messages" in viewtopic.php should be "Send pivate message"</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12589">PHPBB3-12589</a>] - The finder should search directly in $directory if it's an absolute sub-path</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12612">PHPBB3-12612</a>] - Front-facing files should not contain functions</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12615">PHPBB3-12615</a>] - Improper clearing of .topic-actions leads to float problems</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12637">PHPBB3-12637</a>] - coding-guidelines.html contains invalid HTML</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12638">PHPBB3-12638</a>] - Call to undefined function phpbb\db\migration\data\v30x\phpbb_require_updated() when not using autoupdate package</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12639">PHPBB3-12639</a>] - Delete entry in admin-log leads to mysql-error</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12640">PHPBB3-12640</a>] - Posting editor tab "attachments" is unclicked in IE8</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12641">PHPBB3-12641</a>] - With IE8 logged in to ACP error message appears in the browser</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12643">PHPBB3-12643</a>] - Cannot convert SQLite DB from 3.0.12 to 3.1.0</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12652">PHPBB3-12652</a>] - Deleting marked log entries leads to MySQL Error</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12660">PHPBB3-12660</a>] - Undefined offset error when phpinfo() disabled and debug enabled</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12665">PHPBB3-12665</a>] - develop/migration_tips.php should not find extension tips</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12667">PHPBB3-12667</a>] - New posts in a topic cause undesirable results when clicking topic title or page button</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12672">PHPBB3-12672</a>] - Make <Tab> inside [code] - more user friendly</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12673">PHPBB3-12673</a>] - PLUPLOAD fails due missing constant IMAGETYPE_SWC</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12675">PHPBB3-12675</a>] - Fix code sniffer complaints in 3.1.0-b5-dev code</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12682">PHPBB3-12682</a>] - Code Sniffer does not work correctly on Travis CI.</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12688">PHPBB3-12688</a>] - Rank images do not work on routes</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12694">PHPBB3-12694</a>] - Remove whitespace at end of line from acp_groups</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12697">PHPBB3-12697</a>] - Database Test Case Must Purge Extension Schema When Done</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12705">PHPBB3-12705</a>] - make_clickable is using static variables incorrectly</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12707">PHPBB3-12707</a>] - \phpbb\db\driver\phpbb\db\driver\mysql is tried being loaded</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12708">PHPBB3-12708</a>] - [ROOT] -/install/install_main.php still uses docs/COPYING</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12709">PHPBB3-12709</a>] - Duplicate entries in the posting attachments tab</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12711">PHPBB3-12711</a>] - Contact form migration fails on MSSQL</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12712">PHPBB3-12712</a>] - Password conversion migration fails on MSSQL</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12715">PHPBB3-12715</a>] - Mistakes in the doc blocks</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12720">PHPBB3-12720</a>] - Git commit hook should not require commit message to start with a capital letter</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12728">PHPBB3-12728</a>] - Enforce box-model for image attachments</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12741">PHPBB3-12741</a>] - Functional tests on Travis fail since php update last night</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12746">PHPBB3-12746</a>] - Failing test: tests/content_visibility/delete_post_test.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12747">PHPBB3-12747</a>] - Drop Firebird support</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12750">PHPBB3-12750</a>] - Install/Update footer is not centered anymore</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12752">PHPBB3-12752</a>] - Cron list tests fail on windows with ansi support</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12753">PHPBB3-12753</a>] - FIELD_INVALID_CHARS_ALPHA_PUNCTUATION is not localized</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12755">PHPBB3-12755</a>] - Remote upload stuck in infinite loop if server sends keep-alive</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12756">PHPBB3-12756</a>] - Fatal error with mysqli_fetch_assoc on hhvm</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12761">PHPBB3-12761</a>] - Remove the execute bit from functions_user.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12762">PHPBB3-12762</a>] - Make ext.php optional for extensions</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12763">PHPBB3-12763</a>] - Do not unnecessarily rewrite install/schemas/*_schema.sql when updating schema.json file</li>
|
||||
</ul>
|
||||
<h4>Improvement</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11266">PHPBB3-11266</a>] - Use our own error message when composer is not set up</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12532">PHPBB3-12532</a>] - Add header_navbar_username_prepend/append template events.</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12541">PHPBB3-12541</a>] - Activate attachments tab when files are dropped into textarea</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12563">PHPBB3-12563</a>] - Language key names in ACP styles are misleading</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12606">PHPBB3-12606</a>] - PHP events in /includes/acp/acp_groups.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12608">PHPBB3-12608</a>] - Improve notifications drop-down menu styling in header</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12613">PHPBB3-12613</a>] - Improve pagination styling and jump-to-page dialog</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12646">PHPBB3-12646</a>] - Add data attribute to breadcrumb links</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12648">PHPBB3-12648</a>] - Improve UCP/MCP/Posting tabs styling & problems</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12655">PHPBB3-12655</a>] - Allow the CLI to be used as a shell</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12664">PHPBB3-12664</a>] - Refactor develop/migration_tips.php into a console command</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12666">PHPBB3-12666</a>] - Use "None" for images in gallery avatar path root and rename lang key</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12668">PHPBB3-12668</a>] - Add ability to modify subforums template data for core.display_forums_modify_template_vars event</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12669">PHPBB3-12669</a>] - Add core event to the function display_forums() for additional template data</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12677">PHPBB3-12677</a>] - Remove comment about ‘threading’</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12687">PHPBB3-12687</a>] - Add a constant to dissociate the displaying of the load time from DEBUG</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12690">PHPBB3-12690</a>] - Add core.submit_pm_after event</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12691">PHPBB3-12691</a>] - Add core.delete_pm to funtion delete_pm.</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12704">PHPBB3-12704</a>] - Improve the load time information in the footer when enabled</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12706">PHPBB3-12706</a>] - Ignore additional languages and styles from git</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12714">PHPBB3-12714</a>] - Better align the description of radio buttons to avoid confusion with the forum list in attachments settings</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12740">PHPBB3-12740</a>] - Stop Using IDs as CSS selectors</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12758">PHPBB3-12758</a>] - Add 'show_results' mode var to event core.search_modify_rowset</li>
|
||||
</ul>
|
||||
<h4>New Feature</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12597">PHPBB3-12597</a>] - Command for executing all available cron tasks</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12602">PHPBB3-12602</a>] - Add command to print the cron list</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12607">PHPBB3-12607</a>] - CLI command for running a specific cron task</li>
|
||||
</ul>
|
||||
<h4>Sub-task</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12575">PHPBB3-12575</a>] - Use a proxy pattern in \phpbb\di\service_collection</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12699">PHPBB3-12699</a>] - Replace instances in the message textarea keydown callback</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12721">PHPBB3-12721</a>] - Simple rules</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12722">PHPBB3-12722</a>] - Add rule Generic.Formatting.SpaceAfterCast</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12724">PHPBB3-12724</a>] - Add rule Squiz.PHP.Eval</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12729">PHPBB3-12729</a>] - Add Facebook profile field</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12730">PHPBB3-12730</a>] - Add Google+ profile field</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12731">PHPBB3-12731</a>] - Add YouTube profile field</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12732">PHPBB3-12732</a>] - Add Skype profile field</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12733">PHPBB3-12733</a>] - Add Twitter profile field</li>
|
||||
</ul>
|
||||
<h4>Task</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11528">PHPBB3-11528</a>] - Use mink for acceptance tests involving javascript execution</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12514">PHPBB3-12514</a>] - Add additional tests for custom profile fields type</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12696">PHPBB3-12696</a>] - Add events to ucp_register.html</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12701">PHPBB3-12701</a>] - Add events to user_add function</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12723">PHPBB3-12723</a>] - Add Code Sniffer sniff ensuring PHP files use the correct file header</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12726">PHPBB3-12726</a>] - Add Code Sniffer sniff ensuring PHP files do not contain any unused use statements</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12757">PHPBB3-12757</a>] - Add a Code Sniffer ruleset for PHP files of phpBB extensions</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<a name="v310b3"></a><h3>1.iii. Changes since 3.1.0-b3</h3>
|
||||
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
@@ -200,7 +393,7 @@
|
||||
</ul>
|
||||
|
||||
|
||||
<a name="v310b2"></a><h3>1.ii. Changes since 3.1.0-b2</h3>
|
||||
<a name="v310b2"></a><h3>1.iv. Changes since 3.1.0-b2</h3>
|
||||
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
@@ -365,7 +558,7 @@
|
||||
</ul>
|
||||
|
||||
|
||||
<a name="v310b1"></a><h3>1.iii. Changes since 3.1.0-b1</h3>
|
||||
<a name="v310b1"></a><h3>1.v. Changes since 3.1.0-b1</h3>
|
||||
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
@@ -433,7 +626,7 @@
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12302">PHPBB3-12302</a>] - Upgrade composer.phar to 1.0.0-alpha8</li>
|
||||
</ul>
|
||||
|
||||
<a name="v310a3"></a><h3>1.iv. Changes since 3.1.0-a3</h3>
|
||||
<a name="v310a3"></a><h3>1.vi. Changes since 3.1.0-a3</h3>
|
||||
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
@@ -580,7 +773,7 @@
|
||||
</ul>
|
||||
|
||||
|
||||
<a name="v310a2"></a><h3>1.v. Changes since 3.1.0-a2</h3>
|
||||
<a name="v310a2"></a><h3>1.vii. Changes since 3.1.0-a2</h3>
|
||||
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
@@ -688,7 +881,7 @@
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12147">PHPBB3-12147</a>] - Remove Travis CI notification configuration</li>
|
||||
</ul>
|
||||
|
||||
<a name="v310a1"></a><h3>1.vi. Changes since 3.1.0-a1</h3>
|
||||
<a name="v310a1"></a><h3>1.viii. Changes since 3.1.0-a1</h3>
|
||||
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
@@ -764,7 +957,7 @@
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11998">PHPBB3-11998</a>] - Add console / command line client environment </li>
|
||||
</ul>
|
||||
|
||||
<a name="v30x"></a><h3>1.vii. Changes since 3.0.x</h3>
|
||||
<a name="v30x"></a><h3>1.ix. Changes since 3.0.x</h3>
|
||||
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
@@ -1445,7 +1638,7 @@
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11913">PHPBB3-11913</a>] - Apply reorganisation of download.phpbb.com to build_announcement.php</li>
|
||||
</ul>
|
||||
|
||||
<a name="v3011"></a><h3>1.viii. Changes since 3.0.11</h3>
|
||||
<a name="v3011"></a><h3>1.x. Changes since 3.0.11</h3>
|
||||
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
@@ -1600,7 +1793,7 @@
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11753">PHPBB3-11753</a>] - Upgrade mysql_upgrader.php schema data.</li>
|
||||
</ul>
|
||||
|
||||
<a name="v3010"></a><h3>1.ix. Changes since 3.0.10</h3>
|
||||
<a name="v3010"></a><h3>1.xi. Changes since 3.0.10</h3>
|
||||
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
@@ -1725,7 +1918,7 @@
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-10909">PHPBB3-10909</a>] - Update Travis Test Configuration: Travis no longer supports PHP 5.3.2</li>
|
||||
</ul>
|
||||
|
||||
<a name="v309"></a><h3>1.x. Changes since 3.0.9</h3>
|
||||
<a name="v309"></a><h3>1.xii. Changes since 3.0.9</h3>
|
||||
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
@@ -1861,7 +2054,7 @@
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-10480">PHPBB3-10480</a>] - Automate changelog building</li>
|
||||
</ul>
|
||||
|
||||
<a name="v308"></a><h3>1.xi. Changes since 3.0.8</h3>
|
||||
<a name="v308"></a><h3>1.xiii. Changes since 3.0.8</h3>
|
||||
|
||||
<h4> Bug
|
||||
</h4>
|
||||
@@ -2229,7 +2422,7 @@
|
||||
</ul>
|
||||
|
||||
|
||||
<a name="v307-PL1"></a><h3>1.xii. Changes since 3.0.7-PL1</h3>
|
||||
<a name="v307-PL1"></a><h3>1.xiv. Changes since 3.0.7-PL1</h3>
|
||||
<h4> Security
|
||||
</h4>
|
||||
<ul>
|
||||
@@ -2687,13 +2880,13 @@
|
||||
</ul>
|
||||
|
||||
|
||||
<a name="v307"></a><h3>1.xiii. Changes since 3.0.7</h3>
|
||||
<a name="v307"></a><h3>1.xv. Changes since 3.0.7</h3>
|
||||
|
||||
<ul>
|
||||
<li>[Sec] Do not expose forum content of forums with ACL entries but no actual permission in ATOM Feeds. (Bug #58595)</li>
|
||||
</ul>
|
||||
|
||||
<a name="v306"></a><h3>1.xiv. Changes since 3.0.6</h3>
|
||||
<a name="v306"></a><h3>1.xvi. Changes since 3.0.6</h3>
|
||||
|
||||
<ul>
|
||||
<li>[Fix] Allow ban reason and length to be selected and copied in ACP and subsilver2 MCP. (Bug #51095)</li>
|
||||
@@ -2797,7 +2990,7 @@
|
||||
|
||||
</ul>
|
||||
|
||||
<a name="v305"></a><h3>1.xv. Changes since 3.0.5</h3>
|
||||
<a name="v305"></a><h3>1.xvii. Changes since 3.0.5</h3>
|
||||
|
||||
<ul>
|
||||
<li>[Fix] Allow whitespaces in avatar gallery names. (Bug #44955)</li>
|
||||
@@ -3019,7 +3212,7 @@
|
||||
<li>[Feature] Send anonymous statistical information to phpBB on installation and update (optional).</li>
|
||||
</ul>
|
||||
|
||||
<a name="v304"></a><h3>1.xvi. Changes since 3.0.4</h3>
|
||||
<a name="v304"></a><h3>1.xviii. Changes since 3.0.4</h3>
|
||||
|
||||
<ul>
|
||||
<li>[Fix] Delete user entry from ban list table upon user deletion (Bug #40015 - Patch by TerraFrost)</li>
|
||||
@@ -3108,7 +3301,7 @@
|
||||
<li>[Sec] Only use forum id supplied for posting if global announcement detected. (Reported by nickvergessen)</li>
|
||||
</ul>
|
||||
|
||||
<a name="v303"></a><h3>1.xvii. Changes since 3.0.3</h3>
|
||||
<a name="v303"></a><h3>1.xix. Changes since 3.0.3</h3>
|
||||
|
||||
<ul>
|
||||
<li>[Fix] Allow mixed-case template directories to be inherited (Bug #36725)</li>
|
||||
@@ -3140,7 +3333,7 @@
|
||||
<li>[Sec] Ask for forum password if post within passworded forum quoted in private message. (Reported by nickvergessen)</li>
|
||||
</ul>
|
||||
|
||||
<a name="v302"></a><h3>1.xviii. Changes since 3.0.2</h3>
|
||||
<a name="v302"></a><h3>1.xx. Changes since 3.0.2</h3>
|
||||
|
||||
<ul>
|
||||
<li>[Fix] Correctly set topic starter if first post in topic removed (Bug #30575 - Patch by blueray2048)</li>
|
||||
@@ -3239,7 +3432,7 @@
|
||||
<li>[Sec Precaution] Stricter validation of the HTTP_HOST header (Thanks to Techie-Micheal et al for pointing out possible issues in derived code)</li>
|
||||
</ul>
|
||||
|
||||
<a name="v301"></a><h3>1.xix. Changes since 3.0.1</h3>
|
||||
<a name="v301"></a><h3>1.xxi. Changes since 3.0.1</h3>
|
||||
|
||||
<ul>
|
||||
<li>[Fix] Ability to set permissions on non-mysql dbms (Bug #24955)</li>
|
||||
@@ -3287,7 +3480,7 @@
|
||||
<li>[Sec] Only allow urls gone through redirect() being used within login_box(). (thanks nookieman)</li>
|
||||
</ul>
|
||||
|
||||
<a name="v300"></a><h3>1.xx. Changes since 3.0.0</h3>
|
||||
<a name="v300"></a><h3>1.xxii. Changes since 3.0.0</h3>
|
||||
|
||||
<ul>
|
||||
<li>[Change] Validate birthdays (Bug #15004)</li>
|
||||
@@ -3358,7 +3551,7 @@
|
||||
<li>[Fix] Find and display colliding usernames correctly when converting from one database to another (Bug #23925)</li>
|
||||
</ul>
|
||||
|
||||
<a name="v30rc8"></a><h3>1.xxi. Changes since 3.0.RC8</h3>
|
||||
<a name="v30rc8"></a><h3>1.xxiii. Changes since 3.0.RC8</h3>
|
||||
|
||||
<ul>
|
||||
<li>[Fix] Cleaned usernames contain only single spaces, so "a_name" and "a__name" are treated as the same name (Bug #15634)</li>
|
||||
@@ -3367,7 +3560,7 @@
|
||||
<li>[Fix] Call garbage_collection() within database updater to correctly close connections (affects Oracle for example)</li>
|
||||
</ul>
|
||||
|
||||
<a name="v30rc7"></a><h3>1.xxii. Changes since 3.0.RC7</h3>
|
||||
<a name="v30rc7"></a><h3>1.xxiv. Changes since 3.0.RC7</h3>
|
||||
|
||||
<ul>
|
||||
<li>[Fix] Fixed MSSQL related bug in the update system</li>
|
||||
@@ -3402,7 +3595,7 @@
|
||||
<li>[Fix] No duplication of active topics (Bug #15474)</li>
|
||||
</ul>
|
||||
|
||||
<a name="v30rc6"></a><h3>1.xxiii. Changes since 3.0.RC6</h3>
|
||||
<a name="v30rc6"></a><h3>1.xxv. Changes since 3.0.RC6</h3>
|
||||
|
||||
<ul>
|
||||
<li>[Fix] Submitting language changes using acp_language (Bug #14736)</li>
|
||||
@@ -3412,7 +3605,7 @@
|
||||
<li>[Fix] Able to request new password (Bug #14743)</li>
|
||||
</ul>
|
||||
|
||||
<a name="v30rc5"></a><h3>1.xxiv. Changes since 3.0.RC5</h3>
|
||||
<a name="v30rc5"></a><h3>1.xxvi. Changes since 3.0.RC5</h3>
|
||||
|
||||
<ul>
|
||||
<li>[Feature] Removing constant PHPBB_EMBEDDED in favor of using an exit_handler(); the constant was meant to achive this more or less.</li>
|
||||
@@ -3475,7 +3668,7 @@
|
||||
<li>[Sec] New password hashing mechanism for storing passwords (#i42)</li>
|
||||
</ul>
|
||||
|
||||
<a name="v30rc4"></a><h3>1.xxv. Changes since 3.0.RC4</h3>
|
||||
<a name="v30rc4"></a><h3>1.xxvii. Changes since 3.0.RC4</h3>
|
||||
|
||||
<ul>
|
||||
<li>[Fix] MySQL, PostgreSQL and SQLite related database fixes (Bug #13862)</li>
|
||||
@@ -3526,7 +3719,7 @@
|
||||
<li>[Fix] odbc_autocommit causing existing result sets to be dropped (Bug #14182)</li>
|
||||
</ul>
|
||||
|
||||
<a name="v30rc3"></a><h3>1.xxvi. Changes since 3.0.RC3</h3>
|
||||
<a name="v30rc3"></a><h3>1.xxviii. Changes since 3.0.RC3</h3>
|
||||
|
||||
<ul>
|
||||
<li>[Fix] Fixing some subsilver2 and prosilver style issues</li>
|
||||
@@ -3635,7 +3828,7 @@
|
||||
|
||||
</ul>
|
||||
|
||||
<a name="v30rc2"></a><h3>1.xxvii. Changes since 3.0.RC2</h3>
|
||||
<a name="v30rc2"></a><h3>1.xxix. Changes since 3.0.RC2</h3>
|
||||
|
||||
<ul>
|
||||
<li>[Fix] Re-allow searching within the memberlist</li>
|
||||
@@ -3681,7 +3874,7 @@
|
||||
|
||||
</ul>
|
||||
|
||||
<a name="v30rc1"></a><h3>1.xxviii. Changes since 3.0.RC1</h3>
|
||||
<a name="v30rc1"></a><h3>1.xxx. Changes since 3.0.RC1</h3>
|
||||
|
||||
<ul>
|
||||
<li>[Fix] (X)HTML issues within the templates (Bug #11255, #11255)</li>
|
||||
|
@@ -3,7 +3,7 @@
|
||||
* phpBB © Copyright phpBB Limited 2003-2014
|
||||
* http://www.phpbb.com
|
||||
*
|
||||
* phpBB is free software. You can redistribute it and/or modify it
|
||||
* phpBB is free software. You can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License, version 2 (GPL-2.0)
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
@@ -25,9 +25,9 @@ phpBB Lead Developer: naderman (Nils Adermann)
|
||||
phpBB Developers: bantu (Andreas Fischer)
|
||||
dhruv.goel92 (Dhruv Goel)
|
||||
EXreaction (Nathan Guse)
|
||||
imkingdavid (David King)
|
||||
marc1706 (Marc Alexander)
|
||||
nickvergessen (Joas Schilling)
|
||||
nicofuma (Tristan Darricau)
|
||||
prototech (Cesar Gallegos)
|
||||
|
||||
For a list of phpBB Team members, please see:
|
||||
@@ -55,6 +55,7 @@ phpBB Developers: A_Jelly_Doughnut (Josh Woody) [01/2010 - 11/2010]
|
||||
dhn (Dominik Dröscher) [05/2007 - 01/2011]
|
||||
GrahamJE (Graham Eames) [09/2005 - 11/2006]
|
||||
igorw (Igor Wiedler) [08/2010 - 02/2013]
|
||||
imkingdavid (David King) [11/2012 - 06/2014]
|
||||
kellanved (Henry Sudhof) [04/2007 - 03/2011]
|
||||
Oleg (Oleg Pudeyev) [01/2011 - 05/2013]
|
||||
rxu (Ruslan Uzdenov) [04/2010 - 12/2012]
|
||||
@@ -63,7 +64,7 @@ phpBB Developers: A_Jelly_Doughnut (Josh Woody) [01/2010 - 11/2010]
|
||||
Vic D'Elfant (Vic D'Elfant) [04/2007 - 04/2009]
|
||||
|
||||
Major contributions by: leviatan21 (Gabriel Vazquez)
|
||||
Neothermic (Ashley Pinner)
|
||||
NeoThermic (Ashley Pinner)
|
||||
Raimon (Raimon Meuldijk)
|
||||
Xore (Robert Hetzler)
|
||||
|
||||
|
@@ -136,7 +136,6 @@
|
||||
<li>PostgreSQL 8.3+</li>
|
||||
<li>SQLite 2.8.2+</li>
|
||||
<li>SQLite 3.6.15+</li>
|
||||
<li>Firebird 2.1+</li>
|
||||
<li>MS SQL Server 2000 or above (directly or via ODBC or the native adapter)</li>
|
||||
<li>Oracle</li>
|
||||
</ul>
|
||||
|
@@ -323,7 +323,7 @@
|
||||
|
||||
<p>Please remember that running any application on a development (unstable, e.g. a beta release) version of PHP can lead to strange/unexpected results which may appear to be bugs in the application. Therefore, we recommend you upgrade to the newest stable version of PHP before running phpBB3. If you are running a development version of PHP please check any bugs you find on a system running a stable release before submitting.</p>
|
||||
|
||||
<p>This board has been developed and tested under Linux and Windows (amongst others) running Apache using MySQL 3.23, 4.x, 5.x, MariaDB 5.x, MSSQL Server 2000, PostgreSQL 8.x, Oracle 8, SQLite 2 and Firebird. Versions of PHP used range from 5.3.x to 5.4.x without problem.</p>
|
||||
<p>This board has been developed and tested under Linux and Windows (amongst others) running Apache using MySQL 3.23, 4.x, 5.x, MariaDB 5.x, MSSQL Server 2000, PostgreSQL 8.x, Oracle 8, SQLite 2 and SQLite 3. Versions of PHP used range from 5.3.x to 5.4.x without problem.</p>
|
||||
|
||||
<a name="phpsec"></a><h3>7.i. Notice on PHP security issues</h3>
|
||||
|
||||
|
@@ -127,7 +127,7 @@
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
@@ -736,7 +736,7 @@ static private function f()
|
||||
<a name="sql"></a><h3>2.iii. SQL/SQL Layout</h3>
|
||||
|
||||
<h4>Common SQL Guidelines: </h4>
|
||||
<p>All SQL should be cross-DB compatible, if DB specific SQL is used alternatives must be provided which work on all supported DB's (MySQL3/4/5, MSSQL (7.0 and 2000), PostgreSQL (8.3+), Firebird, SQLite, Oracle8, ODBC (generalised if possible)).</p>
|
||||
<p>All SQL should be cross-DB compatible, if DB specific SQL is used alternatives must be provided which work on all supported DB's (MySQL3/4/5, MSSQL (7.0 and 2000), PostgreSQL (8.3+), SQLite, Oracle8, ODBC (generalised if possible)).</p>
|
||||
<p>All SQL commands should utilise the DataBase Abstraction Layer (DBAL)</p>
|
||||
|
||||
<h4>SQL code layout:</h4>
|
||||
|
@@ -64,6 +64,20 @@ acp_overall_header_head_append
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add assets within the `<head>` tags in the ACP
|
||||
|
||||
acp_posting_buttons_after
|
||||
===
|
||||
* Locations:
|
||||
+ adm/style/acp_posting_buttons.html
|
||||
* Since: 3.1.0-b4
|
||||
* Purpose: Add content after BBCode posting buttons in the ACP
|
||||
|
||||
acp_posting_buttons_before
|
||||
===
|
||||
* Locations:
|
||||
+ adm/style/acp_posting_buttons.html
|
||||
* Since: 3.1.0-b4
|
||||
* Purpose: Add content before BBCode posting buttons in the ACP
|
||||
|
||||
acp_simple_footer_after
|
||||
===
|
||||
* Location: adm/style/simple_footer.html
|
||||
@@ -136,20 +150,6 @@ acp_users_prefs_view_prepend
|
||||
* Since: 3.1.0-b3
|
||||
* Purpose: Add user options fieldset to the top of ACP users view prefs settings
|
||||
|
||||
acp_users_signature_editor_buttons_after
|
||||
===
|
||||
* Locations:
|
||||
+ adm/style/acp_users_signature.html
|
||||
* Since: 3.1.0-a3
|
||||
* Purpose: Add content after BBCode posting buttons in the ACP user signature
|
||||
|
||||
acp_users_signature_editor_buttons_before
|
||||
===
|
||||
* Locations:
|
||||
+ adm/style/acp_users_signature.html
|
||||
* Since: 3.1.0-a3
|
||||
* Purpose: Add content before BBCode posting buttons in the ACP user signature
|
||||
|
||||
forumlist_body_category_header_after
|
||||
===
|
||||
* Locations:
|
||||
@@ -246,21 +246,21 @@ index_body_block_stats_prepend
|
||||
* Since: 3.1.0-b3
|
||||
* Purpose: Prepend content to the statistics list on the Board index
|
||||
|
||||
index_body_linklist_after
|
||||
index_body_markforums_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/index_body.html
|
||||
+ styles/subsilver2/template/index_body.html
|
||||
* Since: 3.1.0-a3
|
||||
* Purpose: Add content after the linklist above the forum list on Board index
|
||||
* Since: 3.1.0-RC2
|
||||
* Purpose: Add content after the mark-read link above the forum list on Board index
|
||||
|
||||
index_body_linklist_before
|
||||
index_body_markforums_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/index_body.html
|
||||
+ styles/subsilver2/template/index_body.html
|
||||
* Since: 3.1.0-a3
|
||||
* Purpose: Add content before the linklist above the forum list on Board index
|
||||
* Since: 3.1.0-RC2
|
||||
* Purpose: Add content before the mark-read link above the forum list on Board index
|
||||
|
||||
index_body_stat_blocks_after
|
||||
===
|
||||
@@ -344,6 +344,55 @@ memberlist_view_user_statistics_before
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add entries before the user statistics part of any user profile
|
||||
|
||||
navbar_header_logged_out_content
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/navbar_header.html
|
||||
* Since: 3.1.0-RC1
|
||||
* Purpose: Add text and HTML in place of the username when not logged in.
|
||||
|
||||
navbar_header_profile_list_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/navbar_header.html
|
||||
* Since: 3.1.0-RC2
|
||||
* Purpose: Add links to the bottom of the profile drop-down menu in the header navbar
|
||||
|
||||
navbar_header_profile_list_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/navbar_header.html
|
||||
* Since: 3.1.0-RC2
|
||||
* Purpose: Add links to the top of the profile drop-down menu in the header navbar
|
||||
|
||||
navbar_header_quick_links_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/navbar_header.html
|
||||
* Since: 3.1.0-RC2
|
||||
* Purpose: Add links to the bottom of the quick-links drop-down menu in the header
|
||||
|
||||
navbar_header_quick_links_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/navbar_header.html
|
||||
* Since: 3.1.0-RC2
|
||||
* Purpose: Add links to the top of the quick-links drop-down menu in the header
|
||||
|
||||
navbar_header_username_append
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/navbar_header.html
|
||||
* Since: 3.1.0-RC1
|
||||
* Purpose: Add text and HTMl after the username shown in the navbar.
|
||||
|
||||
navbar_header_username_prepend
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/navbar_header.html
|
||||
* Since: 3.1.0-RC1
|
||||
* Purpose: Add text and HTMl before the username shown in the navbar.
|
||||
|
||||
overall_footer_after
|
||||
===
|
||||
* Locations:
|
||||
@@ -767,7 +816,7 @@ ucp_prefs_view_radio_buttons_prepend
|
||||
+ styles/prosilver/template/ucp_prefs_view.html
|
||||
+ styles/subsilver2/template/ucp_prefs_view.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add options to the top of the radio buttons block of the Edit
|
||||
* Purpose: Add options to the top of the radio buttons block of the Edit
|
||||
Display Options screen
|
||||
|
||||
ucp_prefs_view_radio_buttons_append
|
||||
@@ -776,7 +825,7 @@ ucp_prefs_view_radio_buttons_append
|
||||
+ styles/prosilver/template/ucp_prefs_view.html
|
||||
+ styles/subsilver2/template/ucp_prefs_view.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add options to the bottom of the radio buttons block of the Edit
|
||||
* Purpose: Add options to the bottom of the radio buttons block of the Edit
|
||||
Display Options screen
|
||||
|
||||
ucp_prefs_view_select_menu_prepend
|
||||
@@ -785,7 +834,7 @@ ucp_prefs_view_select_menu_prepend
|
||||
+ styles/prosilver/template/ucp_prefs_view.html
|
||||
+ styles/subsilver2/template/ucp_prefs_view.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add options to the top of the drop-down lists block of the Edit
|
||||
* Purpose: Add options to the top of the drop-down lists block of the Edit
|
||||
Display Options screen
|
||||
|
||||
ucp_prefs_view_select_menu_append
|
||||
@@ -794,9 +843,49 @@ ucp_prefs_view_select_menu_append
|
||||
+ styles/prosilver/template/ucp_prefs_view.html
|
||||
+ styles/subsilver2/template/ucp_prefs_view.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add options to the bottom of the drop-down lists block of the Edit
|
||||
* Purpose: Add options to the bottom of the drop-down lists block of the Edit
|
||||
Display Options screen
|
||||
|
||||
ucp_register_credentials_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/ucp_register.html
|
||||
+ styles/subsilver2/template/ucp_register.html
|
||||
* Since: 3.1.0-b5
|
||||
* Purpose: Add options in registration page fieldset - before first field.
|
||||
|
||||
ucp_register_profile_fields_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/ucp_register.html
|
||||
+ styles/subsilver2/template/ucp_register.html
|
||||
* Since: 3.1.0-b5
|
||||
* Purpose: Add options in registration page fieldset - after last field.
|
||||
|
||||
ucp_register_credentials_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/ucp_register.html
|
||||
+ styles/subsilver2/template/ucp_register.html
|
||||
* Since: 3.1.0-b5
|
||||
* Purpose: Add options in registration page fieldset - after password field.
|
||||
|
||||
ucp_register_options_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/ucp_register.html
|
||||
+ styles/subsilver2/template/ucp_register.html
|
||||
* Since: 3.1.0-b5
|
||||
* Purpose: Add options in registration page fieldset - before language selector.
|
||||
|
||||
ucp_register_profile_fields_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/ucp_register.html
|
||||
+ styles/subsilver2/template/ucp_register.html
|
||||
* Since: 3.1.0-b5
|
||||
* Purpose: Add options in registration page fieldset - before profile fields.
|
||||
|
||||
ucp_friend_list_before
|
||||
===
|
||||
* Locations:
|
||||
|
@@ -38,29 +38,31 @@ else if (isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'
|
||||
if (isset($_GET['avatar']))
|
||||
{
|
||||
require($phpbb_root_path . 'includes/startup.' . $phpEx);
|
||||
require($phpbb_root_path . 'config.' . $phpEx);
|
||||
|
||||
require($phpbb_root_path . 'phpbb/class_loader.' . $phpEx);
|
||||
$phpbb_class_loader = new \phpbb\class_loader('phpbb\\', "{$phpbb_root_path}phpbb/", $phpEx);
|
||||
$phpbb_class_loader->register();
|
||||
|
||||
$phpbb_config_php_file = new \phpbb\config_php_file($phpbb_root_path, $phpEx);
|
||||
extract($phpbb_config_php_file->get_all());
|
||||
|
||||
if (!defined('PHPBB_INSTALLED') || empty($dbms) || empty($acm_type))
|
||||
{
|
||||
exit;
|
||||
}
|
||||
|
||||
require($phpbb_root_path . 'phpbb/class_loader.' . $phpEx);
|
||||
|
||||
require($phpbb_root_path . 'includes/constants.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/functions.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/functions_container.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/functions_download' . '.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx);
|
||||
|
||||
// Setup class loader first
|
||||
$phpbb_class_loader = new \phpbb\class_loader('phpbb\\', "{$phpbb_root_path}phpbb/", $phpEx);
|
||||
$phpbb_class_loader->register();
|
||||
$phpbb_class_loader_ext = new \phpbb\class_loader('\\', "{$phpbb_root_path}ext/", $phpEx);
|
||||
$phpbb_class_loader_ext->register();
|
||||
|
||||
// Set up container
|
||||
$phpbb_container = phpbb_create_default_container($phpbb_root_path, $phpEx);
|
||||
$phpbb_container_builder = new \phpbb\di\container_builder($phpbb_config_php_file, $phpbb_root_path, $phpEx);
|
||||
$phpbb_container = $phpbb_container_builder->get_container();
|
||||
|
||||
$phpbb_class_loader->set_cache($phpbb_container->get('cache.driver'));
|
||||
$phpbb_class_loader_ext->set_cache($phpbb_container->get('cache.driver'));
|
||||
@@ -73,11 +75,6 @@ if (isset($_GET['avatar']))
|
||||
$db = $phpbb_container->get('dbal.conn');
|
||||
$phpbb_log = $phpbb_container->get('log');
|
||||
|
||||
// Connect to DB
|
||||
if (!@$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false, false))
|
||||
{
|
||||
exit;
|
||||
}
|
||||
unset($dbpasswd);
|
||||
|
||||
request_var('', 0, false, false, $request);
|
||||
|
@@ -410,7 +410,7 @@ class acp_board
|
||||
'ip_check' => array('lang' => 'IP_VALID', 'validate' => 'int', 'type' => 'custom', 'method' => 'select_ip_check', 'explain' => true),
|
||||
'browser_check' => array('lang' => 'BROWSER_VALID', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
'forwarded_for_check' => array('lang' => 'FORWARDED_FOR_VALID', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
'referer_validation' => array('lang' => 'REFERER_VALID', 'validate' => 'int:0:3','type' => 'custom', 'method' => 'select_ref_check', 'explain' => true),
|
||||
'referer_validation' => array('lang' => 'REFERRER_VALID', 'validate' => 'int:0:3','type' => 'custom', 'method' => 'select_ref_check', 'explain' => true),
|
||||
'check_dnsbl' => array('lang' => 'CHECK_DNSBL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
'email_check_mx' => array('lang' => 'EMAIL_CHECK_MX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
'max_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:8:255', 'type' => false, 'method' => false, 'explain' => false,),
|
||||
|
134
phpBB/includes/acp/acp_contact.php
Normal file
134
phpBB/includes/acp/acp_contact.php
Normal file
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ignore
|
||||
*/
|
||||
if (!defined('IN_PHPBB'))
|
||||
{
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @package acp
|
||||
*/
|
||||
class acp_contact
|
||||
{
|
||||
public $u_action;
|
||||
|
||||
public function main($id, $mode)
|
||||
{
|
||||
global $user, $request, $template;
|
||||
global $config, $phpbb_root_path, $phpEx, $phpbb_container;
|
||||
|
||||
$user->add_lang(array('acp/board', 'posting'));
|
||||
|
||||
$this->tpl_name = 'acp_contact';
|
||||
$this->page_title = 'ACP_CONTACT_SETTINGS';
|
||||
$form_name = 'acp_contact';
|
||||
add_form_key($form_name);
|
||||
$error = '';
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
$config_text = $phpbb_container->get('config_text');
|
||||
|
||||
$contact_admin_data = $config_text->get_array(array(
|
||||
'contact_admin_info',
|
||||
'contact_admin_info_uid',
|
||||
'contact_admin_info_bitfield',
|
||||
'contact_admin_info_flags',
|
||||
));
|
||||
|
||||
$contact_admin_info = $contact_admin_data['contact_admin_info'];
|
||||
$contact_admin_info_uid = $contact_admin_data['contact_admin_info_uid'];
|
||||
$contact_admin_info_bitfield= $contact_admin_data['contact_admin_info_bitfield'];
|
||||
$contact_admin_info_flags = $contact_admin_data['contact_admin_info_flags'];
|
||||
|
||||
if ($request->is_set_post('submit') || $request->is_set_post('preview'))
|
||||
{
|
||||
if (!check_form_key($form_name))
|
||||
{
|
||||
$error = $user->lang('FORM_INVALID');
|
||||
}
|
||||
|
||||
$contact_admin_info = $request->variable('contact_admin_info', '', true);
|
||||
|
||||
generate_text_for_storage(
|
||||
$contact_admin_info,
|
||||
$contact_admin_info_uid,
|
||||
$contact_admin_info_bitfield,
|
||||
$contact_admin_info_flags,
|
||||
!$request->variable('disable_bbcode', false),
|
||||
!$request->variable('disable_magic_url', false),
|
||||
!$request->variable('disable_smilies', false)
|
||||
);
|
||||
|
||||
if (empty($error) && $request->is_set_post('submit'))
|
||||
{
|
||||
$config->set('contact_admin_form_enable', $request->variable('contact_admin_form_enable', false));
|
||||
|
||||
$config_text->set_array(array(
|
||||
'contact_admin_info' => $contact_admin_info,
|
||||
'contact_admin_info_uid' => $contact_admin_info_uid,
|
||||
'contact_admin_info_bitfield' => $contact_admin_info_bitfield,
|
||||
'contact_admin_info_flags' => $contact_admin_info_flags,
|
||||
));
|
||||
|
||||
trigger_error($user->lang['CONTACT_US_INFO_UPDATED'] . adm_back_link($this->u_action));
|
||||
}
|
||||
}
|
||||
|
||||
$contact_admin_info_preview = '';
|
||||
if ($request->is_set_post('preview'))
|
||||
{
|
||||
$contact_admin_info_preview = generate_text_for_display($contact_admin_info, $contact_admin_info_uid, $contact_admin_info_bitfield, $contact_admin_info_flags);
|
||||
}
|
||||
|
||||
$contact_admin_edit = generate_text_for_edit($contact_admin_info, $contact_admin_info_uid, $contact_admin_info_flags);
|
||||
|
||||
$template->assign_vars(array(
|
||||
'ERRORS' => $error,
|
||||
'CONTACT_ENABLED' => $config['contact_admin_form_enable'],
|
||||
|
||||
'CONTACT_US_INFO' => $contact_admin_edit['text'],
|
||||
'CONTACT_US_INFO_PREVIEW' => $contact_admin_info_preview,
|
||||
|
||||
'S_BBCODE_DISABLE_CHECKED' => !$contact_admin_edit['allow_bbcode'],
|
||||
'S_SMILIES_DISABLE_CHECKED' => !$contact_admin_edit['allow_smilies'],
|
||||
'S_MAGIC_URL_DISABLE_CHECKED' => !$contact_admin_edit['allow_urls'],
|
||||
|
||||
'BBCODE_STATUS' => $user->lang('BBCODE_IS_ON', '<a href="' . append_sid("{$phpbb_root_path}faq.$phpEx", 'mode=bbcode') . '">', '</a>'),
|
||||
'SMILIES_STATUS' => $user->lang['SMILIES_ARE_ON'],
|
||||
'IMG_STATUS' => $user->lang['IMAGES_ARE_ON'],
|
||||
'FLASH_STATUS' => $user->lang['FLASH_IS_ON'],
|
||||
'URL_STATUS' => $user->lang['URL_IS_ON'],
|
||||
|
||||
'S_BBCODE_ALLOWED' => true,
|
||||
'S_SMILIES_ALLOWED' => true,
|
||||
'S_BBCODE_IMG' => true,
|
||||
'S_BBCODE_FLASH' => true,
|
||||
'S_LINKS_ALLOWED' => true,
|
||||
));
|
||||
|
||||
// Assigning custom bbcodes
|
||||
display_custom_bbcodes();
|
||||
}
|
||||
}
|
@@ -90,7 +90,7 @@ class acp_database
|
||||
$time = time();
|
||||
|
||||
$filename = 'backup_' . $time . '_' . unique_id();
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
case 'mysqli':
|
||||
case 'mysql4':
|
||||
@@ -119,10 +119,6 @@ class acp_database
|
||||
case 'mssqlnative':
|
||||
$extractor = new mssql_extractor($format, $filename, $time, $download, $store);
|
||||
break;
|
||||
|
||||
case 'firebird':
|
||||
$extractor = new firebird_extractor($format, $filename, $time, $download, $store);
|
||||
break;
|
||||
}
|
||||
|
||||
$extractor->write_start($table_prefix);
|
||||
@@ -137,11 +133,10 @@ class acp_database
|
||||
else
|
||||
{
|
||||
// We might wanna empty out all that junk :D
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
case 'sqlite':
|
||||
case 'sqlite3':
|
||||
case 'firebird':
|
||||
$extractor->flush('DELETE FROM ' . $table_name . ";\n");
|
||||
break;
|
||||
|
||||
@@ -325,7 +320,7 @@ class acp_database
|
||||
break;
|
||||
}
|
||||
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
case 'mysql':
|
||||
case 'mysql4':
|
||||
@@ -338,20 +333,6 @@ class acp_database
|
||||
}
|
||||
break;
|
||||
|
||||
case 'firebird':
|
||||
$delim = ";\n";
|
||||
while (($sql = $fgetd($fp, $delim, $read, $seek, $eof)) !== false)
|
||||
{
|
||||
$query = trim($sql);
|
||||
if (substr($query, 0, 8) === 'SET TERM')
|
||||
{
|
||||
$delim = $query[9] . "\n";
|
||||
continue;
|
||||
}
|
||||
$db->sql_query($query);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'postgres':
|
||||
$delim = ";\n";
|
||||
while (($sql = $fgetd($fp, $delim, $read, $seek, $eof)) !== false)
|
||||
@@ -384,10 +365,10 @@ class acp_database
|
||||
{
|
||||
trigger_error($user->lang['RESTORE_FAILURE'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
pg_put_line($db->db_connect_id, $sub . "\n");
|
||||
pg_put_line($db->get_db_connect_id(), $sub . "\n");
|
||||
}
|
||||
pg_put_line($db->db_connect_id, "\\.\n");
|
||||
pg_end_copy($db->db_connect_id);
|
||||
pg_put_line($db->get_db_connect_id(), "\\.\n");
|
||||
pg_end_copy($db->get_db_connect_id());
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -642,7 +623,7 @@ class mysql_extractor extends base_extractor
|
||||
|
||||
if ($new_extract === null)
|
||||
{
|
||||
if ($db->sql_layer === 'mysqli' || version_compare($db->sql_server_info(true), '3.23.20', '>='))
|
||||
if ($db->get_sql_layer() === 'mysqli' || version_compare($db->sql_server_info(true), '3.23.20', '>='))
|
||||
{
|
||||
$new_extract = true;
|
||||
}
|
||||
@@ -665,7 +646,7 @@ class mysql_extractor extends base_extractor
|
||||
function write_data($table_name)
|
||||
{
|
||||
global $db;
|
||||
if ($db->sql_layer === 'mysqli')
|
||||
if ($db->get_sql_layer() === 'mysqli')
|
||||
{
|
||||
$this->write_data_mysqli($table_name);
|
||||
}
|
||||
@@ -680,7 +661,7 @@ class mysql_extractor extends base_extractor
|
||||
global $db;
|
||||
$sql = "SELECT *
|
||||
FROM $table_name";
|
||||
$result = mysqli_query($db->db_connect_id, $sql, MYSQLI_USE_RESULT);
|
||||
$result = mysqli_query($db->get_db_connect_id(), $sql, MYSQLI_USE_RESULT);
|
||||
if ($result != false)
|
||||
{
|
||||
$fields_cnt = mysqli_num_fields($result);
|
||||
@@ -759,7 +740,7 @@ class mysql_extractor extends base_extractor
|
||||
global $db;
|
||||
$sql = "SELECT *
|
||||
FROM $table_name";
|
||||
$result = mysql_unbuffered_query($sql, $db->db_connect_id);
|
||||
$result = mysql_unbuffered_query($sql, $db->get_db_connect_id());
|
||||
|
||||
if ($result != false)
|
||||
{
|
||||
@@ -1012,11 +993,11 @@ class sqlite_extractor extends base_extractor
|
||||
{
|
||||
global $db;
|
||||
|
||||
$col_types = sqlite_fetch_column_types($db->db_connect_id, $table_name);
|
||||
$col_types = sqlite_fetch_column_types($db->get_db_connect_id(), $table_name);
|
||||
|
||||
$sql = "SELECT *
|
||||
FROM $table_name";
|
||||
$result = sqlite_unbuffered_query($db->db_connect_id, $sql);
|
||||
$result = sqlite_unbuffered_query($db->get_db_connect_id(), $sql);
|
||||
$rows = sqlite_fetch_all($result, SQLITE_ASSOC);
|
||||
$sql_insert = 'INSERT INTO ' . $table_name . ' (' . implode(', ', array_keys($col_types)) . ') VALUES (';
|
||||
foreach ($rows as $row)
|
||||
@@ -1572,11 +1553,11 @@ class mssql_extractor extends base_extractor
|
||||
{
|
||||
global $db;
|
||||
|
||||
if ($db->sql_layer === 'mssql')
|
||||
if ($db->get_sql_layer() === 'mssql')
|
||||
{
|
||||
$this->write_data_mssql($table_name);
|
||||
}
|
||||
else if($db->sql_layer === 'mssqlnative')
|
||||
else if($db->get_sql_layer() === 'mssqlnative')
|
||||
{
|
||||
$this->write_data_mssqlnative($table_name);
|
||||
}
|
||||
@@ -2110,235 +2091,6 @@ class oracle_extractor extends base_extractor
|
||||
}
|
||||
}
|
||||
|
||||
class firebird_extractor extends base_extractor
|
||||
{
|
||||
function write_start($prefix)
|
||||
{
|
||||
$sql_data = "--\n";
|
||||
$sql_data .= "-- phpBB Backup Script\n";
|
||||
$sql_data .= "-- Dump of tables for $prefix\n";
|
||||
$sql_data .= "-- DATE : " . gmdate("d-m-Y H:i:s", $this->time) . " GMT\n";
|
||||
$sql_data .= "--\n";
|
||||
$this->flush($sql_data);
|
||||
}
|
||||
|
||||
function write_data($table_name)
|
||||
{
|
||||
global $db;
|
||||
$ary_type = $ary_name = array();
|
||||
|
||||
// Grab all of the data from current table.
|
||||
$sql = "SELECT *
|
||||
FROM $table_name";
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$i_num_fields = ibase_num_fields($result);
|
||||
|
||||
for ($i = 0; $i < $i_num_fields; $i++)
|
||||
{
|
||||
$info = ibase_field_info($result, $i);
|
||||
$ary_type[$i] = $info['type'];
|
||||
$ary_name[$i] = $info['name'];
|
||||
}
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$schema_vals = $schema_fields = array();
|
||||
|
||||
// Build the SQL statement to recreate the data.
|
||||
for ($i = 0; $i < $i_num_fields; $i++)
|
||||
{
|
||||
$str_val = $row[strtolower($ary_name[$i])];
|
||||
|
||||
if (preg_match('#char|text|bool|varbinary|blob#i', $ary_type[$i]))
|
||||
{
|
||||
$str_quote = '';
|
||||
$str_empty = "''";
|
||||
$str_val = sanitize_data_generic(str_replace("'", "''", $str_val));
|
||||
}
|
||||
else if (preg_match('#date|timestamp#i', $ary_type[$i]))
|
||||
{
|
||||
if (empty($str_val))
|
||||
{
|
||||
$str_quote = '';
|
||||
}
|
||||
else
|
||||
{
|
||||
$str_quote = "'";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$str_quote = '';
|
||||
$str_empty = 'NULL';
|
||||
}
|
||||
|
||||
if (empty($str_val) && $str_val !== '0')
|
||||
{
|
||||
$str_val = $str_empty;
|
||||
}
|
||||
|
||||
$schema_vals[$i] = $str_quote . $str_val . $str_quote;
|
||||
$schema_fields[$i] = '"' . $ary_name[$i] . '"';
|
||||
}
|
||||
|
||||
// Take the ordered fields and their associated data and build it
|
||||
// into a valid sql statement to recreate that field in the data.
|
||||
$sql_data = "INSERT INTO $table_name (" . implode(', ', $schema_fields) . ') VALUES (' . implode(', ', $schema_vals) . ");\n";
|
||||
|
||||
$this->flush($sql_data);
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
}
|
||||
|
||||
function write_table($table_name)
|
||||
{
|
||||
global $db;
|
||||
|
||||
$sql_data = '-- Table: ' . $table_name . "\n";
|
||||
$sql_data .= "DROP TABLE $table_name;\n";
|
||||
|
||||
$data_types = array(7 => 'SMALLINT', 8 => 'INTEGER', 10 => 'FLOAT', 12 => 'DATE', 13 => 'TIME', 14 => 'CHARACTER', 27 => 'DOUBLE PRECISION', 35 => 'TIMESTAMP', 37 => 'VARCHAR', 40 => 'CSTRING', 261 => 'BLOB', 701 => 'DECIMAL', 702 => 'NUMERIC');
|
||||
|
||||
$sql_data .= "\nCREATE TABLE $table_name (\n";
|
||||
|
||||
$sql = 'SELECT DISTINCT R.RDB$FIELD_NAME as FNAME, R.RDB$NULL_FLAG as NFLAG, R.RDB$DEFAULT_SOURCE as DSOURCE, F.RDB$FIELD_TYPE as FTYPE, F.RDB$FIELD_SUB_TYPE as STYPE, F.RDB$FIELD_LENGTH as FLEN
|
||||
FROM RDB$RELATION_FIELDS R
|
||||
JOIN RDB$FIELDS F ON R.RDB$FIELD_SOURCE=F.RDB$FIELD_NAME
|
||||
LEFT JOIN RDB$FIELD_DIMENSIONS D ON R.RDB$FIELD_SOURCE = D.RDB$FIELD_NAME
|
||||
WHERE F.RDB$SYSTEM_FLAG = 0
|
||||
AND R.RDB$RELATION_NAME = \''. $table_name . '\'
|
||||
ORDER BY R.RDB$FIELD_POSITION';
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$rows = array();
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$line = "\t" . '"' . $row['fname'] . '" ' . $data_types[$row['ftype']];
|
||||
|
||||
if ($row['ftype'] == 261 && $row['stype'] == 1)
|
||||
{
|
||||
$line .= ' SUB_TYPE TEXT';
|
||||
}
|
||||
|
||||
if ($row['ftype'] == 37 || $row['ftype'] == 14)
|
||||
{
|
||||
$line .= ' (' . $row['flen'] . ')';
|
||||
}
|
||||
|
||||
if (!empty($row['dsource']))
|
||||
{
|
||||
$line .= ' ' . $row['dsource'];
|
||||
}
|
||||
|
||||
if (!empty($row['nflag']))
|
||||
{
|
||||
$line .= ' NOT NULL';
|
||||
}
|
||||
$rows[] = $line;
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
$sql_data .= implode(",\n", $rows);
|
||||
$sql_data .= "\n);\n";
|
||||
$keys = array();
|
||||
|
||||
$sql = 'SELECT I.RDB$FIELD_NAME as NAME
|
||||
FROM RDB$RELATION_CONSTRAINTS RC, RDB$INDEX_SEGMENTS I, RDB$INDICES IDX
|
||||
WHERE (I.RDB$INDEX_NAME = RC.RDB$INDEX_NAME)
|
||||
AND (IDX.RDB$INDEX_NAME = RC.RDB$INDEX_NAME)
|
||||
AND (RC.RDB$RELATION_NAME = \''. $table_name . '\')
|
||||
ORDER BY I.RDB$FIELD_POSITION';
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$keys[] = $row['name'];
|
||||
}
|
||||
|
||||
if (sizeof($keys))
|
||||
{
|
||||
$sql_data .= "\nALTER TABLE $table_name ADD PRIMARY KEY (" . implode(', ', $keys) . ');';
|
||||
}
|
||||
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
$sql = 'SELECT I.RDB$INDEX_NAME as INAME, I.RDB$UNIQUE_FLAG as UFLAG, S.RDB$FIELD_NAME as FNAME
|
||||
FROM RDB$INDICES I JOIN RDB$INDEX_SEGMENTS S ON S.RDB$INDEX_NAME=I.RDB$INDEX_NAME
|
||||
WHERE (I.RDB$SYSTEM_FLAG IS NULL OR I.RDB$SYSTEM_FLAG=0)
|
||||
AND I.RDB$FOREIGN_KEY IS NULL
|
||||
AND I.RDB$RELATION_NAME = \''. $table_name . '\'
|
||||
AND I.RDB$INDEX_NAME NOT STARTING WITH \'RDB$\'
|
||||
ORDER BY S.RDB$FIELD_POSITION';
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$index = array();
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$index[$row['iname']]['unique'] = !empty($row['uflag']);
|
||||
$index[$row['iname']]['values'][] = $row['fname'];
|
||||
}
|
||||
|
||||
foreach ($index as $index_name => $data)
|
||||
{
|
||||
$sql_data .= "\nCREATE ";
|
||||
if ($data['unique'])
|
||||
{
|
||||
$sql_data .= 'UNIQUE ';
|
||||
}
|
||||
$sql_data .= "INDEX $index_name ON $table_name(" . implode(', ', $data['values']) . ");";
|
||||
}
|
||||
$sql_data .= "\n";
|
||||
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
$sql = 'SELECT D1.RDB$DEPENDENT_NAME as DNAME, D1.RDB$FIELD_NAME as FNAME, D1.RDB$DEPENDENT_TYPE, R1.RDB$RELATION_NAME
|
||||
FROM RDB$DEPENDENCIES D1
|
||||
LEFT JOIN RDB$RELATIONS R1 ON ((D1.RDB$DEPENDENT_NAME = R1.RDB$RELATION_NAME) AND (NOT (R1.RDB$VIEW_BLR IS NULL)))
|
||||
WHERE (D1.RDB$DEPENDED_ON_TYPE = 0)
|
||||
AND (D1.RDB$DEPENDENT_TYPE <> 3)
|
||||
AND (D1.RDB$DEPENDED_ON_NAME = \'' . $table_name . '\')
|
||||
UNION SELECT DISTINCT F2.RDB$RELATION_NAME, D2.RDB$FIELD_NAME, D2.RDB$DEPENDENT_TYPE, R2.RDB$RELATION_NAME FROM RDB$DEPENDENCIES D2, RDB$RELATION_FIELDS F2
|
||||
LEFT JOIN RDB$RELATIONS R2 ON ((F2.RDB$RELATION_NAME = R2.RDB$RELATION_NAME) AND (NOT (R2.RDB$VIEW_BLR IS NULL)))
|
||||
WHERE (D2.RDB$DEPENDENT_TYPE = 3)
|
||||
AND (D2.RDB$DEPENDENT_NAME = F2.RDB$FIELD_SOURCE)
|
||||
AND (D2.RDB$DEPENDED_ON_NAME = \'' . $table_name . '\')
|
||||
ORDER BY 1, 2';
|
||||
$result = $db->sql_query($sql);
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$sql = 'SELECT T1.RDB$DEPENDED_ON_NAME as GEN, T1.RDB$FIELD_NAME, T1.RDB$DEPENDED_ON_TYPE
|
||||
FROM RDB$DEPENDENCIES T1
|
||||
WHERE (T1.RDB$DEPENDENT_NAME = \'' . $row['dname'] . '\')
|
||||
AND (T1.RDB$DEPENDENT_TYPE = 2 AND T1.RDB$DEPENDED_ON_TYPE = 14)
|
||||
UNION ALL SELECT DISTINCT D.RDB$DEPENDED_ON_NAME, D.RDB$FIELD_NAME, D.RDB$DEPENDED_ON_TYPE
|
||||
FROM RDB$DEPENDENCIES D, RDB$RELATION_FIELDS F
|
||||
WHERE (D.RDB$DEPENDENT_TYPE = 3)
|
||||
AND (D.RDB$DEPENDENT_NAME = F.RDB$FIELD_SOURCE)
|
||||
AND (F.RDB$RELATION_NAME = \'' . $row['dname'] . '\')
|
||||
ORDER BY 1,2';
|
||||
$result2 = $db->sql_query($sql);
|
||||
$row2 = $db->sql_fetchrow($result2);
|
||||
$db->sql_freeresult($result2);
|
||||
$gen_name = $row2['gen'];
|
||||
|
||||
$sql_data .= "\nDROP GENERATOR " . $gen_name . ";";
|
||||
$sql_data .= "\nSET TERM ^ ;";
|
||||
$sql_data .= "\nCREATE GENERATOR " . $gen_name . "^";
|
||||
$sql_data .= "\nSET GENERATOR " . $gen_name . " TO 0^\n";
|
||||
$sql_data .= "\nCREATE TRIGGER {$row['dname']} FOR $table_name";
|
||||
$sql_data .= "\nBEFORE INSERT\nAS\nBEGIN";
|
||||
$sql_data .= "\n NEW.{$row['fname']} = GEN_ID(" . $gen_name . ", 1);";
|
||||
$sql_data .= "\nEND^\n";
|
||||
$sql_data .= "\nSET TERM ; ^\n";
|
||||
}
|
||||
|
||||
$this->flush($sql_data);
|
||||
|
||||
$db->sql_freeresult($result);
|
||||
}
|
||||
}
|
||||
|
||||
// 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)
|
||||
function get_usable_memory()
|
||||
{
|
||||
|
@@ -201,7 +201,7 @@ class acp_email
|
||||
$messenger->set_mail_priority($priority);
|
||||
|
||||
$messenger->assign_vars(array(
|
||||
'CONTACT_EMAIL' => $config['board_contact'],
|
||||
'CONTACT_EMAIL' => phpbb_get_board_contact($config, $phpEx),
|
||||
'MESSAGE' => htmlspecialchars_decode($message))
|
||||
);
|
||||
|
||||
|
@@ -70,7 +70,7 @@ class acp_extensions
|
||||
// If they've specified an extension, let's load the metadata manager and validate it.
|
||||
if ($ext_name)
|
||||
{
|
||||
$md_manager = new \phpbb\extension\metadata_manager($ext_name, $config, $phpbb_extension_manager, $template, $phpbb_root_path);
|
||||
$md_manager = new \phpbb\extension\metadata_manager($ext_name, $config, $phpbb_extension_manager, $template, $user, $phpbb_root_path);
|
||||
|
||||
try
|
||||
{
|
||||
@@ -137,7 +137,7 @@ class acp_extensions
|
||||
trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if ($phpbb_extension_manager->enabled($ext_name))
|
||||
if ($phpbb_extension_manager->is_enabled($ext_name))
|
||||
{
|
||||
redirect($this->u_action);
|
||||
}
|
||||
@@ -162,7 +162,7 @@ class acp_extensions
|
||||
trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if ($phpbb_extension_manager->enabled($ext_name))
|
||||
if ($phpbb_extension_manager->is_enabled($ext_name))
|
||||
{
|
||||
redirect($this->u_action);
|
||||
}
|
||||
@@ -194,7 +194,7 @@ class acp_extensions
|
||||
break;
|
||||
|
||||
case 'disable_pre':
|
||||
if (!$phpbb_extension_manager->enabled($ext_name))
|
||||
if (!$phpbb_extension_manager->is_enabled($ext_name))
|
||||
{
|
||||
redirect($this->u_action);
|
||||
}
|
||||
@@ -209,7 +209,7 @@ class acp_extensions
|
||||
break;
|
||||
|
||||
case 'disable':
|
||||
if (!$phpbb_extension_manager->enabled($ext_name))
|
||||
if (!$phpbb_extension_manager->is_enabled($ext_name))
|
||||
{
|
||||
redirect($this->u_action);
|
||||
}
|
||||
@@ -234,7 +234,7 @@ class acp_extensions
|
||||
break;
|
||||
|
||||
case 'delete_data_pre':
|
||||
if ($phpbb_extension_manager->enabled($ext_name))
|
||||
if ($phpbb_extension_manager->is_enabled($ext_name))
|
||||
{
|
||||
redirect($this->u_action);
|
||||
}
|
||||
@@ -248,7 +248,7 @@ class acp_extensions
|
||||
break;
|
||||
|
||||
case 'delete_data':
|
||||
if ($phpbb_extension_manager->enabled($ext_name))
|
||||
if ($phpbb_extension_manager->is_enabled($ext_name))
|
||||
{
|
||||
redirect($this->u_action);
|
||||
}
|
||||
@@ -527,7 +527,7 @@ class acp_extensions
|
||||
|
||||
$version_helper = new \phpbb\version_helper($this->cache, $this->config, $this->user);
|
||||
$version_helper->set_current_version($meta['version']);
|
||||
$version_helper->set_file_location($version_check ['host'], $version_check ['directory'], $version_check ['filename']);
|
||||
$version_helper->set_file_location($version_check['host'], $version_check['directory'], $version_check['filename']);
|
||||
$version_helper->force_stability($this->config['extension_force_unstable'] ? 'unstable' : null);
|
||||
|
||||
return $updates = $version_helper->get_suggested_updates($force_update, $force_cache);
|
||||
|
@@ -1827,7 +1827,7 @@ class acp_forums
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
case 'mysql4':
|
||||
case 'mysqli':
|
||||
|
@@ -27,7 +27,7 @@ class acp_groups
|
||||
{
|
||||
global $config, $db, $user, $auth, $template, $cache;
|
||||
global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix, $file_uploads;
|
||||
global $request, $phpbb_container;
|
||||
global $request, $phpbb_container, $phpbb_dispatcher;
|
||||
|
||||
$user->add_lang('acp/groups');
|
||||
$this->tpl_name = 'acp_groups';
|
||||
@@ -410,6 +410,42 @@ class acp_groups
|
||||
'colour' => array('hex_colour', true),
|
||||
);
|
||||
|
||||
/**
|
||||
* Request group data and operate on it
|
||||
*
|
||||
* @event core.acp_manage_group_request_data
|
||||
* @var string action Type of the action: add|edit
|
||||
* @var int group_id The group id
|
||||
* @var array group_row Array with new group data
|
||||
* @var array error Array of errors, if you add errors
|
||||
* ensure to update the template variables
|
||||
* S_ERROR and ERROR_MSG to display it
|
||||
* @var string group_name The group name
|
||||
* @var string group_desc The group description
|
||||
* @var int group_type The group type
|
||||
* @var bool allow_desc_bbcode Allow bbcode in group description: true|false
|
||||
* @var bool allow_desc_urls Allow urls in group description: true|false
|
||||
* @var bool allow_desc_smilies Allow smiles in group description: true|false
|
||||
* @var array submit_ary Array with new group data
|
||||
* @var array validation_checks Array with validation data
|
||||
* @since 3.1.0-b5
|
||||
*/
|
||||
$vars = array(
|
||||
'action',
|
||||
'group_id',
|
||||
'group_row',
|
||||
'error',
|
||||
'group_name',
|
||||
'group_desc',
|
||||
'group_type',
|
||||
'allow_desc_bbcode',
|
||||
'allow_desc_urls',
|
||||
'allow_desc_smilies',
|
||||
'submit_ary',
|
||||
'validation_checks',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.acp_manage_group_request_data', compact($vars)));
|
||||
|
||||
if ($validation_error = validate_data($submit_ary, $validation_checks))
|
||||
{
|
||||
// Replace "error" string with its real, localised form
|
||||
@@ -442,6 +478,42 @@ class acp_groups
|
||||
'skip_auth' => 'int',
|
||||
);
|
||||
|
||||
/**
|
||||
* Initialise data before we display the add/edit form
|
||||
*
|
||||
* @event core.acp_manage_group_initialise_data
|
||||
* @var string action Type of the action: add|edit
|
||||
* @var int group_id The group id
|
||||
* @var array group_row Array with new group data
|
||||
* @var array error Array of errors, if you add errors
|
||||
* ensure to update the template variables
|
||||
* S_ERROR and ERROR_MSG to display it
|
||||
* @var string group_name The group name
|
||||
* @var string group_desc The group description
|
||||
* @var int group_type The group type
|
||||
* @var bool allow_desc_bbcode Allow bbcode in group description: true|false
|
||||
* @var bool allow_desc_urls Allow urls in group description: true|false
|
||||
* @var bool allow_desc_smilies Allow smiles in group description: true|false
|
||||
* @var array submit_ary Array with new group data
|
||||
* @var array test_variables Array with variables for test
|
||||
* @since 3.1.0-b5
|
||||
*/
|
||||
$vars = array(
|
||||
'action',
|
||||
'group_id',
|
||||
'group_row',
|
||||
'error',
|
||||
'group_name',
|
||||
'group_desc',
|
||||
'group_type',
|
||||
'allow_desc_bbcode',
|
||||
'allow_desc_urls',
|
||||
'allow_desc_smilies',
|
||||
'submit_ary',
|
||||
'test_variables',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.acp_manage_group_initialise_data', compact($vars)));
|
||||
|
||||
foreach ($test_variables as $test => $type)
|
||||
{
|
||||
if (isset($submit_ary[$test]) && ($action == 'add' || $group_row['group_' . $test] != $submit_ary[$test] || isset($group_attributes['group_avatar']) && strpos($test, 'avatar') === 0 || in_array($test, $set_attributes)))
|
||||
@@ -664,6 +736,39 @@ class acp_groups
|
||||
'L_AVATAR_EXPLAIN' => phpbb_avatar_explanation_string(),
|
||||
));
|
||||
|
||||
/**
|
||||
* Modify group template data before we display the form
|
||||
*
|
||||
* @event core.acp_manage_group_display_form
|
||||
* @var string action Type of the action: add|edit
|
||||
* @var bool update Do we display the form only
|
||||
* or did the user press submit
|
||||
* @var int group_id The group id
|
||||
* @var array group_row Array with new group data
|
||||
* @var string group_name The group name
|
||||
* @var int group_type The group type
|
||||
* @var array group_desc_data The group description data
|
||||
* @var string group_rank The group rank
|
||||
* @var string rank_options The rank options
|
||||
* @var array error Array of errors, if you add errors
|
||||
* ensure to update the template variables
|
||||
* S_ERROR and ERROR_MSG to display it
|
||||
* @since 3.1.0-b5
|
||||
*/
|
||||
$vars = array(
|
||||
'action',
|
||||
'update',
|
||||
'group_id',
|
||||
'group_row',
|
||||
'group_desc_data',
|
||||
'group_name',
|
||||
'group_type',
|
||||
'group_rank',
|
||||
'rank_options',
|
||||
'error',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.acp_manage_group_display_form', compact($vars)));
|
||||
|
||||
return;
|
||||
break;
|
||||
|
||||
|
@@ -538,11 +538,10 @@ class acp_icons
|
||||
// The user has already selected a smilies_pak file
|
||||
if ($current == 'delete')
|
||||
{
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
case 'sqlite':
|
||||
case 'sqlite3':
|
||||
case 'firebird':
|
||||
$db->sql_query('DELETE FROM ' . $table);
|
||||
break;
|
||||
|
||||
|
@@ -47,13 +47,13 @@ class acp_jabber
|
||||
$this->tpl_name = 'acp_jabber';
|
||||
$this->page_title = 'ACP_JABBER_SETTINGS';
|
||||
|
||||
$jab_enable = request_var('jab_enable', (bool) $config['jab_enable']);
|
||||
$jab_host = request_var('jab_host', (string) $config['jab_host']);
|
||||
$jab_port = request_var('jab_port', (int) $config['jab_port']);
|
||||
$jab_username = request_var('jab_username', (string) $config['jab_username']);
|
||||
$jab_password = request_var('jab_password', (string) $config['jab_password']);
|
||||
$jab_package_size = request_var('jab_package_size', (int) $config['jab_package_size']);
|
||||
$jab_use_ssl = request_var('jab_use_ssl', (bool) $config['jab_use_ssl']);
|
||||
$jab_enable = request_var('jab_enable', (bool) $config['jab_enable']);
|
||||
$jab_host = request_var('jab_host', (string) $config['jab_host']);
|
||||
$jab_port = request_var('jab_port', (int) $config['jab_port']);
|
||||
$jab_username = request_var('jab_username', (string) $config['jab_username']);
|
||||
$jab_password = request_var('jab_password', (string) $config['jab_password']);
|
||||
$jab_package_size = request_var('jab_package_size', (int) $config['jab_package_size']);
|
||||
$jab_use_ssl = request_var('jab_use_ssl', (bool) $config['jab_use_ssl']);
|
||||
|
||||
$form_name = 'acp_jabber';
|
||||
add_form_key($form_name);
|
||||
|
@@ -54,28 +54,26 @@ class acp_logs
|
||||
{
|
||||
if (confirm_box(true))
|
||||
{
|
||||
$where_sql = '';
|
||||
$conditions = array();
|
||||
|
||||
if ($deletemark && sizeof($marked))
|
||||
{
|
||||
$sql_in = array();
|
||||
foreach ($marked as $mark)
|
||||
{
|
||||
$sql_in[] = $mark;
|
||||
}
|
||||
$where_sql = ' AND ' . $db->sql_in_set('log_id', $sql_in);
|
||||
unset($sql_in);
|
||||
$conditions['log_id'] = array('IN' => $marked);
|
||||
}
|
||||
|
||||
if ($where_sql || $deleteall)
|
||||
if ($deleteall)
|
||||
{
|
||||
$sql = 'DELETE FROM ' . LOG_TABLE . "
|
||||
WHERE log_type = {$this->log_type}
|
||||
$where_sql";
|
||||
$db->sql_query($sql);
|
||||
if ($sort_days)
|
||||
{
|
||||
$conditions['log_time'] = array('>=', time() - ($sort_days * 86400));
|
||||
}
|
||||
|
||||
add_log('admin', 'LOG_CLEAR_' . strtoupper($mode));
|
||||
$keywords = utf8_normalize_nfc(request_var('keywords', '', true));
|
||||
$conditions['keywords'] = $keywords;
|
||||
}
|
||||
|
||||
$phpbb_log = $phpbb_container->get('log');
|
||||
$phpbb_log->delete($mode, $conditions);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -269,11 +269,10 @@ class acp_main
|
||||
break;
|
||||
|
||||
case 'db_track':
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
case 'sqlite':
|
||||
case 'sqlite3':
|
||||
case 'firebird':
|
||||
$db->sql_query('DELETE FROM ' . TOPICS_POSTED_TABLE);
|
||||
break;
|
||||
|
||||
@@ -375,11 +374,10 @@ class acp_main
|
||||
|
||||
foreach ($tables as $table)
|
||||
{
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
case 'sqlite':
|
||||
case 'sqlite3':
|
||||
case 'firebird':
|
||||
$db->sql_query("DELETE FROM $table");
|
||||
break;
|
||||
|
||||
|
@@ -561,14 +561,14 @@ class acp_modules
|
||||
$directory = $phpbb_root_path . 'includes/' . $module_class . '/info/';
|
||||
$fileinfo = array();
|
||||
|
||||
$finder = $phpbb_extension_manager->get_finder();
|
||||
$finder = $phpbb_extension_manager->get_finder($use_all_available);
|
||||
|
||||
$modules = $finder
|
||||
->extension_suffix('_module')
|
||||
->extension_directory("/$module_class")
|
||||
->core_path("includes/$module_class/info/")
|
||||
->core_prefix($module_class . '_')
|
||||
->get_classes(true, $use_all_available);
|
||||
->get_classes(true);
|
||||
|
||||
foreach ($modules as $cur_module)
|
||||
{
|
||||
|
@@ -253,7 +253,7 @@ class acp_permission_roles
|
||||
{
|
||||
$sql = 'SELECT auth_option_id, auth_option
|
||||
FROM ' . ACL_OPTIONS_TABLE . "
|
||||
WHERE auth_option " . $db->sql_like_expression($permission_type . $db->any_char) . "
|
||||
WHERE auth_option " . $db->sql_like_expression($permission_type . $db->get_any_char()) . "
|
||||
AND auth_option <> '{$permission_type}'
|
||||
ORDER BY auth_option_id";
|
||||
$result = $db->sql_query($sql);
|
||||
@@ -315,7 +315,7 @@ class acp_permission_roles
|
||||
// We need to fill the auth options array with ACL_NO options ;)
|
||||
$sql = 'SELECT auth_option_id, auth_option
|
||||
FROM ' . ACL_OPTIONS_TABLE . "
|
||||
WHERE auth_option " . $db->sql_like_expression($permission_type . $db->any_char) . "
|
||||
WHERE auth_option " . $db->sql_like_expression($permission_type . $db->get_any_char()) . "
|
||||
AND auth_option <> '{$permission_type}'
|
||||
ORDER BY auth_option_id";
|
||||
$result = $db->sql_query($sql);
|
||||
@@ -519,7 +519,7 @@ class acp_permission_roles
|
||||
// Get complete auth array
|
||||
$sql = 'SELECT auth_option, auth_option_id
|
||||
FROM ' . ACL_OPTIONS_TABLE . "
|
||||
WHERE auth_option " . $db->sql_like_expression($permission_type . $db->any_char);
|
||||
WHERE auth_option " . $db->sql_like_expression($permission_type . $db->get_any_char());
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$auth_settings = array();
|
||||
|
@@ -331,14 +331,6 @@ class acp_permissions
|
||||
}
|
||||
}
|
||||
|
||||
// Setting permissions screen
|
||||
$s_hidden_fields = build_hidden_fields(array(
|
||||
'user_id' => $user_id,
|
||||
'group_id' => $group_id,
|
||||
'forum_id' => $forum_id,
|
||||
'type' => $permission_type)
|
||||
);
|
||||
|
||||
// Go through the screens/options needed and present them in correct order
|
||||
foreach ($permission_victim as $victim)
|
||||
{
|
||||
@@ -471,6 +463,14 @@ class acp_permissions
|
||||
// If there are more than 5 forums selected the admin is not able to select all users/groups too.
|
||||
// We need to see if the number of forums can be increased or need to be decreased.
|
||||
|
||||
// Setting permissions screen
|
||||
$s_hidden_fields = build_hidden_fields(array(
|
||||
'user_id' => $user_id,
|
||||
'group_id' => $group_id,
|
||||
'forum_id' => $forum_id,
|
||||
'type' => $permission_type,
|
||||
));
|
||||
|
||||
$template->assign_vars(array(
|
||||
'U_ACTION' => $this->u_action,
|
||||
'ANONYMOUS_USER_ID' => ANONYMOUS,
|
||||
@@ -507,6 +507,14 @@ class acp_permissions
|
||||
return;
|
||||
}
|
||||
|
||||
// Setting permissions screen
|
||||
$s_hidden_fields = build_hidden_fields(array(
|
||||
'user_id' => $user_id,
|
||||
'group_id' => $group_id,
|
||||
'forum_id' => $forum_id,
|
||||
'type' => $permission_type,
|
||||
));
|
||||
|
||||
// Do not allow forum_ids being set and no other setting defined (will bog down the server too much)
|
||||
if (sizeof($forum_id) && !sizeof($user_id) && !sizeof($group_id))
|
||||
{
|
||||
@@ -1230,7 +1238,7 @@ class acp_permissions
|
||||
|
||||
$sql = 'SELECT auth_option_id
|
||||
FROM ' . ACL_OPTIONS_TABLE . '
|
||||
WHERE auth_option ' . $db->sql_like_expression($permission_type . $db->any_char);
|
||||
WHERE auth_option ' . $db->sql_like_expression($permission_type . $db->get_any_char());
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
|
@@ -47,7 +47,7 @@ class acp_php_info
|
||||
// for this was nabbed from the PHP annotated manual
|
||||
preg_match_all('#<body[^>]*>(.*)</body>#si', $phpinfo, $output);
|
||||
|
||||
if (empty($phpinfo) || empty($output))
|
||||
if (empty($phpinfo) || empty($output[1][0]))
|
||||
{
|
||||
trigger_error('NO_PHPINFO_AVAILABLE', E_USER_WARNING);
|
||||
}
|
||||
|
@@ -112,7 +112,7 @@ class acp_profile
|
||||
$db->sql_query('DELETE FROM ' . PROFILE_FIELDS_LANG_TABLE . " WHERE field_id = $field_id");
|
||||
$db->sql_query('DELETE FROM ' . PROFILE_LANG_TABLE . " WHERE field_id = $field_id");
|
||||
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
case 'sqlite':
|
||||
case 'sqlite3':
|
||||
@@ -1196,7 +1196,7 @@ class acp_profile
|
||||
{
|
||||
global $db;
|
||||
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
case 'mysql':
|
||||
case 'mysql4':
|
||||
@@ -1267,11 +1267,6 @@ class acp_profile
|
||||
|
||||
break;
|
||||
|
||||
case 'firebird':
|
||||
$sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . ' ADD "' . strtoupper($field_ident) . '" ' . $sql_type;
|
||||
|
||||
break;
|
||||
|
||||
case 'oracle':
|
||||
$sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " ADD $field_ident " . $sql_type;
|
||||
|
||||
|
@@ -436,8 +436,8 @@ class acp_prune
|
||||
$sort_by_types = array('username', 'user_email', 'user_posts', 'user_regdate', 'user_lastvisit');
|
||||
|
||||
$where_sql = '';
|
||||
$where_sql .= ($username) ? ' AND username_clean ' . $db->sql_like_expression(str_replace('*', $db->any_char, utf8_clean_string($username))) : '';
|
||||
$where_sql .= ($email) ? ' AND user_email ' . $db->sql_like_expression(str_replace('*', $db->any_char, $email)) . ' ' : '';
|
||||
$where_sql .= ($username) ? ' AND username_clean ' . $db->sql_like_expression(str_replace('*', $db->get_any_char(), utf8_clean_string($username))) : '';
|
||||
$where_sql .= ($email) ? ' AND user_email ' . $db->sql_like_expression(str_replace('*', $db->get_any_char(), $email)) . ' ' : '';
|
||||
$where_sql .= $joined_sql;
|
||||
$where_sql .= ($count) ? " AND user_posts " . $key_match[$count_select] . ' ' . (int) $count . ' ' : '';
|
||||
|
||||
|
@@ -219,7 +219,7 @@ class acp_reasons
|
||||
$other_reason_id = (int) $db->sql_fetchfield('reason_id');
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
// The ugly one!
|
||||
case 'mysqli':
|
||||
@@ -252,7 +252,6 @@ class acp_reasons
|
||||
// Teh standard
|
||||
case 'postgres':
|
||||
case 'oracle':
|
||||
case 'firebird':
|
||||
case 'sqlite':
|
||||
case 'sqlite3':
|
||||
// Change the reports using this reason to 'other'
|
||||
|
@@ -209,8 +209,8 @@ class acp_styles
|
||||
trigger_error($this->user->lang['NO_MATCHING_STYLES_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
$message = implode('<br />', $messages);
|
||||
$message .= '<br /><br />' . sprintf($this->user->lang['STYLE_INSTALLED_RETURN_STYLES'], $this->u_base_action . '&mode=style');
|
||||
$message .= '<br /><br />' . sprintf($this->user->lang['STYLE_INSTALLED_RETURN_UNINSTALLED'], $this->u_base_action . '&mode=install');
|
||||
$message .= '<br /><br /><a href="' . $this->u_base_action . '&mode=style' . '">« ' . $this->user->lang('STYLE_INSTALLED_RETURN_INSTALLED_STYLES') . '</a>';
|
||||
$message .= '<br /><br /><a href="' . $this->u_base_action . '&mode=install' . '">» ' . $this->user->lang('STYLE_INSTALLED_RETURN_UNINSTALLED_STYLES') . '</a>';
|
||||
trigger_error($message, E_USER_NOTICE);
|
||||
}
|
||||
|
||||
|
@@ -814,7 +814,7 @@ class acp_users
|
||||
$check_ary += array(
|
||||
'email' => array(
|
||||
array('string', false, 6, 60),
|
||||
array('email', $user_row['user_email'])
|
||||
array('user_email', $user_row['user_email']),
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -922,7 +922,6 @@ class acp_users
|
||||
$sql_ary += array(
|
||||
'user_password' => $passwords_manager->hash($data['new_password']),
|
||||
'user_passchg' => time(),
|
||||
'user_pass_convert' => 0,
|
||||
);
|
||||
|
||||
$user->reset_login_keys($user_id);
|
||||
@@ -2385,7 +2384,7 @@ class acp_users
|
||||
// Select auth options
|
||||
$sql = 'SELECT auth_option, is_local, is_global
|
||||
FROM ' . ACL_OPTIONS_TABLE . '
|
||||
WHERE auth_option ' . $db->sql_like_expression($db->any_char . '_') . '
|
||||
WHERE auth_option ' . $db->sql_like_expression($db->get_any_char() . '_') . '
|
||||
AND is_global = 1
|
||||
ORDER BY auth_option';
|
||||
$result = $db->sql_query($sql);
|
||||
@@ -2405,7 +2404,7 @@ class acp_users
|
||||
{
|
||||
$sql = 'SELECT auth_option, is_local, is_global
|
||||
FROM ' . ACL_OPTIONS_TABLE . "
|
||||
WHERE auth_option " . $db->sql_like_expression($db->any_char . '_') . "
|
||||
WHERE auth_option " . $db->sql_like_expression($db->get_any_char() . '_') . "
|
||||
AND is_local = 1
|
||||
ORDER BY is_global DESC, auth_option";
|
||||
$result = $db->sql_query($sql);
|
||||
|
@@ -835,7 +835,7 @@ class auth_admin extends \phpbb\auth\auth
|
||||
}
|
||||
|
||||
// Remove current auth options...
|
||||
$auth_option_ids = array((int)$any_option_id);
|
||||
$auth_option_ids = array((int) $any_option_id);
|
||||
foreach ($auth as $auth_option => $auth_setting)
|
||||
{
|
||||
$auth_option_ids[] = (int) $this->acl_options['id'][$auth_option];
|
||||
@@ -1024,7 +1024,7 @@ class auth_admin extends \phpbb\auth\auth
|
||||
// Get permission type
|
||||
$sql = 'SELECT auth_option, auth_option_id
|
||||
FROM ' . ACL_OPTIONS_TABLE . "
|
||||
WHERE auth_option " . $db->sql_like_expression($permission_type . $db->any_char);
|
||||
WHERE auth_option " . $db->sql_like_expression($permission_type . $db->get_any_char());
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$auth_id_ary = array();
|
||||
|
30
phpBB/includes/acp/info/acp_contact.php
Normal file
30
phpBB/includes/acp/info/acp_contact.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @package module_install
|
||||
*/
|
||||
class acp_contact_info
|
||||
{
|
||||
public function module()
|
||||
{
|
||||
return array(
|
||||
'filename' => 'acp_contact',
|
||||
'title' => 'ACP_CONTACT',
|
||||
'version' => '1.0.0',
|
||||
'modes' => array(
|
||||
'contact' => array('title' => 'ACP_CONTACT_SETTINGS', 'auth' => 'acl_a_board', 'cat' => array('ACP_BOARD_CONFIGURATION')),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@@ -96,7 +96,8 @@ class phpbb_captcha_plugins_captcha_abstract
|
||||
else
|
||||
{
|
||||
$link = append_sid($phpbb_root_path . 'ucp.' . $phpEx, 'mode=confirm&confirm_id=' . $this->confirm_id . '&type=' . $this->type);
|
||||
$explain = $user->lang(($this->type != CONFIRM_POST) ? 'CONFIRM_EXPLAIN' : 'POST_CONFIRM_EXPLAIN', '<a href="mailto:' . htmlspecialchars($config['board_contact']) . '">', '</a>');
|
||||
$contact_link = phpbb_get_board_contact_link($config, $phpbb_root_path, $phpEx);
|
||||
$explain = $user->lang(($this->type != CONFIRM_POST) ? 'CONFIRM_EXPLAIN' : 'POST_CONFIRM_EXPLAIN', '<a href="' . $contact_link . '">', '</a>');
|
||||
|
||||
$template->assign_vars(array(
|
||||
'CONFIRM_IMAGE_LINK' => $link,
|
||||
|
@@ -150,7 +150,7 @@ class phpbb_recaptcha extends phpbb_default_captcha
|
||||
|
||||
function get_template()
|
||||
{
|
||||
global $config, $user, $template;
|
||||
global $config, $user, $template, $phpbb_root_path, $phpEx;
|
||||
|
||||
if ($this->is_solved())
|
||||
{
|
||||
@@ -158,7 +158,8 @@ class phpbb_recaptcha extends phpbb_default_captcha
|
||||
}
|
||||
else
|
||||
{
|
||||
$explain = $user->lang(($this->type != CONFIRM_POST) ? 'CONFIRM_EXPLAIN' : 'POST_CONFIRM_EXPLAIN', '<a href="mailto:' . htmlspecialchars($config['board_contact']) . '">', '</a>');
|
||||
$contact_link = phpbb_get_board_contact_link($config, $phpbb_root_path, $phpEx);
|
||||
$explain = $user->lang(($this->type != CONFIRM_POST) ? 'CONFIRM_EXPLAIN' : 'POST_CONFIRM_EXPLAIN', '<a href="' . $contact_link . '">', '</a>');
|
||||
|
||||
$template->assign_vars(array(
|
||||
'RECAPTCHA_SERVER' => $this->recaptcha_server,
|
||||
|
@@ -28,7 +28,7 @@ if (!defined('IN_PHPBB'))
|
||||
*/
|
||||
|
||||
// phpBB Version
|
||||
define('PHPBB_VERSION', '3.1.0-b4');
|
||||
define('PHPBB_VERSION', '3.1.0-RC2');
|
||||
|
||||
// QA-related
|
||||
// define('PHPBB_QA', 1);
|
||||
@@ -233,6 +233,7 @@ define('BBCODES_TABLE', $table_prefix . 'bbcodes');
|
||||
define('BOOKMARKS_TABLE', $table_prefix . 'bookmarks');
|
||||
define('BOTS_TABLE', $table_prefix . 'bots');
|
||||
define('CONFIG_TABLE', $table_prefix . 'config');
|
||||
define('CONFIG_TEXT_TABLE', $table_prefix . 'config_text');
|
||||
define('CONFIRM_TABLE', $table_prefix . 'confirm');
|
||||
define('DISALLOW_TABLE', $table_prefix . 'disallow');
|
||||
define('DRAFTS_TABLE', $table_prefix . 'drafts');
|
||||
|
@@ -20,6 +20,37 @@ if (!defined('IN_PHPBB'))
|
||||
}
|
||||
|
||||
// Common global functions
|
||||
/**
|
||||
* Load the autoloaders added by the extensions.
|
||||
*
|
||||
* @param string $phpbb_root_path Path to the phpbb root directory.
|
||||
*/
|
||||
function phpbb_load_extensions_autoloaders($phpbb_root_path)
|
||||
{
|
||||
$iterator = new \RecursiveIteratorIterator(
|
||||
new \phpbb\recursive_dot_prefix_filter_iterator(
|
||||
new \RecursiveDirectoryIterator(
|
||||
$phpbb_root_path . 'ext/',
|
||||
\FilesystemIterator::SKIP_DOTS
|
||||
)
|
||||
),
|
||||
\RecursiveIteratorIterator::SELF_FIRST
|
||||
);
|
||||
$iterator->setMaxDepth(2);
|
||||
|
||||
foreach ($iterator as $file_info)
|
||||
{
|
||||
if ($file_info->getFilename() === 'vendor' && $iterator->getDepth() === 2)
|
||||
{
|
||||
$filename = $file_info->getRealPath() . '/autoload.php';
|
||||
if (file_exists($filename))
|
||||
{
|
||||
require $filename;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Casts a variable to the given type.
|
||||
*
|
||||
@@ -2818,8 +2849,8 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
|
||||
$user->lang[$result['error_msg']],
|
||||
($config['email_enable']) ? '<a href="' . append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=sendpassword') . '">' : '',
|
||||
($config['email_enable']) ? '</a>' : '',
|
||||
($config['board_contact']) ? '<a href="mailto:' . htmlspecialchars($config['board_contact']) . '">' : '',
|
||||
($config['board_contact']) ? '</a>' : ''
|
||||
'<a href="' . phpbb_get_board_contact_link($config, $phpbb_root_path, $phpEx) . '">',
|
||||
'</a>'
|
||||
);
|
||||
break;
|
||||
|
||||
@@ -2830,7 +2861,7 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
|
||||
// Assign admin contact to some error messages
|
||||
if ($result['error_msg'] == 'LOGIN_ERROR_USERNAME' || $result['error_msg'] == 'LOGIN_ERROR_PASSWORD')
|
||||
{
|
||||
$err = (!$config['board_contact']) ? sprintf($user->lang[$result['error_msg']], '', '') : sprintf($user->lang[$result['error_msg']], '<a href="mailto:' . htmlspecialchars($config['board_contact']) . '">', '</a>');
|
||||
$err = sprintf($user->lang[$result['error_msg']], '<a href="' . append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=contactadmin') . '">', '</a>');
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -2854,7 +2885,8 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
|
||||
$s_hidden_fields['credential'] = $credential;
|
||||
}
|
||||
|
||||
$auth_provider = $phpbb_container->get('auth.provider.' . $config['auth_method']);
|
||||
$provider_collection = $phpbb_container->get('auth.provider_collection');
|
||||
$auth_provider = $provider_collection->get_provider();
|
||||
|
||||
$auth_provider_data = $auth_provider->get_login_data();
|
||||
if ($auth_provider_data)
|
||||
@@ -3997,7 +4029,7 @@ function obtain_guest_count($item_id = 0, $item = 'forum')
|
||||
|
||||
// Get number of online guests
|
||||
|
||||
if ($db->sql_layer === 'sqlite' || $db->sql_layer === 'sqlite3')
|
||||
if ($db->get_sql_layer() === 'sqlite' || $db->get_sql_layer() === 'sqlite3')
|
||||
{
|
||||
$sql = 'SELECT COUNT(session_ip) as num_guests
|
||||
FROM (
|
||||
@@ -4880,6 +4912,7 @@ function page_header($page_title = '', $display_online_list = false, $item_id =
|
||||
|
||||
'PRIVATE_MESSAGE_COUNT' => (!empty($user->data['user_unread_privmsg'])) ? $user->data['user_unread_privmsg'] : 0,
|
||||
'CURRENT_USER_AVATAR' => phpbb_get_user_avatar($user->data),
|
||||
'CURRENT_USERNAME_SIMPLE' => get_username_string('no_profile', $user->data['user_id'], $user->data['username'], $user->data['user_colour']),
|
||||
'CURRENT_USERNAME_FULL' => get_username_string('full', $user->data['user_id'], $user->data['username'], $user->data['user_colour']),
|
||||
'UNREAD_NOTIFICATIONS_COUNT' => ($notifications !== false) ? $notifications['unread_count'] : '',
|
||||
'NOTIFICATIONS_COUNT' => ($notifications !== false) ? $notifications['unread_count'] : '',
|
||||
@@ -4922,6 +4955,7 @@ function page_header($page_title = '', $display_online_list = false, $item_id =
|
||||
'U_SEARCH_UNREAD' => append_sid("{$phpbb_root_path}search.$phpEx", 'search_id=unreadposts'),
|
||||
'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']) ? 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_TERMS_USE' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=terms'),
|
||||
'U_PRIVACY' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=privacy'),
|
||||
@@ -5028,6 +5062,72 @@ function page_header($page_title = '', $display_online_list = false, $item_id =
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check and display the SQL report if requested.
|
||||
*
|
||||
* @param \phpbb\request\request_interface $request Request object
|
||||
* @param \phpbb\auth\auth $auth Auth object
|
||||
* @param \phpbb\db\driver\driver_interface $db Database connection
|
||||
*/
|
||||
function phpbb_check_and_display_sql_report(\phpbb\request\request_interface $request, \phpbb\auth\auth $auth, \phpbb\db\driver\driver_interface $db)
|
||||
{
|
||||
if ($request->variable('explain', false) && $auth->acl_get('a_') && defined('DEBUG'))
|
||||
{
|
||||
$db->sql_report('display');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate the debug output string
|
||||
*
|
||||
* @param \phpbb\db\driver\driver_interface $db Database connection
|
||||
* @param \phpbb\config\config $config Config object
|
||||
* @param \phpbb\auth\auth $auth Auth object
|
||||
* @param \phpbb\user $user User object
|
||||
* @return string
|
||||
*/
|
||||
function phpbb_generate_debug_output(phpbb\db\driver\driver_interface $db, \phpbb\config\config $config, \phpbb\auth\auth $auth, \phpbb\user $user)
|
||||
{
|
||||
$debug_info = array();
|
||||
|
||||
// Output page creation time
|
||||
if (defined('PHPBB_DISPLAY_LOAD_TIME'))
|
||||
{
|
||||
if (isset($GLOBALS['starttime']))
|
||||
{
|
||||
$totaltime = microtime(true) - $GLOBALS['starttime'];
|
||||
$debug_info[] = sprintf('<abbr title="SQL time: %.3fs / PHP time: %.3fs">Time: %.3fs</abbr>', $db->get_sql_time(), ($totaltime - $db->get_sql_time()), $totaltime);
|
||||
}
|
||||
|
||||
$debug_info[] = sprintf('<abbr title="Cached: %d">Queries: %d</abbr>', $db->sql_num_queries(true), $db->sql_num_queries());
|
||||
|
||||
$memory_usage = memory_get_peak_usage();
|
||||
if ($memory_usage)
|
||||
{
|
||||
$memory_usage = get_formatted_filesize($memory_usage);
|
||||
|
||||
$debug_info[] = 'Peak Memory Usage: ' . $memory_usage;
|
||||
}
|
||||
}
|
||||
|
||||
if (defined('DEBUG'))
|
||||
{
|
||||
$debug_info[] = 'GZIP: ' . (($config['gzip_compress'] && @extension_loaded('zlib')) ? 'On' : 'Off');
|
||||
|
||||
if ($user->load)
|
||||
{
|
||||
$debug_info[] = 'Load: ' . $user->load;
|
||||
}
|
||||
|
||||
if ($auth->acl_get('a_'))
|
||||
{
|
||||
$debug_info[] = '<a href="' . build_url() . '&explain=1">SQL Explain</a>';
|
||||
}
|
||||
}
|
||||
|
||||
return implode(' | ', $debug_info);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate page footer
|
||||
*
|
||||
@@ -5060,37 +5160,10 @@ function page_footer($run_cron = true, $display_template = true, $exit_handler =
|
||||
return;
|
||||
}
|
||||
|
||||
// Output page creation time
|
||||
if (defined('DEBUG'))
|
||||
{
|
||||
$mtime = explode(' ', microtime());
|
||||
$totaltime = $mtime[0] + $mtime[1] - $starttime;
|
||||
|
||||
if ($request->variable('explain', false) && $auth->acl_get('a_') && defined('DEBUG') && method_exists($db, 'sql_report'))
|
||||
{
|
||||
$db->sql_report('display');
|
||||
}
|
||||
|
||||
$debug_output = sprintf('Time : %.3fs | ' . $db->sql_num_queries() . ' Queries | GZIP : ' . (($config['gzip_compress'] && @extension_loaded('zlib')) ? 'On' : 'Off') . (($user->load) ? ' | Load : ' . $user->load : ''), $totaltime);
|
||||
|
||||
if ($auth->acl_get('a_') && defined('DEBUG'))
|
||||
{
|
||||
if (function_exists('memory_get_peak_usage'))
|
||||
{
|
||||
if ($memory_usage = memory_get_peak_usage())
|
||||
{
|
||||
$memory_usage = get_formatted_filesize($memory_usage);
|
||||
|
||||
$debug_output .= ' | Peak Memory Usage: ' . $memory_usage;
|
||||
}
|
||||
}
|
||||
|
||||
$debug_output .= ' | <a href="' . build_url() . '&explain=1">Explain</a>';
|
||||
}
|
||||
}
|
||||
phpbb_check_and_display_sql_report($request, $auth, $db);
|
||||
|
||||
$template->assign_vars(array(
|
||||
'DEBUG_OUTPUT' => (defined('DEBUG')) ? $debug_output : '',
|
||||
'DEBUG_OUTPUT' => phpbb_generate_debug_output($db, $config, $auth, $user),
|
||||
'TRANSLATION_INFO' => (!empty($user->lang['TRANSLATION_INFO'])) ? $user->lang['TRANSLATION_INFO'] : '',
|
||||
'CREDIT_LINE' => $user->lang('POWERED_BY', '<a href="https://www.phpbb.com/">phpBB</a>® Forum Software © phpBB Limited'),
|
||||
|
||||
@@ -5254,47 +5327,40 @@ function phpbb_to_numeric($input)
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert either 3.0 dbms or 3.1 db driver class name to 3.1 db driver class name.
|
||||
* Get the board contact details (e.g. for emails)
|
||||
*
|
||||
* If $dbms is a valid 3.1 db driver class name, returns it unchanged.
|
||||
* Otherwise prepends phpbb\db\driver\ to the dbms to convert a 3.0 dbms
|
||||
* to 3.1 db driver class name.
|
||||
*
|
||||
* @param string $dbms dbms parameter
|
||||
* @return db driver class
|
||||
* @param \phpbb\config\config $config
|
||||
* @param string $phpEx
|
||||
* @return string
|
||||
*/
|
||||
function phpbb_convert_30_dbms_to_31($dbms)
|
||||
function phpbb_get_board_contact(\phpbb\config\config $config, $phpEx)
|
||||
{
|
||||
// Note: this check is done first because mysqli extension
|
||||
// supplies a mysqli class, and class_exists($dbms) would return
|
||||
// true for mysqli class.
|
||||
// However, per the docblock any valid 3.1 driver name should be
|
||||
// recognized by this function, and have priority over 3.0 dbms.
|
||||
if (class_exists('phpbb\db\driver\\' . $dbms))
|
||||
if ($config['contact_admin_form_enable'])
|
||||
{
|
||||
return 'phpbb\db\driver\\' . $dbms;
|
||||
return generate_board_url() . '/memberlist.' . $phpEx . '?mode=contactadmin';
|
||||
}
|
||||
|
||||
if (class_exists($dbms))
|
||||
else
|
||||
{
|
||||
// Additionally we could check that $dbms extends phpbb\db\driver\driver.
|
||||
// http://php.net/manual/en/class.reflectionclass.php
|
||||
// Beware of possible performance issues:
|
||||
// http://stackoverflow.com/questions/294582/php-5-reflection-api-performance
|
||||
// We could check for interface implementation in all paths or
|
||||
// only when we do not prepend phpbb\db\driver\.
|
||||
|
||||
/*
|
||||
$reflection = new \ReflectionClass($dbms);
|
||||
|
||||
if ($reflection->isSubclassOf('phpbb\db\driver\driver'))
|
||||
{
|
||||
return $dbms;
|
||||
}
|
||||
*/
|
||||
|
||||
return $dbms;
|
||||
return $config['board_contact'];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a clickable board contact details link
|
||||
*
|
||||
* @param \phpbb\config\config $config
|
||||
* @param string $phpbb_root_path
|
||||
* @param string $phpEx
|
||||
* @return string
|
||||
*/
|
||||
function phpbb_get_board_contact_link(\phpbb\config\config $config, $phpbb_root_path, $phpEx)
|
||||
{
|
||||
if ($config['contact_admin_form_enable'])
|
||||
{
|
||||
return append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=contactadmin');
|
||||
}
|
||||
else
|
||||
{
|
||||
return 'mailto:' . htmlspecialchars($config['board_contact']);
|
||||
}
|
||||
|
||||
throw new \RuntimeException("You have specified an invalid dbms driver: $dbms");
|
||||
}
|
||||
|
@@ -146,37 +146,10 @@ function adm_page_footer($copyright_html = true)
|
||||
return;
|
||||
}
|
||||
|
||||
// Output page creation time
|
||||
if (defined('DEBUG'))
|
||||
{
|
||||
$mtime = explode(' ', microtime());
|
||||
$totaltime = $mtime[0] + $mtime[1] - $starttime;
|
||||
|
||||
if ($request->variable('explain', false) && $auth->acl_get('a_') && defined('DEBUG') && method_exists($db, 'sql_report'))
|
||||
{
|
||||
$db->sql_report('display');
|
||||
}
|
||||
|
||||
$debug_output = sprintf('Time : %.3fs | ' . $db->sql_num_queries() . ' Queries | GZIP : ' . (($config['gzip_compress']) ? 'On' : 'Off') . (($user->load) ? ' | Load : ' . $user->load : ''), $totaltime);
|
||||
|
||||
if ($auth->acl_get('a_') && defined('DEBUG'))
|
||||
{
|
||||
if (function_exists('memory_get_peak_usage'))
|
||||
{
|
||||
if ($memory_usage = memory_get_peak_usage())
|
||||
{
|
||||
$memory_usage = get_formatted_filesize($memory_usage);
|
||||
|
||||
$debug_output .= ' | Peak Memory Usage: ' . $memory_usage;
|
||||
}
|
||||
}
|
||||
|
||||
$debug_output .= ' | <a href="' . build_url() . '&explain=1">Explain</a>';
|
||||
}
|
||||
}
|
||||
phpbb_check_and_display_sql_report($request, $auth, $db);
|
||||
|
||||
$template->assign_vars(array(
|
||||
'DEBUG_OUTPUT' => (defined('DEBUG')) ? $debug_output : '',
|
||||
'DEBUG_OUTPUT' => phpbb_generate_debug_output($db, $config, $auth, $user),
|
||||
'TRANSLATION_INFO' => (!empty($user->lang['TRANSLATION_INFO'])) ? $user->lang['TRANSLATION_INFO'] : '',
|
||||
'S_COPYRIGHT_HTML' => $copyright_html,
|
||||
'CREDIT_LINE' => $user->lang('POWERED_BY', '<a href="https://www.phpbb.com/">phpBB</a>® Forum Software © phpBB Limited'),
|
||||
|
@@ -1435,7 +1435,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
|
||||
{
|
||||
case 'topic_moved':
|
||||
$db->sql_transaction('begin');
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
case 'mysql4':
|
||||
case 'mysqli':
|
||||
@@ -2441,11 +2441,10 @@ function phpbb_cache_moderators($db, $cache, $auth)
|
||||
$cache->destroy('sql', MODERATOR_CACHE_TABLE);
|
||||
|
||||
// Clear table
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
case 'sqlite':
|
||||
case 'sqlite3':
|
||||
case 'firebird':
|
||||
$db->sql_query('DELETE FROM ' . MODERATOR_CACHE_TABLE);
|
||||
break;
|
||||
|
||||
@@ -2492,7 +2491,7 @@ function phpbb_cache_moderators($db, $cache, $auth)
|
||||
AND NOT (ug.group_leader = 1 AND g.group_skip_auth = 1)
|
||||
AND ' . $db->sql_in_set('ug.user_id', $ug_id_ary) . "
|
||||
AND ug.user_pending = 0
|
||||
AND o.auth_option " . $db->sql_like_expression('m_' . $db->any_char),
|
||||
AND o.auth_option " . $db->sql_like_expression('m_' . $db->get_any_char()),
|
||||
);
|
||||
$sql = $db->sql_build_query('SELECT', $sql_ary_deny);
|
||||
$result = $db->sql_query($sql);
|
||||
@@ -2698,11 +2697,11 @@ function phpbb_update_foes($db, $auth, $group_id = false, $user_id = false)
|
||||
return;
|
||||
}
|
||||
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
case 'mysqli':
|
||||
case 'mysql4':
|
||||
$sql = 'DELETE ' . (($db->sql_layer === 'mysqli' || version_compare($db->sql_server_info(true), '4.1', '>=')) ? 'z.*' : ZEBRA_TABLE) . '
|
||||
$sql = 'DELETE ' . (($db->get_sql_layer() === 'mysqli' || version_compare($db->sql_server_info(true), '4.1', '>=')) ? 'z.*' : ZEBRA_TABLE) . '
|
||||
FROM ' . ZEBRA_TABLE . ' z, ' . USER_GROUP_TABLE . ' ug
|
||||
WHERE z.zebra_id = ug.user_id
|
||||
AND z.foe = 1
|
||||
@@ -2855,7 +2854,7 @@ function get_database_size()
|
||||
$database_size = false;
|
||||
|
||||
// This code is heavily influenced by a similar routine in phpMyAdmin 2.2.0
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
case 'mysql':
|
||||
case 'mysql4':
|
||||
@@ -2871,7 +2870,7 @@ function get_database_size()
|
||||
|
||||
if (preg_match('#(3\.23|[45]\.)#', $version))
|
||||
{
|
||||
$db_name = (preg_match('#^(?:3\.23\.(?:[6-9]|[1-9]{2}))|[45]\.#', $version)) ? "`{$db->dbname}`" : $db->dbname;
|
||||
$db_name = (preg_match('#^(?:3\.23\.(?:[6-9]|[1-9]{2}))|[45]\.#', $version)) ? "`{$db->get_db_name()}`" : $db->get_db_name();
|
||||
|
||||
$sql = 'SHOW TABLE STATUS
|
||||
FROM ' . $db_name;
|
||||
@@ -2900,17 +2899,6 @@ function get_database_size()
|
||||
}
|
||||
break;
|
||||
|
||||
case 'firebird':
|
||||
global $dbname;
|
||||
|
||||
// if it on the local machine, we can get lucky
|
||||
if (file_exists($dbname))
|
||||
{
|
||||
$database_size = filesize($dbname);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'sqlite':
|
||||
case 'sqlite3':
|
||||
global $dbhost;
|
||||
@@ -2958,7 +2946,7 @@ function get_database_size()
|
||||
|
||||
if ($row['proname'] == 'pg_database_size')
|
||||
{
|
||||
$database = $db->dbname;
|
||||
$database = $db->get_db_name();
|
||||
if (strpos($database, '.') !== false)
|
||||
{
|
||||
list($database, ) = explode('.', $database);
|
||||
@@ -3030,7 +3018,7 @@ function get_remote_file($host, $directory, $filename, &$errstr, &$errno, $port
|
||||
}
|
||||
else if (stripos($line, '404 not found') !== false)
|
||||
{
|
||||
$errstr = $user->lang('FILE_NOT_FOUND', $filename);
|
||||
$errstr = $user->lang('FILE_NOT_FOUND', $filename);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@@ -1,291 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
use Symfony\Component\Config\FileLocator;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Dumper\PhpDumper;
|
||||
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
|
||||
|
||||
/**
|
||||
* @ignore
|
||||
*/
|
||||
if (!defined('IN_PHPBB'))
|
||||
{
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get DB connection from config.php.
|
||||
*
|
||||
* Used to bootstrap the container.
|
||||
*
|
||||
* @param string $config_file
|
||||
* @return \phpbb\db\driver\driver_interface
|
||||
*/
|
||||
function phpbb_bootstrap_db_connection($config_file)
|
||||
{
|
||||
require($config_file);
|
||||
$dbal_driver_class = phpbb_convert_30_dbms_to_31($dbms);
|
||||
|
||||
$db = new $dbal_driver_class();
|
||||
$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, defined('PHPBB_DB_NEW_LINK'));
|
||||
|
||||
return $db;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get table prefix from config.php.
|
||||
*
|
||||
* Used to bootstrap the container.
|
||||
*
|
||||
* @param string $config_file
|
||||
* @return string table prefix
|
||||
*/
|
||||
function phpbb_bootstrap_table_prefix($config_file)
|
||||
{
|
||||
require($config_file);
|
||||
return $table_prefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get enabled extensions.
|
||||
*
|
||||
* Used to bootstrap the container.
|
||||
*
|
||||
* @param string $config_file
|
||||
* @param string $phpbb_root_path
|
||||
* @return array enabled extensions
|
||||
*/
|
||||
function phpbb_bootstrap_enabled_exts($config_file, $phpbb_root_path)
|
||||
{
|
||||
$db = phpbb_bootstrap_db_connection($config_file);
|
||||
$table_prefix = phpbb_bootstrap_table_prefix($config_file);
|
||||
$extension_table = $table_prefix.'ext';
|
||||
|
||||
$sql = 'SELECT *
|
||||
FROM ' . $extension_table . '
|
||||
WHERE ext_active = 1';
|
||||
|
||||
$result = $db->sql_query($sql);
|
||||
$rows = $db->sql_fetchrowset($result);
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
$exts = array();
|
||||
foreach ($rows as $row)
|
||||
{
|
||||
$exts[$row['ext_name']] = $phpbb_root_path . 'ext/' . $row['ext_name'] . '/';
|
||||
}
|
||||
|
||||
return $exts;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the ContainerBuilder object
|
||||
*
|
||||
* @param array $extensions Array of Container extension objects
|
||||
* @param string $phpbb_root_path Root path
|
||||
* @param string $php_ext PHP Extension
|
||||
* @return ContainerBuilder object
|
||||
*/
|
||||
function phpbb_create_container(array $extensions, $phpbb_root_path, $php_ext)
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
|
||||
foreach ($extensions as $extension)
|
||||
{
|
||||
$container->registerExtension($extension);
|
||||
$container->loadFromExtension($extension->getAlias());
|
||||
}
|
||||
|
||||
$container->setParameter('core.root_path', $phpbb_root_path);
|
||||
$container->setParameter('core.php_ext', $php_ext);
|
||||
|
||||
return $container;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create installer container
|
||||
*
|
||||
* @param string $phpbb_root_path Root path
|
||||
* @param string $php_ext PHP Extension
|
||||
* @return ContainerBuilder object
|
||||
*/
|
||||
function phpbb_create_install_container($phpbb_root_path, $php_ext)
|
||||
{
|
||||
$other_config_path = $phpbb_root_path . 'install/update/new/config/';
|
||||
$config_path = file_exists($other_config_path . 'services.yml') ? $other_config_path : $phpbb_root_path . 'config/';
|
||||
|
||||
$core = new \phpbb\di\extension\core($config_path);
|
||||
$container = phpbb_create_container(array($core), $phpbb_root_path, $php_ext);
|
||||
|
||||
$container->setParameter('core.root_path', $phpbb_root_path);
|
||||
$container->setParameter('core.adm_relative_path', $phpbb_adm_relative_path);
|
||||
$container->setParameter('core.php_ext', $php_ext);
|
||||
$container->setParameter('core.table_prefix', '');
|
||||
|
||||
$container->register('dbal.conn')->setSynthetic(true);
|
||||
|
||||
$container->setAlias('cache.driver', 'cache.driver.install');
|
||||
|
||||
$container->compile();
|
||||
|
||||
return $container;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create updater container
|
||||
*
|
||||
* @param string $phpbb_root_path Root path
|
||||
* @param string $php_ext PHP Extension
|
||||
* @param array $config_path Path to config directory
|
||||
* @return ContainerBuilder object (compiled)
|
||||
*/
|
||||
function phpbb_create_update_container($phpbb_root_path, $php_ext, $config_path)
|
||||
{
|
||||
$config_file = $phpbb_root_path . 'config.' . $php_ext;
|
||||
return phpbb_create_compiled_container(
|
||||
$config_file,
|
||||
array(
|
||||
new phpbb\di\extension\config($config_file),
|
||||
new phpbb\di\extension\core($config_path),
|
||||
),
|
||||
array(
|
||||
new phpbb\di\pass\collection_pass(),
|
||||
new phpbb\di\pass\kernel_pass(),
|
||||
),
|
||||
$phpbb_root_path,
|
||||
$php_ext
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a compiled ContainerBuilder object
|
||||
*
|
||||
* @param array $extensions Array of Container extension objects
|
||||
* @param array $passes Array of Compiler Pass objects
|
||||
* @param string $phpbb_root_path Root path
|
||||
* @param string $php_ext PHP Extension
|
||||
* @return ContainerBuilder object (compiled)
|
||||
*/
|
||||
function phpbb_create_compiled_container($config_file, array $extensions, array $passes, $phpbb_root_path, $php_ext)
|
||||
{
|
||||
// Create the final container to be compiled and cached
|
||||
$container = phpbb_create_container($extensions, $phpbb_root_path, $php_ext);
|
||||
|
||||
// Compile the container
|
||||
foreach ($passes as $pass)
|
||||
{
|
||||
$container->addCompilerPass($pass);
|
||||
}
|
||||
$container->compile();
|
||||
|
||||
return $container;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a compiled and dumped ContainerBuilder object
|
||||
*
|
||||
* @param array $extensions Array of Container extension objects
|
||||
* @param array $passes Array of Compiler Pass objects
|
||||
* @param string $phpbb_root_path Root path
|
||||
* @param string $php_ext PHP Extension
|
||||
* @return ContainerBuilder object (compiled)
|
||||
*/
|
||||
function phpbb_create_dumped_container($config_file, array $extensions, array $passes, $phpbb_root_path, $php_ext)
|
||||
{
|
||||
// Check for our cached container; if it exists, use it
|
||||
$container_filename = phpbb_container_filename($phpbb_root_path, $php_ext);
|
||||
if (file_exists($container_filename))
|
||||
{
|
||||
require($container_filename);
|
||||
return new phpbb_cache_container();
|
||||
}
|
||||
|
||||
$container = phpbb_create_compiled_container($config_file, $extensions, $passes, $phpbb_root_path, $php_ext);
|
||||
|
||||
// Lastly, we create our cached container class
|
||||
$dumper = new PhpDumper($container);
|
||||
$cached_container_dump = $dumper->dump(array(
|
||||
'class' => 'phpbb_cache_container',
|
||||
'base_class' => 'Symfony\\Component\\DependencyInjection\\ContainerBuilder',
|
||||
));
|
||||
|
||||
file_put_contents($container_filename, $cached_container_dump);
|
||||
|
||||
return $container;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an environment-specific ContainerBuilder object
|
||||
*
|
||||
* If debug is enabled, the container is re-compiled every time.
|
||||
* This ensures that the latest changes will always be reflected
|
||||
* during development.
|
||||
*
|
||||
* Otherwise it will get the existing dumped container and use
|
||||
* that one instead.
|
||||
*
|
||||
* @param array $extensions Array of Container extension objects
|
||||
* @param array $passes Array of Compiler Pass objects
|
||||
* @param string $phpbb_root_path Root path
|
||||
* @param string $php_ext PHP Extension
|
||||
* @return ContainerBuilder object (compiled)
|
||||
*/
|
||||
function phpbb_create_dumped_container_unless_debug($config_file, array $extensions, array $passes, $phpbb_root_path, $php_ext)
|
||||
{
|
||||
$container_factory = defined('DEBUG_CONTAINER') ? 'phpbb_create_compiled_container' : 'phpbb_create_dumped_container';
|
||||
return $container_factory($config_file, $extensions, $passes, $phpbb_root_path, $php_ext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a default ContainerBuilder object
|
||||
*
|
||||
* Contains the default configuration of the phpBB container.
|
||||
*
|
||||
* @param array $extensions Array of Container extension objects
|
||||
* @param array $passes Array of Compiler Pass objects
|
||||
* @return ContainerBuilder object (compiled)
|
||||
*/
|
||||
function phpbb_create_default_container($phpbb_root_path, $php_ext)
|
||||
{
|
||||
$config_file = $phpbb_root_path . 'config.' . $php_ext;
|
||||
$installed_exts = phpbb_bootstrap_enabled_exts($config_file, $phpbb_root_path);
|
||||
|
||||
return phpbb_create_dumped_container_unless_debug(
|
||||
$config_file,
|
||||
array(
|
||||
new \phpbb\di\extension\config($config_file),
|
||||
new \phpbb\di\extension\core($phpbb_root_path . 'config'),
|
||||
new \phpbb\di\extension\ext($installed_exts),
|
||||
),
|
||||
array(
|
||||
new \phpbb\di\pass\collection_pass(),
|
||||
new \phpbb\di\pass\kernel_pass(),
|
||||
),
|
||||
$phpbb_root_path,
|
||||
$php_ext
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the filename under which the dumped container will be stored.
|
||||
*
|
||||
* @param string $phpbb_root_path Root path
|
||||
* @param string $php_ext PHP Extension
|
||||
* @return Path for dumped container
|
||||
*/
|
||||
function phpbb_container_filename($phpbb_root_path, $php_ext)
|
||||
{
|
||||
$filename = str_replace(array('/', '.'), array('slash', 'dot'), $phpbb_root_path);
|
||||
return $phpbb_root_path . 'cache/container_' . $filename . '.' . $php_ext;
|
||||
}
|
@@ -174,8 +174,9 @@ function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list
|
||||
$template->assign_block_vars('jumpbox_forums', array(
|
||||
'FORUM_ID' => ($select_all) ? 0 : -1,
|
||||
'FORUM_NAME' => ($select_all) ? $user->lang['ALL_FORUMS'] : $user->lang['SELECT_FORUM'],
|
||||
'S_FORUM_COUNT' => $iteration)
|
||||
);
|
||||
'S_FORUM_COUNT' => $iteration,
|
||||
'LINK' => $phpbb_path_helper->append_url_params($action, array('f' => $forum_id)),
|
||||
));
|
||||
|
||||
$iteration++;
|
||||
$display_jumpbox = true;
|
||||
@@ -188,8 +189,9 @@ function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list
|
||||
'S_FORUM_COUNT' => $iteration,
|
||||
'S_IS_CAT' => ($row['forum_type'] == FORUM_CAT) ? true : false,
|
||||
'S_IS_LINK' => ($row['forum_type'] == FORUM_LINK) ? true : false,
|
||||
'S_IS_POST' => ($row['forum_type'] == FORUM_POST) ? true : false)
|
||||
);
|
||||
'S_IS_POST' => ($row['forum_type'] == FORUM_POST) ? true : false,
|
||||
'LINK' => $phpbb_path_helper->append_url_params($action, array('f' => $row['forum_id'])),
|
||||
));
|
||||
|
||||
for ($i = 0; $i < $padding; $i++)
|
||||
{
|
||||
@@ -773,44 +775,47 @@ function make_clickable($text, $server_url = false, $class = 'postlink')
|
||||
static $static_class;
|
||||
static $magic_url_match_args;
|
||||
|
||||
if (!is_array($magic_url_match_args) || $static_class != $class)
|
||||
if (!isset($magic_url_match_args[$server_url]) || $static_class != $class)
|
||||
{
|
||||
$static_class = $class;
|
||||
$class = ($static_class) ? ' class="' . $static_class . '"' : '';
|
||||
$local_class = ($static_class) ? ' class="' . $static_class . '-local"' : '';
|
||||
|
||||
$magic_url_match_args = array();
|
||||
if (!is_array($magic_url_match_args))
|
||||
{
|
||||
$magic_url_match_args = array();
|
||||
}
|
||||
|
||||
// relative urls for this board
|
||||
$magic_url_match_args[] = array(
|
||||
$magic_url_match_args[$server_url][] = array(
|
||||
'#(^|[\n\t (>.])(' . preg_quote($server_url, '#') . ')/(' . get_preg_expression('relative_url_inline') . ')#i',
|
||||
MAGIC_URL_LOCAL,
|
||||
$local_class,
|
||||
);
|
||||
|
||||
// matches a xxxx://aaaaa.bbb.cccc. ...
|
||||
$magic_url_match_args[] = array(
|
||||
$magic_url_match_args[$server_url][] = array(
|
||||
'#(^|[\n\t (>.])(' . get_preg_expression('url_inline') . ')#i',
|
||||
MAGIC_URL_FULL,
|
||||
$class,
|
||||
);
|
||||
|
||||
// matches a "www.xxxx.yyyy[/zzzz]" kinda lazy URL thing
|
||||
$magic_url_match_args[] = array(
|
||||
$magic_url_match_args[$server_url][] = array(
|
||||
'#(^|[\n\t (>])(' . get_preg_expression('www_url_inline') . ')#i',
|
||||
MAGIC_URL_WWW,
|
||||
$class,
|
||||
);
|
||||
|
||||
// matches an email@domain type address at the start of a line, or after a space or after what might be a BBCode.
|
||||
$magic_url_match_args[] = array(
|
||||
$magic_url_match_args[$server_url][] = array(
|
||||
'/(^|[\n\t (>])(' . get_preg_expression('email') . ')/i',
|
||||
MAGIC_URL_EMAIL,
|
||||
'',
|
||||
);
|
||||
}
|
||||
|
||||
foreach ($magic_url_match_args as $magic_args)
|
||||
foreach ($magic_url_match_args[$server_url] as $magic_args)
|
||||
{
|
||||
if (preg_match($magic_args[0], $text, $matches))
|
||||
{
|
||||
@@ -1331,9 +1336,9 @@ function get_username_string($mode, $user_id, $username, $username_colour = '',
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$_profile_cache['base_url'] = append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&u={USER_ID}');
|
||||
$_profile_cache['tpl_noprofile'] = '{USERNAME}';
|
||||
$_profile_cache['tpl_noprofile'] = '<span class="username">{USERNAME}</span>';
|
||||
$_profile_cache['tpl_noprofile_colour'] = '<span style="color: {USERNAME_COLOUR};" class="username-coloured">{USERNAME}</span>';
|
||||
$_profile_cache['tpl_profile'] = '<a href="{PROFILE_URL}">{USERNAME}</a>';
|
||||
$_profile_cache['tpl_profile'] = '<a href="{PROFILE_URL}" class="username">{USERNAME}</a>';
|
||||
$_profile_cache['tpl_profile_colour'] = '<a href="{PROFILE_URL}" style="color: {USERNAME_COLOUR};" class="username-coloured">{USERNAME}</a>';
|
||||
}
|
||||
|
||||
@@ -1401,7 +1406,7 @@ function get_username_string($mode, $user_id, $username, $username_colour = '',
|
||||
|
||||
// no break;
|
||||
}
|
||||
|
||||
|
||||
if (!isset($username_string))
|
||||
{
|
||||
if (($mode == 'full' && !$profile_url) || $mode == 'no_profile')
|
||||
@@ -1449,16 +1454,19 @@ function get_username_string($mode, $user_id, $username, $username_colour = '',
|
||||
/**
|
||||
* Add an option to the quick-mod tools.
|
||||
*
|
||||
* @param string $url The recepting URL for the quickmod actions.
|
||||
* @param string $option The language key for the value of the option.
|
||||
* @param string $lang_string The language string to use.
|
||||
*/
|
||||
function phpbb_add_quickmod_option($option, $lang_string)
|
||||
function phpbb_add_quickmod_option($url, $option, $lang_string)
|
||||
{
|
||||
global $template, $user;
|
||||
global $template, $user, $phpbb_path_helper;
|
||||
|
||||
$lang_string = $user->lang($lang_string);
|
||||
$template->assign_block_vars('quickmod', array(
|
||||
'VALUE' => $option,
|
||||
'TITLE' => $lang_string,
|
||||
'VALUE' => $option,
|
||||
'TITLE' => $lang_string,
|
||||
'LINK' => $phpbb_path_helper->append_url_params($url, array('action' => $option)),
|
||||
));
|
||||
}
|
||||
|
||||
|
@@ -1007,8 +1007,8 @@ function get_remote_avatar_dim($src, $axis)
|
||||
{
|
||||
$bigger = ($remote_avatar_cache[$src][0] > $remote_avatar_cache[$src][1]) ? 0 : 1;
|
||||
$ratio = $default[$bigger] / $remote_avatar_cache[$src][$bigger];
|
||||
$remote_avatar_cache[$src][0] = (int)($remote_avatar_cache[$src][0] * $ratio);
|
||||
$remote_avatar_cache[$src][1] = (int)($remote_avatar_cache[$src][1] * $ratio);
|
||||
$remote_avatar_cache[$src][0] = (int) ($remote_avatar_cache[$src][0] * $ratio);
|
||||
$remote_avatar_cache[$src][1] = (int) ($remote_avatar_cache[$src][1] * $ratio);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1287,7 +1287,9 @@ function restore_config($schema)
|
||||
{
|
||||
$var = (empty($m[2]) || empty($convert_config[$m[2]])) ? "''" : "'" . addslashes($convert_config[$m[2]]) . "'";
|
||||
$exec = '$config_value = ' . $m[1] . '(' . $var . ');';
|
||||
// @codingStandardsIgnoreStart
|
||||
eval($exec);
|
||||
// @codingStandardsIgnoreEnd
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1645,7 +1647,7 @@ function mass_auth($ug_type, $forum_id, $ug_id, $acl_list, $setting = ACL_NO)
|
||||
switch ($sql_type)
|
||||
{
|
||||
case 'insert':
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
case 'mysql':
|
||||
case 'mysql4':
|
||||
@@ -2039,11 +2041,10 @@ function update_topics_posted()
|
||||
{
|
||||
global $db, $config;
|
||||
|
||||
switch ($db->sql_layer)
|
||||
switch ($db->get_sql_layer())
|
||||
{
|
||||
case 'sqlite':
|
||||
case 'sqlite3':
|
||||
case 'firebird':
|
||||
$db->sql_query('DELETE FROM ' . TOPICS_POSTED_TABLE);
|
||||
break;
|
||||
|
||||
@@ -2295,7 +2296,7 @@ function convert_bbcode($message, $convert_size = true, $extended_bbcodes = fals
|
||||
$message = preg_replace('#\[size=([0-9]+)\](.*?)\[/size\]#i', '[size=\1]\2[/size]', $message);
|
||||
$message = preg_replace('#\[size=[0-9]{2,}\](.*?)\[/size\]#i', '[size=29]\1[/size]', $message);
|
||||
|
||||
for ($i = sizeof($size); $i; )
|
||||
for ($i = sizeof($size); $i;)
|
||||
{
|
||||
$i--;
|
||||
$message = str_replace('[size=' . $i . ']', '[size=' . $size[$i] . ']', $message);
|
||||
|
@@ -497,10 +497,15 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod
|
||||
$l_post_click_count = ($row['forum_type'] == FORUM_LINK) ? 'CLICKS' : 'POSTS';
|
||||
$post_click_count = ($row['forum_type'] != FORUM_LINK || $row['forum_flags'] & FORUM_FLAG_LINK_TRACK) ? $row['forum_posts'] : '';
|
||||
|
||||
$s_subforums_list = array();
|
||||
$s_subforums_list = $subforums_row = array();
|
||||
foreach ($subforums_list as $subforum)
|
||||
{
|
||||
$s_subforums_list[] = '<a href="' . $subforum['link'] . '" class="subforum ' . (($subforum['unread']) ? 'unread' : 'read') . '" title="' . (($subforum['unread']) ? $user->lang['UNREAD_POSTS'] : $user->lang['NO_UNREAD_POSTS']) . '">' . $subforum['name'] . '</a>';
|
||||
$subforums_row[] = array(
|
||||
'U_SUBFORUM' => $subforum['link'],
|
||||
'SUBFORUM_NAME' => $subforum['name'],
|
||||
'S_UNREAD' => $subforum['unread'],
|
||||
);
|
||||
}
|
||||
$s_subforums_list = (string) implode($user->lang['COMMA_SEPARATOR'], $s_subforums_list);
|
||||
$catless = ($row['parent_id'] == $root_data['forum_id']) ? true : false;
|
||||
@@ -572,22 +577,41 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod
|
||||
* @event core.display_forums_modify_template_vars
|
||||
* @var array forum_row Template data of the forum
|
||||
* @var array row The data of the forum
|
||||
* @var array subforums_row Template data of subforums
|
||||
* @since 3.1.0-a1
|
||||
* @change 3.1.0-b5 Added var subforums_row
|
||||
*/
|
||||
$vars = array('forum_row', 'row');
|
||||
$vars = array('forum_row', 'row', 'subforums_row');
|
||||
extract($phpbb_dispatcher->trigger_event('core.display_forums_modify_template_vars', compact($vars)));
|
||||
|
||||
$template->assign_block_vars('forumrow', $forum_row);
|
||||
|
||||
// Assign subforums loop for style authors
|
||||
foreach ($subforums_list as $subforum)
|
||||
{
|
||||
$template->assign_block_vars('forumrow.subforum', array(
|
||||
'U_SUBFORUM' => $subforum['link'],
|
||||
'SUBFORUM_NAME' => $subforum['name'],
|
||||
'S_UNREAD' => $subforum['unread'])
|
||||
);
|
||||
}
|
||||
$template->assign_block_vars_array('forumrow.subforum', $subforums_row);
|
||||
|
||||
/**
|
||||
* Modify and/or assign additional template data for the forum
|
||||
* after forumrow loop has been assigned. This can be used
|
||||
* to create additional forumrow subloops in extensions.
|
||||
*
|
||||
* This event is triggered once per forum
|
||||
*
|
||||
* @event core.display_forums_add_template_data
|
||||
* @var array forum_row Template data of the forum
|
||||
* @var array row The data of the forum
|
||||
* @var array subforums_list The data of subforums
|
||||
* @var array subforums_row Template data of subforums
|
||||
* @var bool catless The flag indicating whether a forum has a parent category
|
||||
* @since 3.1.0-b5
|
||||
*/
|
||||
$vars = array(
|
||||
'forum_row',
|
||||
'row',
|
||||
'subforums_list',
|
||||
'subforums_row',
|
||||
'catless',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.display_forums_add_template_data', compact($vars)));
|
||||
|
||||
$last_catless = $catless;
|
||||
}
|
||||
@@ -598,7 +622,7 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod
|
||||
'L_SUBFORUM' => ($visible_forums == 1) ? $user->lang['SUBFORUM'] : $user->lang['SUBFORUMS'],
|
||||
'LAST_POST_IMG' => $user->img('icon_topic_latest', 'VIEW_LATEST_POST'),
|
||||
'UNAPPROVED_IMG' => $user->img('icon_topic_unapproved', 'TOPICS_UNAPPROVED'),
|
||||
'UNAPPROVED_POST_IMG' => $user->img('icon_topic_unapproved', 'POSTS_UNAPPROVED'),
|
||||
'UNAPPROVED_POST_IMG' => $user->img('icon_topic_unapproved', 'POSTS_UNAPPROVED_FORUM'),
|
||||
));
|
||||
|
||||
if ($return_moderators)
|
||||
@@ -650,6 +674,8 @@ function generate_forum_nav(&$forum_data)
|
||||
// Get forum parents
|
||||
$forum_parents = get_forum_parents($forum_data);
|
||||
|
||||
$microdata_attr = 'data-forum-id';
|
||||
|
||||
// Build navigation links
|
||||
if (!empty($forum_parents))
|
||||
{
|
||||
@@ -669,6 +695,7 @@ function generate_forum_nav(&$forum_data)
|
||||
'S_IS_POST' => ($parent_type == FORUM_POST) ? true : false,
|
||||
'FORUM_NAME' => $parent_name,
|
||||
'FORUM_ID' => $parent_forum_id,
|
||||
'MICRODATA' => $microdata_attr . '="' . $parent_forum_id . '"',
|
||||
'U_VIEW_FORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $parent_forum_id))
|
||||
);
|
||||
}
|
||||
@@ -680,6 +707,7 @@ function generate_forum_nav(&$forum_data)
|
||||
'S_IS_POST' => ($forum_data['forum_type'] == FORUM_POST) ? true : false,
|
||||
'FORUM_NAME' => $forum_data['forum_name'],
|
||||
'FORUM_ID' => $forum_data['forum_id'],
|
||||
'MICRODATA' => $microdata_attr . '="' . $forum_data['forum_id'] . '"',
|
||||
'U_VIEW_FORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_data['forum_id']))
|
||||
);
|
||||
|
||||
@@ -1157,7 +1185,7 @@ function watch_topic_forum($mode, &$s_watching, $user_id, $forum_id, $topic_id,
|
||||
$u_url .= ($mode == 'forum') ? '&f' : '&f=' . $forum_id . '&t';
|
||||
$is_watching = 0;
|
||||
|
||||
// Is user watching this thread?
|
||||
// Is user watching this topic?
|
||||
if ($user_id != ANONYMOUS)
|
||||
{
|
||||
$can_watch = true;
|
||||
@@ -1347,7 +1375,7 @@ function watch_topic_forum($mode, &$s_watching, $user_id, $forum_id, $topic_id,
|
||||
*/
|
||||
function get_user_rank($user_rank, $user_posts, &$rank_title, &$rank_img, &$rank_img_src)
|
||||
{
|
||||
global $ranks, $config, $phpbb_root_path;
|
||||
global $ranks, $config, $phpbb_root_path, $phpbb_path_helper;
|
||||
|
||||
if (empty($ranks))
|
||||
{
|
||||
@@ -1358,8 +1386,8 @@ function get_user_rank($user_rank, $user_posts, &$rank_title, &$rank_img, &$rank
|
||||
if (!empty($user_rank))
|
||||
{
|
||||
$rank_title = (isset($ranks['special'][$user_rank]['rank_title'])) ? $ranks['special'][$user_rank]['rank_title'] : '';
|
||||
$rank_img = (!empty($ranks['special'][$user_rank]['rank_image'])) ? '<img src="' . $phpbb_root_path . $config['ranks_path'] . '/' . $ranks['special'][$user_rank]['rank_image'] . '" alt="' . $ranks['special'][$user_rank]['rank_title'] . '" title="' . $ranks['special'][$user_rank]['rank_title'] . '" />' : '';
|
||||
$rank_img_src = (!empty($ranks['special'][$user_rank]['rank_image'])) ? $phpbb_root_path . $config['ranks_path'] . '/' . $ranks['special'][$user_rank]['rank_image'] : '';
|
||||
$rank_img_src = (!empty($ranks['special'][$user_rank]['rank_image'])) ? $phpbb_path_helper->update_web_root_path($phpbb_root_path . $config['ranks_path'] . '/' . $ranks['special'][$user_rank]['rank_image']) : '';
|
||||
$rank_img = (!empty($ranks['special'][$user_rank]['rank_image'])) ? '<img src="' . $rank_img_src . '" alt="' . $ranks['special'][$user_rank]['rank_title'] . '" title="' . $ranks['special'][$user_rank]['rank_title'] . '" />' : '';
|
||||
}
|
||||
else if ($user_posts !== false)
|
||||
{
|
||||
@@ -1370,8 +1398,8 @@ function get_user_rank($user_rank, $user_posts, &$rank_title, &$rank_img, &$rank
|
||||
if ($user_posts >= $rank['rank_min'])
|
||||
{
|
||||
$rank_title = $rank['rank_title'];
|
||||
$rank_img = (!empty($rank['rank_image'])) ? '<img src="' . $phpbb_root_path . $config['ranks_path'] . '/' . $rank['rank_image'] . '" alt="' . $rank['rank_title'] . '" title="' . $rank['rank_title'] . '" />' : '';
|
||||
$rank_img_src = (!empty($rank['rank_image'])) ? $phpbb_root_path . $config['ranks_path'] . '/' . $rank['rank_image'] : '';
|
||||
$rank_img_src = (!empty($rank['rank_image'])) ? $phpbb_path_helper->update_web_root_path($phpbb_root_path . $config['ranks_path'] . '/' . $rank['rank_image']) : '';
|
||||
$rank_img = (!empty($rank['rank_image'])) ? '<img src="' . $rank_img_src . '" alt="' . $rank['rank_title'] . '" title="' . $rank['rank_title'] . '" />' : '';
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1416,3 +1444,166 @@ function phpbb_gen_download_links($param_key, $param_val, $phpbb_root_path, $php
|
||||
|
||||
return $links;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare profile data
|
||||
*/
|
||||
function phpbb_show_profile($data, $user_notes_enabled = false, $warn_user_enabled = false)
|
||||
{
|
||||
global $config, $auth, $user, $phpEx, $phpbb_root_path, $phpbb_dispatcher;
|
||||
|
||||
$username = $data['username'];
|
||||
$user_id = $data['user_id'];
|
||||
|
||||
$rank_title = $rank_img = $rank_img_src = '';
|
||||
get_user_rank($data['user_rank'], (($user_id == ANONYMOUS) ? false : $data['user_posts']), $rank_title, $rank_img, $rank_img_src);
|
||||
|
||||
if ((!empty($data['user_allow_viewemail']) && $auth->acl_get('u_sendemail')) || $auth->acl_get('a_user'))
|
||||
{
|
||||
$email = ($config['board_email_form'] && $config['email_enable']) ? append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=email&u=' . $user_id) : (($config['board_hide_emails'] && !$auth->acl_get('a_user')) ? '' : 'mailto:' . $data['user_email']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$email = '';
|
||||
}
|
||||
|
||||
if ($config['load_onlinetrack'])
|
||||
{
|
||||
$update_time = $config['load_online_time'] * 60;
|
||||
$online = (time() - $update_time < $data['session_time'] && ((isset($data['session_viewonline']) && $data['session_viewonline']) || $auth->acl_get('u_viewonline'))) ? true : false;
|
||||
}
|
||||
else
|
||||
{
|
||||
$online = false;
|
||||
}
|
||||
|
||||
if ($data['user_allow_viewonline'] || $auth->acl_get('u_viewonline'))
|
||||
{
|
||||
$last_active = (!empty($data['session_time'])) ? $data['session_time'] : $data['user_lastvisit'];
|
||||
}
|
||||
else
|
||||
{
|
||||
$last_active = '';
|
||||
}
|
||||
|
||||
$age = '';
|
||||
|
||||
if ($config['allow_birthdays'] && $data['user_birthday'])
|
||||
{
|
||||
list($bday_day, $bday_month, $bday_year) = array_map('intval', explode('-', $data['user_birthday']));
|
||||
|
||||
if ($bday_year)
|
||||
{
|
||||
$now = $user->create_datetime();
|
||||
$now = phpbb_gmgetdate($now->getTimestamp() + $now->getOffset());
|
||||
|
||||
$diff = $now['mon'] - $bday_month;
|
||||
if ($diff == 0)
|
||||
{
|
||||
$diff = ($now['mday'] - $bday_day < 0) ? 1 : 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
$diff = ($diff < 0) ? 1 : 0;
|
||||
}
|
||||
|
||||
$age = max(0, (int) ($now['year'] - $bday_year - $diff));
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('phpbb_get_banned_user_ids'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
|
||||
}
|
||||
|
||||
// Can this user receive a Private Message?
|
||||
$can_receive_pm = (
|
||||
// They must be a "normal" user
|
||||
$data['user_type'] != USER_IGNORE &&
|
||||
|
||||
// They must not be deactivated by the administrator
|
||||
($data['user_type'] != USER_INACTIVE || $data['user_inactive_reason'] != INACTIVE_MANUAL) &&
|
||||
|
||||
// They must be able to read PMs
|
||||
sizeof($auth->acl_get_list($user_id, 'u_readpm')) &&
|
||||
|
||||
// They must not be permanently banned
|
||||
!sizeof(phpbb_get_banned_user_ids($user_id, false)) &&
|
||||
|
||||
// They must allow users to contact via PM
|
||||
(($auth->acl_gets('a_', 'm_') || $auth->acl_getf_global('m_')) || $data['user_allow_pm'])
|
||||
);
|
||||
|
||||
// Dump it out to the template
|
||||
$template_data = array(
|
||||
'AGE' => $age,
|
||||
'RANK_TITLE' => $rank_title,
|
||||
'JOINED' => $user->format_date($data['user_regdate']),
|
||||
'LAST_ACTIVE' => (empty($last_active)) ? ' - ' : $user->format_date($last_active),
|
||||
'POSTS' => ($data['user_posts']) ? $data['user_posts'] : 0,
|
||||
'WARNINGS' => isset($data['user_warnings']) ? $data['user_warnings'] : 0,
|
||||
|
||||
'USERNAME_FULL' => get_username_string('full', $user_id, $username, $data['user_colour']),
|
||||
'USERNAME' => get_username_string('username', $user_id, $username, $data['user_colour']),
|
||||
'USER_COLOR' => get_username_string('colour', $user_id, $username, $data['user_colour']),
|
||||
'U_VIEW_PROFILE' => get_username_string('profile', $user_id, $username, $data['user_colour']),
|
||||
|
||||
'A_USERNAME' => addslashes(get_username_string('username', $user_id, $username, $data['user_colour'])),
|
||||
|
||||
'AVATAR_IMG' => phpbb_get_user_avatar($data),
|
||||
'ONLINE_IMG' => (!$config['load_onlinetrack']) ? '' : (($online) ? $user->img('icon_user_online', 'ONLINE') : $user->img('icon_user_offline', 'OFFLINE')),
|
||||
'S_ONLINE' => ($config['load_onlinetrack'] && $online) ? true : false,
|
||||
'RANK_IMG' => $rank_img,
|
||||
'RANK_IMG_SRC' => $rank_img_src,
|
||||
'S_JABBER_ENABLED' => ($config['jab_enable']) ? true : false,
|
||||
|
||||
'S_WARNINGS' => ($auth->acl_getf_global('m_') || $auth->acl_get('m_warn')) ? true : false,
|
||||
|
||||
'U_SEARCH_USER' => ($auth->acl_get('u_search')) ? append_sid("{$phpbb_root_path}search.$phpEx", "author_id=$user_id&sr=posts") : '',
|
||||
'U_NOTES' => ($user_notes_enabled && $auth->acl_getf_global('m_')) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=notes&mode=user_notes&u=' . $user_id, true, $user->session_id) : '',
|
||||
'U_WARN' => ($warn_user_enabled && $auth->acl_get('m_warn')) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=warn&mode=warn_user&u=' . $user_id, true, $user->session_id) : '',
|
||||
'U_PM' => ($config['allow_privmsg'] && $auth->acl_get('u_sendpm') && $can_receive_pm) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&mode=compose&u=' . $user_id) : '',
|
||||
'U_EMAIL' => $email,
|
||||
'U_JABBER' => ($data['user_jabber'] && $auth->acl_get('u_sendim')) ? append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=contact&action=jabber&u=' . $user_id) : '',
|
||||
|
||||
'USER_JABBER' => $data['user_jabber'],
|
||||
'USER_JABBER_IMG' => ($data['user_jabber']) ? $user->img('icon_contact_jabber', $data['user_jabber']) : '',
|
||||
|
||||
'L_SEND_EMAIL_USER' => $user->lang('SEND_EMAIL_USER', $username),
|
||||
'L_CONTACT_USER' => $user->lang('CONTACT_USER', $username),
|
||||
'L_VIEWING_PROFILE' => $user->lang('VIEWING_PROFILE', $username),
|
||||
);
|
||||
|
||||
/**
|
||||
* Preparing a user's data before displaying it in profile and memberlist
|
||||
*
|
||||
* @event core.memberlist_prepare_profile_data
|
||||
* @var array data Array with user's data
|
||||
* @var array template_data Template array with user's data
|
||||
* @since 3.1.0-a1
|
||||
*/
|
||||
$vars = array('data', 'template_data');
|
||||
extract($phpbb_dispatcher->trigger_event('core.memberlist_prepare_profile_data', compact($vars)));
|
||||
|
||||
return $template_data;
|
||||
}
|
||||
|
||||
function phpbb_sort_last_active($first, $second)
|
||||
{
|
||||
global $id_cache, $sort_dir;
|
||||
|
||||
$lesser_than = ($sort_dir === 'd') ? -1 : 1;
|
||||
|
||||
if (isset($id_cache[$first]['group_leader']) && $id_cache[$first]['group_leader'] && (!isset($id_cache[$second]['group_leader']) || !$id_cache[$second]['group_leader']))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
else if (isset($id_cache[$second]['group_leader']) && (!isset($id_cache[$first]['group_leader']) || !$id_cache[$first]['group_leader']) && $id_cache[$second]['group_leader'])
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $lesser_than * (int) ($id_cache[$first]['last_visit'] - $id_cache[$second]['last_visit']);
|
||||
}
|
||||
}
|
||||
|
@@ -27,15 +27,6 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20
|
||||
{
|
||||
global $lang;
|
||||
$available_dbms = array(
|
||||
'firebird' => array(
|
||||
'LABEL' => 'FireBird',
|
||||
'SCHEMA' => 'firebird',
|
||||
'MODULE' => 'interbase',
|
||||
'DELIM' => ';;',
|
||||
'DRIVER' => 'phpbb\db\driver\firebird',
|
||||
'AVAILABLE' => true,
|
||||
'2.0.x' => false,
|
||||
),
|
||||
// Note: php 5.5 alpha 2 deprecated mysql.
|
||||
// Keep mysqli before mysql in this list.
|
||||
'mysqli' => array(
|
||||
@@ -260,7 +251,6 @@ function connect_check_db($error_connect, &$error, $dbms_details, $table_prefix,
|
||||
$prefix_length = 200;
|
||||
break;
|
||||
|
||||
case 'phpbb\db\driver\firebird':
|
||||
case 'phpbb\db\driver\oracle':
|
||||
$prefix_length = 6;
|
||||
break;
|
||||
@@ -300,7 +290,7 @@ function connect_check_db($error_connect, &$error, $dbms_details, $table_prefix,
|
||||
switch ($dbms_details['DRIVER'])
|
||||
{
|
||||
case 'phpbb\db\driver\mysqli':
|
||||
if (version_compare(mysqli_get_server_info($db->db_connect_id), '4.1.3', '<'))
|
||||
if (version_compare(mysqli_get_server_info($db->get_db_connect_id()), '4.1.3', '<'))
|
||||
{
|
||||
$error[] = $lang['INST_ERR_DB_NO_MYSQLI'];
|
||||
}
|
||||
@@ -321,87 +311,6 @@ function connect_check_db($error_connect, &$error, $dbms_details, $table_prefix,
|
||||
}
|
||||
break;
|
||||
|
||||
case 'phpbb\db\driver\firebird':
|
||||
// check the version of FB, use some hackery if we can't get access to the server info
|
||||
if ($db->service_handle !== false && function_exists('ibase_server_info'))
|
||||
{
|
||||
$val = @ibase_server_info($db->service_handle, IBASE_SVC_SERVER_VERSION);
|
||||
preg_match('#V([\d.]+)#', $val, $match);
|
||||
if ($match[1] < 2)
|
||||
{
|
||||
$error[] = $lang['INST_ERR_DB_NO_FIREBIRD'];
|
||||
}
|
||||
$db_info = @ibase_db_info($db->service_handle, $dbname, IBASE_STS_HDR_PAGES);
|
||||
|
||||
preg_match('/^\\s*Page size\\s*(\\d+)/m', $db_info, $regs);
|
||||
$page_size = intval($regs[1]);
|
||||
if ($page_size < 8192)
|
||||
{
|
||||
$error[] = $lang['INST_ERR_DB_NO_FIREBIRD_PS'];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql = "SELECT *
|
||||
FROM RDB$FUNCTIONS
|
||||
WHERE RDB$SYSTEM_FLAG IS NULL
|
||||
AND RDB$FUNCTION_NAME = 'CHAR_LENGTH'";
|
||||
$result = $db->sql_query($sql);
|
||||
$row = $db->sql_fetchrow($result);
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
// if its a UDF, its too old
|
||||
if ($row)
|
||||
{
|
||||
$error[] = $lang['INST_ERR_DB_NO_FIREBIRD'];
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql = 'SELECT 1 FROM RDB$DATABASE
|
||||
WHERE BIN_AND(10, 1) = 0';
|
||||
$result = $db->sql_query($sql);
|
||||
if (!$result) // This can only fail if BIN_AND is not defined
|
||||
{
|
||||
$error[] = $lang['INST_ERR_DB_NO_FIREBIRD'];
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
}
|
||||
|
||||
// Setup the stuff for our random table
|
||||
$char_array = array_merge(range('A', 'Z'), range('0', '9'));
|
||||
$char_len = mt_rand(7, 9);
|
||||
$char_array_len = sizeof($char_array) - 1;
|
||||
|
||||
$final = '';
|
||||
|
||||
for ($i = 0; $i < $char_len; $i++)
|
||||
{
|
||||
$final .= $char_array[mt_rand(0, $char_array_len)];
|
||||
}
|
||||
|
||||
// Create some random table
|
||||
$sql = 'CREATE TABLE ' . $final . " (
|
||||
FIELD1 VARCHAR(255) CHARACTER SET UTF8 DEFAULT '' NOT NULL COLLATE UNICODE,
|
||||
FIELD2 INTEGER DEFAULT 0 NOT NULL);";
|
||||
$db->sql_query($sql);
|
||||
|
||||
// Create an index that should fail if the page size is less than 8192
|
||||
$sql = 'CREATE INDEX ' . $final . ' ON ' . $final . '(FIELD1, FIELD2);';
|
||||
$db->sql_query($sql);
|
||||
|
||||
if (ibase_errmsg() !== false)
|
||||
{
|
||||
$error[] = $lang['INST_ERR_DB_NO_FIREBIRD_PS'];
|
||||
}
|
||||
else
|
||||
{
|
||||
// Kill the old table
|
||||
$db->sql_query('DROP TABLE ' . $final . ';');
|
||||
}
|
||||
unset($final);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'phpbb\db\driver\oracle':
|
||||
if ($unicode_check)
|
||||
{
|
||||
|
666
phpBB/includes/functions_mcp.php
Normal file
666
phpBB/includes/functions_mcp.php
Normal file
@@ -0,0 +1,666 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ignore
|
||||
*/
|
||||
if (!defined('IN_PHPBB'))
|
||||
{
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Functions used to generate additional URL paramters
|
||||
*/
|
||||
function phpbb_module__url($mode, &$module_row)
|
||||
{
|
||||
return phpbb_extra_url();
|
||||
}
|
||||
|
||||
function phpbb_module_notes_url($mode, &$module_row)
|
||||
{
|
||||
if ($mode == 'front')
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
global $user_id;
|
||||
return ($user_id) ? "&u=$user_id" : '';
|
||||
}
|
||||
|
||||
function phpbb_module_warn_url($mode, &$module_row)
|
||||
{
|
||||
if ($mode == 'front' || $mode == 'list')
|
||||
{
|
||||
global $forum_id;
|
||||
|
||||
return ($forum_id) ? "&f=$forum_id" : '';
|
||||
}
|
||||
|
||||
if ($mode == 'warn_post')
|
||||
{
|
||||
global $forum_id, $post_id;
|
||||
|
||||
$url_extra = ($forum_id) ? "&f=$forum_id" : '';
|
||||
$url_extra .= ($post_id) ? "&p=$post_id" : '';
|
||||
|
||||
return $url_extra;
|
||||
}
|
||||
else
|
||||
{
|
||||
global $user_id;
|
||||
|
||||
return ($user_id) ? "&u=$user_id" : '';
|
||||
}
|
||||
}
|
||||
|
||||
function phpbb_module_main_url($mode, &$module_row)
|
||||
{
|
||||
return phpbb_extra_url();
|
||||
}
|
||||
|
||||
function phpbb_module_logs_url($mode, &$module_row)
|
||||
{
|
||||
return phpbb_extra_url();
|
||||
}
|
||||
|
||||
function phpbb_module_ban_url($mode, &$module_row)
|
||||
{
|
||||
return phpbb_extra_url();
|
||||
}
|
||||
|
||||
function phpbb_module_queue_url($mode, &$module_row)
|
||||
{
|
||||
return phpbb_extra_url();
|
||||
}
|
||||
|
||||
function phpbb_module_reports_url($mode, &$module_row)
|
||||
{
|
||||
return phpbb_extra_url();
|
||||
}
|
||||
|
||||
function phpbb_extra_url()
|
||||
{
|
||||
global $forum_id, $topic_id, $post_id, $report_id, $user_id;
|
||||
|
||||
$url_extra = '';
|
||||
$url_extra .= ($forum_id) ? "&f=$forum_id" : '';
|
||||
$url_extra .= ($topic_id) ? "&t=$topic_id" : '';
|
||||
$url_extra .= ($post_id) ? "&p=$post_id" : '';
|
||||
$url_extra .= ($user_id) ? "&u=$user_id" : '';
|
||||
$url_extra .= ($report_id) ? "&r=$report_id" : '';
|
||||
|
||||
return $url_extra;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get simple topic data
|
||||
*/
|
||||
function phpbb_get_topic_data($topic_ids, $acl_list = false, $read_tracking = false)
|
||||
{
|
||||
global $auth, $db, $config, $user;
|
||||
static $rowset = array();
|
||||
|
||||
$topics = array();
|
||||
|
||||
if (!sizeof($topic_ids))
|
||||
{
|
||||
return array();
|
||||
}
|
||||
|
||||
// cache might not contain read tracking info, so we can't use it if read
|
||||
// tracking information is requested
|
||||
if (!$read_tracking)
|
||||
{
|
||||
$cache_topic_ids = array_intersect($topic_ids, array_keys($rowset));
|
||||
$topic_ids = array_diff($topic_ids, array_keys($rowset));
|
||||
}
|
||||
else
|
||||
{
|
||||
$cache_topic_ids = array();
|
||||
}
|
||||
|
||||
if (sizeof($topic_ids))
|
||||
{
|
||||
$sql_array = array(
|
||||
'SELECT' => 't.*, f.*',
|
||||
|
||||
'FROM' => array(
|
||||
TOPICS_TABLE => 't',
|
||||
),
|
||||
|
||||
'LEFT_JOIN' => array(
|
||||
array(
|
||||
'FROM' => array(FORUMS_TABLE => 'f'),
|
||||
'ON' => 'f.forum_id = t.forum_id'
|
||||
)
|
||||
),
|
||||
|
||||
'WHERE' => $db->sql_in_set('t.topic_id', $topic_ids)
|
||||
);
|
||||
|
||||
if ($read_tracking && $config['load_db_lastread'])
|
||||
{
|
||||
$sql_array['SELECT'] .= ', tt.mark_time, ft.mark_time as forum_mark_time';
|
||||
|
||||
$sql_array['LEFT_JOIN'][] = array(
|
||||
'FROM' => array(TOPICS_TRACK_TABLE => 'tt'),
|
||||
'ON' => 'tt.user_id = ' . $user->data['user_id'] . ' AND t.topic_id = tt.topic_id'
|
||||
);
|
||||
|
||||
$sql_array['LEFT_JOIN'][] = array(
|
||||
'FROM' => array(FORUMS_TRACK_TABLE => 'ft'),
|
||||
'ON' => 'ft.user_id = ' . $user->data['user_id'] . ' AND t.forum_id = ft.forum_id'
|
||||
);
|
||||
}
|
||||
|
||||
$sql = $db->sql_build_query('SELECT', $sql_array);
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$rowset[$row['topic_id']] = $row;
|
||||
|
||||
if ($acl_list && !$auth->acl_gets($acl_list, $row['forum_id']))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$topics[$row['topic_id']] = $row;
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
}
|
||||
|
||||
foreach ($cache_topic_ids as $id)
|
||||
{
|
||||
if (!$acl_list || $auth->acl_gets($acl_list, $rowset[$id]['forum_id']))
|
||||
{
|
||||
$topics[$id] = $rowset[$id];
|
||||
}
|
||||
}
|
||||
|
||||
return $topics;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get simple post data
|
||||
*/
|
||||
function phpbb_get_post_data($post_ids, $acl_list = false, $read_tracking = false)
|
||||
{
|
||||
global $db, $auth, $config, $user;
|
||||
|
||||
$rowset = array();
|
||||
|
||||
if (!sizeof($post_ids))
|
||||
{
|
||||
return array();
|
||||
}
|
||||
|
||||
$sql_array = array(
|
||||
'SELECT' => 'p.*, u.*, t.*, f.*',
|
||||
|
||||
'FROM' => array(
|
||||
USERS_TABLE => 'u',
|
||||
POSTS_TABLE => 'p',
|
||||
TOPICS_TABLE => 't',
|
||||
),
|
||||
|
||||
'LEFT_JOIN' => array(
|
||||
array(
|
||||
'FROM' => array(FORUMS_TABLE => 'f'),
|
||||
'ON' => 'f.forum_id = t.forum_id'
|
||||
)
|
||||
),
|
||||
|
||||
'WHERE' => $db->sql_in_set('p.post_id', $post_ids) . '
|
||||
AND u.user_id = p.poster_id
|
||||
AND t.topic_id = p.topic_id',
|
||||
);
|
||||
|
||||
if ($read_tracking && $config['load_db_lastread'])
|
||||
{
|
||||
$sql_array['SELECT'] .= ', tt.mark_time, ft.mark_time as forum_mark_time';
|
||||
|
||||
$sql_array['LEFT_JOIN'][] = array(
|
||||
'FROM' => array(TOPICS_TRACK_TABLE => 'tt'),
|
||||
'ON' => 'tt.user_id = ' . $user->data['user_id'] . ' AND t.topic_id = tt.topic_id'
|
||||
);
|
||||
|
||||
$sql_array['LEFT_JOIN'][] = array(
|
||||
'FROM' => array(FORUMS_TRACK_TABLE => 'ft'),
|
||||
'ON' => 'ft.user_id = ' . $user->data['user_id'] . ' AND t.forum_id = ft.forum_id'
|
||||
);
|
||||
}
|
||||
|
||||
$sql = $db->sql_build_query('SELECT', $sql_array);
|
||||
$result = $db->sql_query($sql);
|
||||
unset($sql_array);
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
if ($acl_list && !$auth->acl_gets($acl_list, $row['forum_id']))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($row['post_visibility'] != ITEM_APPROVED && !$auth->acl_get('m_approve', $row['forum_id']))
|
||||
{
|
||||
// Moderators without the permission to approve post should at least not see them. ;)
|
||||
continue;
|
||||
}
|
||||
|
||||
$rowset[$row['post_id']] = $row;
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
return $rowset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get simple forum data
|
||||
*/
|
||||
function phpbb_get_forum_data($forum_id, $acl_list = 'f_list', $read_tracking = false)
|
||||
{
|
||||
global $auth, $db, $user, $config, $phpbb_container;
|
||||
|
||||
$rowset = array();
|
||||
|
||||
if (!is_array($forum_id))
|
||||
{
|
||||
$forum_id = array($forum_id);
|
||||
}
|
||||
|
||||
if (!sizeof($forum_id))
|
||||
{
|
||||
return array();
|
||||
}
|
||||
|
||||
if ($read_tracking && $config['load_db_lastread'])
|
||||
{
|
||||
$read_tracking_join = ' LEFT JOIN ' . FORUMS_TRACK_TABLE . ' ft ON (ft.user_id = ' . $user->data['user_id'] . '
|
||||
AND ft.forum_id = f.forum_id)';
|
||||
$read_tracking_select = ', ft.mark_time';
|
||||
}
|
||||
else
|
||||
{
|
||||
$read_tracking_join = $read_tracking_select = '';
|
||||
}
|
||||
|
||||
$sql = "SELECT f.* $read_tracking_select
|
||||
FROM " . FORUMS_TABLE . " f$read_tracking_join
|
||||
WHERE " . $db->sql_in_set('f.forum_id', $forum_id);
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$phpbb_content_visibility = $phpbb_container->get('content.visibility');
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
if ($acl_list && !$auth->acl_gets($acl_list, $row['forum_id']))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$row['forum_topics_approved'] = $phpbb_content_visibility->get_count('forum_topics', $row, $row['forum_id']);
|
||||
|
||||
$rowset[$row['forum_id']] = $row;
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
return $rowset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get simple pm data
|
||||
*/
|
||||
function phpbb_get_pm_data($pm_ids)
|
||||
{
|
||||
global $db;
|
||||
|
||||
$rowset = array();
|
||||
|
||||
if (!sizeof($pm_ids))
|
||||
{
|
||||
return array();
|
||||
}
|
||||
|
||||
$sql_array = array(
|
||||
'SELECT' => 'p.*, u.*',
|
||||
|
||||
'FROM' => array(
|
||||
USERS_TABLE => 'u',
|
||||
PRIVMSGS_TABLE => 'p',
|
||||
),
|
||||
|
||||
'WHERE' => $db->sql_in_set('p.msg_id', $pm_ids) . '
|
||||
AND u.user_id = p.author_id',
|
||||
);
|
||||
|
||||
$sql = $db->sql_build_query('SELECT', $sql_array);
|
||||
$result = $db->sql_query($sql);
|
||||
unset($sql_array);
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$rowset[$row['msg_id']] = $row;
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
return $rowset;
|
||||
}
|
||||
|
||||
/**
|
||||
* sorting in mcp
|
||||
*
|
||||
* @param string $where_sql should either be WHERE (default if ommited) or end with AND or OR
|
||||
*
|
||||
* $mode reports and reports_closed: the $where parameters uses aliases p for posts table and r for report table
|
||||
* $mode unapproved_posts: the $where parameters uses aliases p for posts table and t for topic table
|
||||
*/
|
||||
function phpbb_mcp_sorting($mode, &$sort_days, &$sort_key, &$sort_dir, &$sort_by_sql, &$sort_order_sql, &$total, $forum_id = 0, $topic_id = 0, $where_sql = 'WHERE')
|
||||
{
|
||||
global $db, $user, $auth, $template;
|
||||
|
||||
$sort_days = request_var('st', 0);
|
||||
$min_time = ($sort_days) ? time() - ($sort_days * 86400) : 0;
|
||||
|
||||
switch ($mode)
|
||||
{
|
||||
case 'viewforum':
|
||||
$type = 'topics';
|
||||
$default_key = 't';
|
||||
$default_dir = 'd';
|
||||
|
||||
$sql = 'SELECT COUNT(topic_id) AS total
|
||||
FROM ' . TOPICS_TABLE . "
|
||||
$where_sql forum_id = $forum_id
|
||||
AND topic_type NOT IN (" . POST_ANNOUNCE . ', ' . POST_GLOBAL . ")
|
||||
AND topic_last_post_time >= $min_time";
|
||||
|
||||
if (!$auth->acl_get('m_approve', $forum_id))
|
||||
{
|
||||
$sql .= 'AND topic_visibility = ' . ITEM_APPROVED;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'viewtopic':
|
||||
$type = 'posts';
|
||||
$default_key = 't';
|
||||
$default_dir = 'a';
|
||||
|
||||
$sql = 'SELECT COUNT(post_id) AS total
|
||||
FROM ' . POSTS_TABLE . "
|
||||
$where_sql topic_id = $topic_id
|
||||
AND post_time >= $min_time";
|
||||
|
||||
if (!$auth->acl_get('m_approve', $forum_id))
|
||||
{
|
||||
$sql .= 'AND post_visibility = ' . ITEM_APPROVED;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'unapproved_posts':
|
||||
case 'deleted_posts':
|
||||
$visibility_const = ($mode == 'unapproved_posts') ? array(ITEM_UNAPPROVED, ITEM_REAPPROVE) : ITEM_DELETED;
|
||||
$type = 'posts';
|
||||
$default_key = 't';
|
||||
$default_dir = 'd';
|
||||
$where_sql .= ($topic_id) ? ' p.topic_id = ' . $topic_id . ' AND' : '';
|
||||
|
||||
$sql = 'SELECT COUNT(p.post_id) AS total
|
||||
FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . " t
|
||||
$where_sql " . $db->sql_in_set('p.forum_id', ($forum_id) ? array($forum_id) : array_intersect(get_forum_list('f_read'), get_forum_list('m_approve'))) . '
|
||||
AND ' . $db->sql_in_set('p.post_visibility', $visibility_const) .'
|
||||
AND t.topic_id = p.topic_id
|
||||
AND t.topic_visibility <> p.post_visibility';
|
||||
|
||||
if ($min_time)
|
||||
{
|
||||
$sql .= ' AND post_time >= ' . $min_time;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'unapproved_topics':
|
||||
case 'deleted_topics':
|
||||
$visibility_const = ($mode == 'unapproved_topics') ? array(ITEM_UNAPPROVED, ITEM_REAPPROVE) : ITEM_DELETED;
|
||||
$type = 'topics';
|
||||
$default_key = 't';
|
||||
$default_dir = 'd';
|
||||
|
||||
$sql = 'SELECT COUNT(topic_id) AS total
|
||||
FROM ' . TOPICS_TABLE . "
|
||||
$where_sql " . $db->sql_in_set('forum_id', ($forum_id) ? array($forum_id) : array_intersect(get_forum_list('f_read'), get_forum_list('m_approve'))) . '
|
||||
AND ' . $db->sql_in_set('topic_visibility', $visibility_const);
|
||||
|
||||
if ($min_time)
|
||||
{
|
||||
$sql .= ' AND topic_time >= ' . $min_time;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'pm_reports':
|
||||
case 'pm_reports_closed':
|
||||
case 'reports':
|
||||
case 'reports_closed':
|
||||
$pm = (strpos($mode, 'pm_') === 0) ? true : false;
|
||||
|
||||
$type = ($pm) ? 'pm_reports' : 'reports';
|
||||
$default_key = 't';
|
||||
$default_dir = 'd';
|
||||
$limit_time_sql = ($min_time) ? "AND r.report_time >= $min_time" : '';
|
||||
|
||||
if ($topic_id)
|
||||
{
|
||||
$where_sql .= ' p.topic_id = ' . $topic_id . ' AND ';
|
||||
}
|
||||
else if ($forum_id)
|
||||
{
|
||||
$where_sql .= ' p.forum_id = ' . $forum_id . ' AND ';
|
||||
}
|
||||
else if (!$pm)
|
||||
{
|
||||
$where_sql .= ' ' . $db->sql_in_set('p.forum_id', get_forum_list(array('!f_read', '!m_report')), true, true) . ' AND ';
|
||||
}
|
||||
|
||||
if ($mode == 'reports' || $mode == 'pm_reports')
|
||||
{
|
||||
$where_sql .= ' r.report_closed = 0 AND ';
|
||||
}
|
||||
else
|
||||
{
|
||||
$where_sql .= ' r.report_closed = 1 AND ';
|
||||
}
|
||||
|
||||
if ($pm)
|
||||
{
|
||||
$sql = 'SELECT COUNT(r.report_id) AS total
|
||||
FROM ' . REPORTS_TABLE . ' r, ' . PRIVMSGS_TABLE . " p
|
||||
$where_sql r.post_id = 0
|
||||
AND p.msg_id = r.pm_id
|
||||
$limit_time_sql";
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql = 'SELECT COUNT(r.report_id) AS total
|
||||
FROM ' . REPORTS_TABLE . ' r, ' . POSTS_TABLE . " p
|
||||
$where_sql r.pm_id = 0
|
||||
AND p.post_id = r.post_id
|
||||
$limit_time_sql";
|
||||
}
|
||||
break;
|
||||
|
||||
case 'viewlogs':
|
||||
$type = 'logs';
|
||||
$default_key = 't';
|
||||
$default_dir = 'd';
|
||||
|
||||
$sql = 'SELECT COUNT(log_id) AS total
|
||||
FROM ' . LOG_TABLE . "
|
||||
$where_sql " . $db->sql_in_set('forum_id', ($forum_id) ? array($forum_id) : array_intersect(get_forum_list('f_read'), get_forum_list('m_'))) . '
|
||||
AND log_time >= ' . $min_time . '
|
||||
AND log_type = ' . LOG_MOD;
|
||||
break;
|
||||
}
|
||||
|
||||
$sort_key = request_var('sk', $default_key);
|
||||
$sort_dir = request_var('sd', $default_dir);
|
||||
$sort_dir_text = array('a' => $user->lang['ASCENDING'], 'd' => $user->lang['DESCENDING']);
|
||||
|
||||
switch ($type)
|
||||
{
|
||||
case 'topics':
|
||||
$limit_days = array(0 => $user->lang['ALL_TOPICS'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);
|
||||
$sort_by_text = array('a' => $user->lang['AUTHOR'], 't' => $user->lang['POST_TIME'], 'tt' => $user->lang['TOPIC_TIME'], 'r' => $user->lang['REPLIES'], 's' => $user->lang['SUBJECT'], 'v' => $user->lang['VIEWS']);
|
||||
|
||||
$sort_by_sql = array('a' => 't.topic_first_poster_name', 't' => 't.topic_last_post_time', 'tt' => 't.topic_time', 'r' => (($auth->acl_get('m_approve', $forum_id)) ? 't.topic_posts_approved + t.topic_posts_unapproved + t.topic_posts_softdeleted' : 't.topic_posts_approved'), 's' => 't.topic_title', 'v' => 't.topic_views');
|
||||
$limit_time_sql = ($min_time) ? "AND t.topic_last_post_time >= $min_time" : '';
|
||||
break;
|
||||
|
||||
case 'posts':
|
||||
$limit_days = array(0 => $user->lang['ALL_POSTS'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);
|
||||
$sort_by_text = array('a' => $user->lang['AUTHOR'], 't' => $user->lang['POST_TIME'], 's' => $user->lang['SUBJECT']);
|
||||
$sort_by_sql = array('a' => 'u.username_clean', 't' => 'p.post_time', 's' => 'p.post_subject');
|
||||
$limit_time_sql = ($min_time) ? "AND p.post_time >= $min_time" : '';
|
||||
break;
|
||||
|
||||
case 'reports':
|
||||
$limit_days = array(0 => $user->lang['ALL_REPORTS'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);
|
||||
$sort_by_text = array('a' => $user->lang['AUTHOR'], 'r' => $user->lang['REPORTER'], 'p' => $user->lang['POST_TIME'], 't' => $user->lang['REPORT_TIME'], 's' => $user->lang['SUBJECT']);
|
||||
$sort_by_sql = array('a' => 'u.username_clean', 'r' => 'ru.username', 'p' => 'p.post_time', 't' => 'r.report_time', 's' => 'p.post_subject');
|
||||
break;
|
||||
|
||||
case 'pm_reports':
|
||||
$limit_days = array(0 => $user->lang['ALL_REPORTS'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);
|
||||
$sort_by_text = array('a' => $user->lang['AUTHOR'], 'r' => $user->lang['REPORTER'], 'p' => $user->lang['POST_TIME'], 't' => $user->lang['REPORT_TIME'], 's' => $user->lang['SUBJECT']);
|
||||
$sort_by_sql = array('a' => 'u.username_clean', 'r' => 'ru.username', 'p' => 'p.message_time', 't' => 'r.report_time', 's' => 'p.message_subject');
|
||||
break;
|
||||
|
||||
case 'logs':
|
||||
$limit_days = array(0 => $user->lang['ALL_ENTRIES'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);
|
||||
$sort_by_text = array('u' => $user->lang['SORT_USERNAME'], 't' => $user->lang['SORT_DATE'], 'i' => $user->lang['SORT_IP'], 'o' => $user->lang['SORT_ACTION']);
|
||||
|
||||
$sort_by_sql = array('u' => 'u.username_clean', 't' => 'l.log_time', 'i' => 'l.log_ip', 'o' => 'l.log_operation');
|
||||
$limit_time_sql = ($min_time) ? "AND l.log_time >= $min_time" : '';
|
||||
break;
|
||||
}
|
||||
|
||||
if (!isset($sort_by_sql[$sort_key]))
|
||||
{
|
||||
$sort_key = $default_key;
|
||||
}
|
||||
|
||||
$sort_order_sql = $sort_by_sql[$sort_key] . ' ' . (($sort_dir == 'd') ? 'DESC' : 'ASC');
|
||||
|
||||
$s_limit_days = $s_sort_key = $s_sort_dir = $sort_url = '';
|
||||
gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $sort_url);
|
||||
|
||||
$template->assign_vars(array(
|
||||
'S_SELECT_SORT_DIR' => $s_sort_dir,
|
||||
'S_SELECT_SORT_KEY' => $s_sort_key,
|
||||
'S_SELECT_SORT_DAYS' => $s_limit_days)
|
||||
);
|
||||
|
||||
if (($sort_days && $mode != 'viewlogs') || in_array($mode, array('reports', 'unapproved_topics', 'unapproved_posts', 'deleted_topics', 'deleted_posts')) || $where_sql != 'WHERE')
|
||||
{
|
||||
$result = $db->sql_query($sql);
|
||||
$total = (int) $db->sql_fetchfield('total');
|
||||
$db->sql_freeresult($result);
|
||||
}
|
||||
else
|
||||
{
|
||||
$total = -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate ids
|
||||
*
|
||||
* @param array &$ids The relevant ids to check
|
||||
* @param string $table The table to find the ids in
|
||||
* @param string $sql_id The ids relevant column name
|
||||
* @param array $acl_list A list of permissions the user need to have
|
||||
* @param mixed $singe_forum Limit to one forum id (int) or the first forum found (true)
|
||||
*
|
||||
* @return mixed False if no ids were able to be retrieved, true if at least one id left.
|
||||
* Additionally, this value can be the forum_id assigned if $single_forum was set.
|
||||
* Therefore checking the result for with !== false is the best method.
|
||||
*/
|
||||
function phpbb_check_ids(&$ids, $table, $sql_id, $acl_list = false, $single_forum = false)
|
||||
{
|
||||
global $db, $auth;
|
||||
|
||||
if (!is_array($ids) || empty($ids))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$sql = "SELECT $sql_id, forum_id FROM $table
|
||||
WHERE " . $db->sql_in_set($sql_id, $ids);
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$ids = array();
|
||||
$forum_id = false;
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
if ($acl_list && $row['forum_id'] && !$auth->acl_gets($acl_list, $row['forum_id']))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($acl_list && !$row['forum_id'] && !$auth->acl_getf_global($acl_list))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Limit forum? If not, just assign the id.
|
||||
if ($single_forum === false)
|
||||
{
|
||||
$ids[] = $row[$sql_id];
|
||||
continue;
|
||||
}
|
||||
|
||||
// Limit forum to a specific forum id?
|
||||
// This can get really tricky, because we do not want to create a failure on global topics. :)
|
||||
if ($row['forum_id'])
|
||||
{
|
||||
if ($single_forum !== true && $row['forum_id'] == (int) $single_forum)
|
||||
{
|
||||
$forum_id = (int) $single_forum;
|
||||
}
|
||||
else if ($forum_id === false)
|
||||
{
|
||||
$forum_id = $row['forum_id'];
|
||||
}
|
||||
|
||||
if ($row['forum_id'] == $forum_id)
|
||||
{
|
||||
$ids[] = $row[$sql_id];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Always add a global topic
|
||||
$ids[] = $row[$sql_id];
|
||||
}
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
if (!sizeof($ids))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// If forum id is false and ids populated we may have only global announcements selected (returning 0 because of (int) $forum_id)
|
||||
|
||||
return ($single_forum === false) ? true : (int) $forum_id;
|
||||
}
|
@@ -250,13 +250,25 @@ class p_master
|
||||
// Function for building 'url_extra'
|
||||
$short_name = $this->get_short_name($row['module_basename']);
|
||||
|
||||
$url_func = '_module_' . $short_name . '_url';
|
||||
$url_func = 'phpbb_module_' . $short_name . '_url';
|
||||
if (!function_exists($url_func))
|
||||
{
|
||||
$url_func = '_module_' . $short_name . '_url';
|
||||
}
|
||||
|
||||
// Function for building the language name
|
||||
$lang_func = '_module_' . $short_name . '_lang';
|
||||
$lang_func = 'phpbb_module_' . $short_name . '_lang';
|
||||
if (!function_exists($lang_func))
|
||||
{
|
||||
$lang_func = '_module_' . $short_name . '_lang';
|
||||
}
|
||||
|
||||
// Custom function for calling parameters on module init (for example assigning template variables)
|
||||
$custom_func = '_module_' . $short_name;
|
||||
$custom_func = 'phpbb_module_' . $short_name;
|
||||
if (!function_exists($custom_func))
|
||||
{
|
||||
$custom_func = '_module_' . $short_name;
|
||||
}
|
||||
|
||||
$names[$row['module_basename'] . '_' . $row['module_mode']][] = true;
|
||||
|
||||
@@ -456,7 +468,9 @@ class p_master
|
||||
);
|
||||
|
||||
$is_auth = false;
|
||||
// @codingStandardsIgnoreStart
|
||||
eval('$is_auth = (int) (' . $module_auth . ');');
|
||||
// @codingStandardsIgnoreEnd
|
||||
|
||||
return $is_auth;
|
||||
}
|
||||
|
@@ -1657,7 +1657,7 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
|
||||
if ($user->data['user_id'] != $poster_id)
|
||||
{
|
||||
$log_subject = ($subject) ? $subject : $data['topic_title'];
|
||||
add_log('mod', $data['forum_id'], $data['topic_id'], 'LOG_POST_EDITED', $log_subject, (!empty($username)) ? $username : $user->lang['GUEST']);
|
||||
add_log('mod', $data['forum_id'], $data['topic_id'], 'LOG_POST_EDITED', $log_subject, (!empty($username)) ? $username : $user->lang['GUEST'], $data['post_edit_reason']);
|
||||
}
|
||||
|
||||
if (!isset($sql_data[POSTS_TABLE]['sql']))
|
||||
@@ -2485,3 +2485,137 @@ function phpbb_bump_topic($forum_id, $topic_id, $post_data, $bump_time = false)
|
||||
|
||||
return $url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show upload popup (progress bar)
|
||||
*/
|
||||
function phpbb_upload_popup($forum_style = 0)
|
||||
{
|
||||
global $template, $user;
|
||||
|
||||
($forum_style) ? $user->setup('posting', $forum_style) : $user->setup('posting');
|
||||
|
||||
page_header($user->lang['PROGRESS_BAR']);
|
||||
|
||||
$template->set_filenames(array(
|
||||
'popup' => 'posting_progress_bar.html')
|
||||
);
|
||||
|
||||
$template->assign_vars(array(
|
||||
'PROGRESS_BAR' => $user->img('upload_bar', $user->lang['UPLOAD_IN_PROGRESS']))
|
||||
);
|
||||
|
||||
$template->display('popup');
|
||||
|
||||
garbage_collection();
|
||||
exit_handler();
|
||||
}
|
||||
|
||||
/**
|
||||
* Do the various checks required for removing posts as well as removing it
|
||||
*/
|
||||
function phpbb_handle_post_delete($forum_id, $topic_id, $post_id, &$post_data, $is_soft = false, $soft_delete_reason = '')
|
||||
{
|
||||
global $user, $auth, $config, $request;
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$perm_check = ($is_soft) ? 'softdelete' : 'delete';
|
||||
|
||||
// If moderator removing post or user itself removing post, present a confirmation screen
|
||||
if ($auth->acl_get("m_$perm_check", $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get("f_$perm_check", $forum_id) && $post_id == $post_data['topic_last_post_id'] && !$post_data['post_edit_locked'] && ($post_data['post_time'] > time() - ($config['delete_time'] * 60) || !$config['delete_time'])))
|
||||
{
|
||||
$s_hidden_fields = array(
|
||||
'p' => $post_id,
|
||||
'f' => $forum_id,
|
||||
'mode' => ($is_soft) ? 'soft_delete' : 'delete',
|
||||
);
|
||||
|
||||
if (confirm_box(true))
|
||||
{
|
||||
$data = array(
|
||||
'topic_first_post_id' => $post_data['topic_first_post_id'],
|
||||
'topic_last_post_id' => $post_data['topic_last_post_id'],
|
||||
'topic_posts_approved' => $post_data['topic_posts_approved'],
|
||||
'topic_posts_unapproved' => $post_data['topic_posts_unapproved'],
|
||||
'topic_posts_softdeleted' => $post_data['topic_posts_softdeleted'],
|
||||
'topic_visibility' => $post_data['topic_visibility'],
|
||||
'topic_type' => $post_data['topic_type'],
|
||||
'post_visibility' => $post_data['post_visibility'],
|
||||
'post_reported' => $post_data['post_reported'],
|
||||
'post_time' => $post_data['post_time'],
|
||||
'poster_id' => $post_data['poster_id'],
|
||||
'post_postcount' => $post_data['post_postcount'],
|
||||
);
|
||||
|
||||
$next_post_id = delete_post($forum_id, $topic_id, $post_id, $data, $is_soft, $soft_delete_reason);
|
||||
$post_username = ($post_data['poster_id'] == ANONYMOUS && !empty($post_data['post_username'])) ? $post_data['post_username'] : $post_data['username'];
|
||||
|
||||
if ($next_post_id === false)
|
||||
{
|
||||
add_log('mod', $forum_id, $topic_id, (($is_soft) ? 'LOG_SOFTDELETE_TOPIC' : 'LOG_DELETE_TOPIC'), $post_data['topic_title'], $post_username, $soft_delete_reason);
|
||||
|
||||
$meta_info = append_sid("{$phpbb_root_path}viewforum.$phpEx", "f=$forum_id");
|
||||
$message = $user->lang['POST_DELETED'];
|
||||
}
|
||||
else
|
||||
{
|
||||
add_log('mod', $forum_id, $topic_id, (($is_soft) ? 'LOG_SOFTDELETE_POST' : 'LOG_DELETE_POST'), $post_data['post_subject'], $post_username, $soft_delete_reason);
|
||||
|
||||
$meta_info = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id&p=$next_post_id") . "#p$next_post_id";
|
||||
$message = $user->lang['POST_DELETED'];
|
||||
|
||||
if (!$request->is_ajax())
|
||||
{
|
||||
$message .= '<br /><br />' . $user->lang('RETURN_TOPIC', '<a href="' . $meta_info . '">', '</a>');
|
||||
}
|
||||
}
|
||||
|
||||
meta_refresh(3, $meta_info);
|
||||
if (!$request->is_ajax())
|
||||
{
|
||||
$message .= '<br /><br />' . $user->lang('RETURN_FORUM', '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) . '">', '</a>');
|
||||
}
|
||||
trigger_error($message);
|
||||
}
|
||||
else
|
||||
{
|
||||
global $user, $template, $request;
|
||||
|
||||
$can_delete = $auth->acl_get('m_delete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_delete', $forum_id));
|
||||
$can_softdelete = $auth->acl_get('m_softdelete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_softdelete', $forum_id));
|
||||
|
||||
$template->assign_vars(array(
|
||||
'S_SOFTDELETED' => $post_data['post_visibility'] == ITEM_DELETED,
|
||||
'S_CHECKED_PERMANENT' => $request->is_set_post('delete_permanent') ? ' checked="checked"' : '',
|
||||
'S_ALLOWED_DELETE' => $can_delete,
|
||||
'S_ALLOWED_SOFTDELETE' => $can_softdelete,
|
||||
));
|
||||
|
||||
$l_confirm = 'DELETE_POST';
|
||||
if ($post_data['post_visibility'] == ITEM_DELETED)
|
||||
{
|
||||
$l_confirm .= '_PERMANENTLY';
|
||||
$s_hidden_fields['delete_permanent'] = '1';
|
||||
}
|
||||
else if (!$can_softdelete)
|
||||
{
|
||||
$s_hidden_fields['delete_permanent'] = '1';
|
||||
}
|
||||
|
||||
confirm_box(false, $l_confirm, build_hidden_fields($s_hidden_fields), 'confirm_delete_body.html');
|
||||
}
|
||||
}
|
||||
|
||||
// If we are here the user is not able to delete - present the correct error message
|
||||
if ($post_data['poster_id'] != $user->data['user_id'] && $auth->acl_get('f_delete', $forum_id))
|
||||
{
|
||||
trigger_error('DELETE_OWN_POSTS');
|
||||
}
|
||||
|
||||
if ($post_data['poster_id'] == $user->data['user_id'] && $auth->acl_get('f_delete', $forum_id) && $post_id != $post_data['topic_last_post_id'])
|
||||
{
|
||||
trigger_error('CANNOT_DELETE_REPLIED');
|
||||
}
|
||||
|
||||
trigger_error('USER_CANNOT_DELETE');
|
||||
}
|
||||
|
@@ -988,7 +988,7 @@ function handle_mark_actions($user_id, $mark_action)
|
||||
*/
|
||||
function delete_pm($user_id, $msg_ids, $folder_id)
|
||||
{
|
||||
global $db, $user, $phpbb_root_path, $phpEx, $phpbb_container;
|
||||
global $db, $user, $phpbb_root_path, $phpEx, $phpbb_container, $phpbb_dispatcher;
|
||||
|
||||
$user_id = (int) $user_id;
|
||||
$folder_id = (int) $folder_id;
|
||||
@@ -1012,6 +1012,18 @@ function delete_pm($user_id, $msg_ids, $folder_id)
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all info for PM(s) before they are deleted
|
||||
*
|
||||
* @event core.delete_pm_before
|
||||
* @var int user_id ID of the user requested the message delete
|
||||
* @var array msg_ids array of all messages to be deleted
|
||||
* @var int folder_id ID of the user folder where the messages are stored
|
||||
* @since 3.1.0-b5
|
||||
*/
|
||||
$vars = array('user_id', 'msg_ids', 'folder_id');
|
||||
extract($phpbb_dispatcher->trigger_event('core.delete_pm_before', compact($vars)));
|
||||
|
||||
// Get PM Information for later deleting
|
||||
$sql = 'SELECT msg_id, pm_unread, pm_new
|
||||
FROM ' . PRIVMSGS_TO_TABLE . '
|
||||
@@ -1906,6 +1918,19 @@ function submit_pm($mode, $subject, &$data, $put_in_outbox = true)
|
||||
$phpbb_notifications->add_notifications('pm', $pm_data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get PM message ID after submission to DB
|
||||
*
|
||||
* @event core.submit_pm_after
|
||||
* @var string mode PM Post mode - post|reply|quote|quotepost|forward|edit
|
||||
* @var string subject Subject of the private message
|
||||
* @var array data The whole row data of the PM.
|
||||
* @var array pm_data The data sent to notification class
|
||||
* @since 3.1.0-b5
|
||||
*/
|
||||
$vars = array('mode', 'subject', 'data', 'pm_data');
|
||||
extract($phpbb_dispatcher->trigger_event('core.submit_pm_after', compact($vars)));
|
||||
|
||||
return $data['msg_id'];
|
||||
}
|
||||
|
||||
|
@@ -485,6 +485,9 @@ class fileupload
|
||||
var $max_height = 0;
|
||||
var $error_prefix = '';
|
||||
|
||||
/** @var int Timeout for remote upload */
|
||||
var $upload_timeout = 6;
|
||||
|
||||
/**
|
||||
* Init file upload class.
|
||||
*
|
||||
@@ -828,13 +831,28 @@ class fileupload
|
||||
fputs($fsock, "HOST: " . $host . "\r\n");
|
||||
fputs($fsock, "Connection: close\r\n\r\n");
|
||||
|
||||
// Set a proper timeout for the socket
|
||||
socket_set_timeout($fsock, $this->upload_timeout);
|
||||
|
||||
$get_info = false;
|
||||
$data = '';
|
||||
while (!@feof($fsock))
|
||||
$length = false;
|
||||
$timer_stop = time() + $this->upload_timeout;
|
||||
|
||||
while ((!$length || $filesize < $length) && !@feof($fsock))
|
||||
{
|
||||
if ($get_info)
|
||||
{
|
||||
$block = @fread($fsock, 1024);
|
||||
if ($length)
|
||||
{
|
||||
// Don't attempt to read past end of file if server indicated length
|
||||
$block = @fread($fsock, min($length - $filesize, 1024));
|
||||
}
|
||||
else
|
||||
{
|
||||
$block = @fread($fsock, 1024);
|
||||
}
|
||||
|
||||
$filesize += strlen($block);
|
||||
|
||||
if ($remote_max_filesize && $filesize > $remote_max_filesize)
|
||||
@@ -880,6 +898,15 @@ class fileupload
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$stream_meta_data = stream_get_meta_data($fsock);
|
||||
|
||||
// Cancel upload if we exceed timeout
|
||||
if (!empty($stream_meta_data['timed_out']) || time() >= $timer_stop)
|
||||
{
|
||||
$file = new fileerror($user->lang[$this->error_prefix . 'REMOTE_UPLOAD_TIMEOUT']);
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
@fclose($fsock);
|
||||
|
||||
@@ -1051,7 +1078,7 @@ class fileupload
|
||||
*/
|
||||
static public function image_types()
|
||||
{
|
||||
return array(
|
||||
$result = array(
|
||||
IMAGETYPE_GIF => array('gif'),
|
||||
IMAGETYPE_JPEG => array('jpg', 'jpeg'),
|
||||
IMAGETYPE_PNG => array('png'),
|
||||
@@ -1064,10 +1091,16 @@ class fileupload
|
||||
IMAGETYPE_JP2 => array('jpg', 'jpeg'),
|
||||
IMAGETYPE_JPX => array('jpg', 'jpeg'),
|
||||
IMAGETYPE_JB2 => array('jpg', 'jpeg'),
|
||||
IMAGETYPE_SWC => array('swc'),
|
||||
IMAGETYPE_IFF => array('iff'),
|
||||
IMAGETYPE_WBMP => array('wbmp'),
|
||||
IMAGETYPE_XBM => array('xbm'),
|
||||
);
|
||||
|
||||
if (defined('IMAGETYPE_SWC'))
|
||||
{
|
||||
$result[IMAGETYPE_SWC] = array('swc');
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
@@ -184,7 +184,6 @@ function user_add($user_row, $cp_data = false)
|
||||
'username' => $user_row['username'],
|
||||
'username_clean' => $username_clean,
|
||||
'user_password' => (isset($user_row['user_password'])) ? $user_row['user_password'] : '',
|
||||
'user_pass_convert' => 0,
|
||||
'user_email' => strtolower($user_row['user_email']),
|
||||
'user_email_hash' => phpbb_email_hash($user_row['user_email']),
|
||||
'group_id' => $user_row['group_id'],
|
||||
@@ -262,10 +261,13 @@ function user_add($user_row, $cp_data = false)
|
||||
* Use this event to modify the values to be inserted when a user is added
|
||||
*
|
||||
* @event core.user_add_modify_data
|
||||
* @var array user_row Array of user details submited to user_add
|
||||
* @var array cp_data Array of Custom profile fields submited to user_add
|
||||
* @var array sql_ary Array of data to be inserted when a user is added
|
||||
* @since 3.1.0-a1
|
||||
* @change 3.1.0-b5
|
||||
*/
|
||||
$vars = array('sql_ary');
|
||||
$vars = array('user_row', 'cp_data', 'sql_ary');
|
||||
extract($phpbb_dispatcher->trigger_event('core.user_add_modify_data', compact($vars)));
|
||||
|
||||
$sql = 'INSERT INTO ' . USERS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
|
||||
@@ -345,6 +347,18 @@ function user_add($user_row, $cp_data = false)
|
||||
set_config('newest_user_colour', $row['group_colour'], true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Event that returns user id, user detals and user CPF of newly registared user
|
||||
*
|
||||
* @event core.user_add_after
|
||||
* @var int user_id User id of newly registared user
|
||||
* @var array user_row Array of user details submited to user_add
|
||||
* @var array cp_data Array of Custom profile fields submited to user_add
|
||||
* @since 3.1.0-b5
|
||||
*/
|
||||
$vars = array('user_id', 'user_row', 'cp_data');
|
||||
extract($phpbb_dispatcher->trigger_event('core.user_add_after', compact($vars)));
|
||||
|
||||
return $user_id;
|
||||
}
|
||||
|
||||
@@ -756,7 +770,7 @@ function user_ban($mode, $ban, $ban_len, $ban_len_other, $ban_exclude, $ban_reas
|
||||
else
|
||||
{
|
||||
$ban_other = explode('-', $ban_len_other);
|
||||
if (sizeof($ban_other) == 3 && ((int)$ban_other[0] < 9999) &&
|
||||
if (sizeof($ban_other) == 3 && ((int) $ban_other[0] < 9999) &&
|
||||
(strlen($ban_other[0]) == 4) && (strlen($ban_other[1]) == 2) && (strlen($ban_other[2]) == 2))
|
||||
{
|
||||
$ban_end = max($current_time, $user->create_datetime()
|
||||
@@ -1123,7 +1137,7 @@ function user_ban($mode, $ban, $ban_len, $ban_len_other, $ban_exclude, $ban_reas
|
||||
// Update log
|
||||
$log_entry = ($ban_exclude) ? 'LOG_BAN_EXCLUDE_' : 'LOG_BAN_';
|
||||
|
||||
// Add to moderator log, admin log and user notes
|
||||
// Add to admin log, moderator log and user notes
|
||||
add_log('admin', $log_entry . strtoupper($mode), $ban_reason, $ban_list_log);
|
||||
add_log('mod', 0, 0, $log_entry . strtoupper($mode), $ban_reason, $ban_list_log);
|
||||
if ($mode == 'user')
|
||||
@@ -1746,24 +1760,20 @@ function validate_password($password)
|
||||
}
|
||||
|
||||
/**
|
||||
* Check to see if email address is banned or already present in the DB
|
||||
* Check to see if email address is a valid address and contains a MX record
|
||||
*
|
||||
* @param string $email The email to check
|
||||
* @param string $allowed_email An allowed email, default being $user->data['user_email']
|
||||
*
|
||||
* @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_email($email, $allowed_email = false)
|
||||
function phpbb_validate_email($email, $config = null)
|
||||
{
|
||||
global $config, $db, $user;
|
||||
if ($config === null)
|
||||
{
|
||||
global $config;
|
||||
}
|
||||
|
||||
$email = strtolower($email);
|
||||
$allowed_email = ($allowed_email === false) ? strtolower($user->data['user_email']) : strtolower($allowed_email);
|
||||
|
||||
if ($allowed_email == $email)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!preg_match('/^' . get_preg_expression('email') . '$/i', $email))
|
||||
{
|
||||
@@ -1782,6 +1792,35 @@ function validate_email($email, $allowed_email = false)
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check to see if email address is banned or already present in the DB
|
||||
*
|
||||
* @param string $email The email to check
|
||||
* @param string $allowed_email An allowed email, default being $user->data['user_email']
|
||||
*
|
||||
* @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_user_email($email, $allowed_email = false)
|
||||
{
|
||||
global $config, $db, $user;
|
||||
|
||||
$email = strtolower($email);
|
||||
$allowed_email = ($allowed_email === false) ? strtolower($user->data['user_email']) : strtolower($allowed_email);
|
||||
|
||||
if ($allowed_email == $email)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$validate_email = phpbb_validate_email($email, $config);
|
||||
if ($validate_email)
|
||||
{
|
||||
return $validate_email;
|
||||
}
|
||||
|
||||
if (($ban_reason = $user->check_ban(false, false, $email, true)) !== false)
|
||||
{
|
||||
return ($ban_reason === true) ? 'EMAIL_BANNED' : $ban_reason;
|
||||
@@ -2062,7 +2101,7 @@ function avatar_delete($mode, $row, $clean_db = false)
|
||||
// Check if the users avatar is actually *not* a group avatar
|
||||
if ($mode == 'user')
|
||||
{
|
||||
if (strpos($row['user_avatar'], 'g') === 0 || (((int)$row['user_avatar'] !== 0) && ((int)$row['user_avatar'] !== (int)$row['user_id'])))
|
||||
if (strpos($row['user_avatar'], 'g') === 0 || (((int) $row['user_avatar'] !== 0) && ((int) $row['user_avatar'] !== (int) $row['user_id'])))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -2395,7 +2434,7 @@ function group_correct_avatar($group_id, $old_entry)
|
||||
{
|
||||
global $config, $db, $phpbb_root_path;
|
||||
|
||||
$group_id = (int)$group_id;
|
||||
$group_id = (int) $group_id;
|
||||
$ext = substr(strrchr($old_entry, '.'), 1);
|
||||
$old_filename = get_avatar_filename($old_entry);
|
||||
$new_filename = $config['avatar_salt'] . "_g$group_id.$ext";
|
||||
@@ -2820,7 +2859,7 @@ function remove_default_avatar($group_id, $user_ids)
|
||||
|
||||
$sql = 'SELECT *
|
||||
FROM ' . GROUPS_TABLE . '
|
||||
WHERE group_id = ' . (int)$group_id;
|
||||
WHERE group_id = ' . (int) $group_id;
|
||||
$result = $db->sql_query($sql);
|
||||
if (!$row = $db->sql_fetchrow($result))
|
||||
{
|
||||
@@ -2861,7 +2900,7 @@ function remove_default_rank($group_id, $user_ids)
|
||||
|
||||
$sql = 'SELECT *
|
||||
FROM ' . GROUPS_TABLE . '
|
||||
WHERE group_id = ' . (int)$group_id;
|
||||
WHERE group_id = ' . (int) $group_id;
|
||||
$result = $db->sql_query($sql);
|
||||
if (!$row = $db->sql_fetchrow($result))
|
||||
{
|
||||
@@ -2872,9 +2911,9 @@ function remove_default_rank($group_id, $user_ids)
|
||||
|
||||
$sql = 'UPDATE ' . USERS_TABLE . '
|
||||
SET user_rank = 0
|
||||
WHERE group_id = ' . (int)$group_id . '
|
||||
WHERE group_id = ' . (int) $group_id . '
|
||||
AND user_rank <> 0
|
||||
AND user_rank = ' . (int)$row['group_rank'] . '
|
||||
AND user_rank = ' . (int) $row['group_rank'] . '
|
||||
AND ' . $db->sql_in_set('user_id', $user_ids);
|
||||
$db->sql_query($sql);
|
||||
}
|
||||
@@ -3506,3 +3545,23 @@ function phpbb_get_banned_user_ids($user_ids = array(), $ban_end = true)
|
||||
|
||||
return $banned_ids_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function for assigning a template var if the zebra module got included
|
||||
*/
|
||||
function phpbb_module_zebra($mode, &$module_row)
|
||||
{
|
||||
global $template;
|
||||
|
||||
$template->assign_var('S_ZEBRA_ENABLED', true);
|
||||
|
||||
if ($mode == 'friends')
|
||||
{
|
||||
$template->assign_var('S_ZEBRA_FRIENDS_ENABLED', true);
|
||||
}
|
||||
|
||||
if ($mode == 'foes')
|
||||
{
|
||||
$template->assign_var('S_ZEBRA_FOES_ENABLED', true);
|
||||
}
|
||||
}
|
||||
|
@@ -185,7 +185,7 @@ class mcp_ban
|
||||
}
|
||||
else if ($post_id)
|
||||
{
|
||||
$post_info = get_post_data($post_id, 'm_ban');
|
||||
$post_info = phpbb_get_post_data($post_id, 'm_ban');
|
||||
|
||||
if (sizeof($post_info) && !empty($post_info[$post_id]))
|
||||
{
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user