mirror of
https://github.com/phpbb/phpbb.git
synced 2025-09-07 23:01:04 +02:00
Compare commits
2315 Commits
release-3.
...
release-3.
Author | SHA1 | Date | |
---|---|---|---|
|
c992272036 | ||
|
7c090c6e2a | ||
|
4c419c5acd | ||
|
eaa0c779a6 | ||
|
3c7bf782a7 | ||
|
aa21aff080 | ||
|
443d82d082 | ||
|
5abc36f651 | ||
|
f971d7ffcb | ||
|
ed145b8317 | ||
|
26e49d4b15 | ||
|
43ff56a7a7 | ||
|
6c35cea146 | ||
|
62f9f53f46 | ||
|
4a039d853f | ||
|
b1282fcbc7 | ||
|
58d87c7c06 | ||
|
fd58e4f338 | ||
|
8129208e56 | ||
|
ecceeab709 | ||
|
660f3d2b86 | ||
|
ae1d830e84 | ||
|
688c7cad49 | ||
|
44f04a91f3 | ||
|
db7b4c999d | ||
|
1b0c9b22e0 | ||
|
4217dc46ca | ||
|
46ea7a8ffd | ||
|
f80b41aa77 | ||
|
501ecf5dec | ||
|
13b267ca6f | ||
|
6db142b8ef | ||
|
4ba4b94fe0 | ||
|
7c95839951 | ||
|
cd619d350b | ||
|
fe4d8bfa7e | ||
|
283b4f8171 | ||
|
990cbe093b | ||
|
80957d12eb | ||
|
d8dc1204c2 | ||
|
d5e94f1d97 | ||
|
9ace4dc585 | ||
|
2ac9c0ae7c | ||
|
914383a581 | ||
|
45a43e85d8 | ||
|
08d184b0fa | ||
|
d6a17c1fe7 | ||
|
ba03a05d27 | ||
|
17d066a980 | ||
|
b574a0294c | ||
|
4fb06b00b7 | ||
|
3d70d87b57 | ||
|
f55d747bb4 | ||
|
c5f13dd327 | ||
|
e406308244 | ||
|
15556319d9 | ||
|
7a21119d17 | ||
|
5a09105c3c | ||
|
48c2ca9dfe | ||
|
d6ed21f3f2 | ||
|
929013388f | ||
|
d844f82f56 | ||
|
f7d16fc626 | ||
|
9eb30b5d8e | ||
|
544e0900e6 | ||
|
c26ded6025 | ||
|
1c73b7ab19 | ||
|
472b36877c | ||
|
66b6a5e1f3 | ||
|
8acba2db02 | ||
|
bf4e26a0b8 | ||
|
7c4b6cde8b | ||
|
7f08efb04c | ||
|
6ca926c146 | ||
|
a7b673a1b6 | ||
|
03f315f7b7 | ||
|
76752800c2 | ||
|
23f872d138 | ||
|
92730af7a4 | ||
|
80f4c07bc5 | ||
|
dc0561c8bf | ||
|
9c9dcb1e35 | ||
|
b083e223e2 | ||
|
88243d296c | ||
|
53c60419b4 | ||
|
45515b7072 | ||
|
cc4579ee04 | ||
|
6d0a965db2 | ||
|
629a909b65 | ||
|
331bea8b22 | ||
|
9b4743c028 | ||
|
6623e7fe1d | ||
|
9d64579dea | ||
|
092f583422 | ||
|
8b7f215309 | ||
|
31f0e7b882 | ||
|
ee3b351419 | ||
|
99861a8c10 | ||
|
2973c2f6db | ||
|
57ef18ecc0 | ||
|
e9e305ee9f | ||
|
1d256fef61 | ||
|
599073cab2 | ||
|
b7ffee0945 | ||
|
56c1b9b5bd | ||
|
18c00a902f | ||
|
8497104bdb | ||
|
4038bb9dc3 | ||
|
935c1a3ea2 | ||
|
6eb49d0907 | ||
|
7fe0cc7f26 | ||
|
28cf33eb2f | ||
|
cf47bed67e | ||
|
1e28669407 | ||
|
58cc1f4ef3 | ||
|
8104facb30 | ||
|
45d64a1627 | ||
|
10f92dbb68 | ||
|
bc7bd15312 | ||
|
5c40766dc4 | ||
|
661140c50b | ||
|
294c517256 | ||
|
de660fe0c8 | ||
|
e602889213 | ||
|
f4b1444248 | ||
|
13e6cd5992 | ||
|
dd9267b678 | ||
|
f646fcdefa | ||
|
99c97b951f | ||
|
f41c8eef47 | ||
|
17b4838ee3 | ||
|
a0092bdd18 | ||
|
c0b81a1a48 | ||
|
89afa0cb5e | ||
|
a62a303318 | ||
|
cacd9375fd | ||
|
7763969625 | ||
|
a2e7205154 | ||
|
350c9213ee | ||
|
7365764476 | ||
|
dd4c982792 | ||
|
2088ee5e84 | ||
|
926a0a4e33 | ||
|
30144052da | ||
|
8298095421 | ||
|
55dbe070e3 | ||
|
8639be4bd4 | ||
|
ffc655a1ba | ||
|
922e7699ed | ||
|
c790e81fb6 | ||
|
42851d0d9f | ||
|
00d1351e55 | ||
|
48a233e415 | ||
|
6798c337f8 | ||
|
99b745982e | ||
|
bde7b119b2 | ||
|
5013075af7 | ||
|
40881b537e | ||
|
efece4136b | ||
|
38177e9052 | ||
|
a4296a9e6b | ||
|
d7477760d6 | ||
|
e53db0775a | ||
|
294b3ff922 | ||
|
8aef7b5659 | ||
|
9e11624693 | ||
|
e6bdecbfee | ||
|
ad77f0d0ab | ||
|
5a9c01716f | ||
|
5b03cd422a | ||
|
e5d2e82ef5 | ||
|
8eacbf8305 | ||
|
5976dc2141 | ||
|
3647cf2cfe | ||
|
dd3ebe2b71 | ||
|
f3460fe9eb | ||
|
15960a7918 | ||
|
fa893f092b | ||
|
99b07b884b | ||
|
7f9bcc2743 | ||
|
d875eaa405 | ||
|
db40145fd5 | ||
|
8c77da9c30 | ||
|
09f0b417be | ||
|
8432e506c4 | ||
|
77d1010081 | ||
|
4003f54d0b | ||
|
abaef09a14 | ||
|
127121f1d2 | ||
|
e53cd79067 | ||
|
8bdff227d9 | ||
|
df7dae9600 | ||
|
e21a8e02cd | ||
|
db9874546b | ||
|
e125f1f709 | ||
|
9e15802805 | ||
|
f98f2c5896 | ||
|
c2d91650bd | ||
|
51b773e588 | ||
|
ef4db99709 | ||
|
cd0e682984 | ||
|
431b399c68 | ||
|
56d8a7e43f | ||
|
2976314205 | ||
|
be6bb09984 | ||
|
8a8232109c | ||
|
f3ead808f3 | ||
|
276502ce58 | ||
|
8899fcfdc2 | ||
|
2aba9b0e3f | ||
|
80a12f7108 | ||
|
6cef48af2f | ||
|
607fe555af | ||
|
166c4eeb7e | ||
|
bf55502c62 | ||
|
df5fcafcb9 | ||
|
1fb7e6d2c8 | ||
|
1c1c981b17 | ||
|
7c661746cf | ||
|
24dd47adcf | ||
|
f853f6523f | ||
|
a63a1913fa | ||
|
ef593afec5 | ||
|
51da43f77f | ||
|
e328ee96d2 | ||
|
7f11c1b46d | ||
|
ae18669fcd | ||
|
9ea4aabe9a | ||
|
a88040df85 | ||
|
fcf89208cf | ||
|
d365f17ebd | ||
|
6f345e43cb | ||
|
874fb7bf8a | ||
|
558b8ae7ed | ||
|
477f5d9e1d | ||
|
92e545fc26 | ||
|
c330500c4d | ||
|
9fcf956888 | ||
|
40ed6c6458 | ||
|
cd34cdedee | ||
|
e850915190 | ||
|
d14f98f672 | ||
|
130c10915e | ||
|
9ecf09dbe8 | ||
|
8954a68953 | ||
|
f986138467 | ||
|
611faafaf3 | ||
|
ed0b5020a9 | ||
|
b2d2216b87 | ||
|
766ecaed5a | ||
|
a7a53de34d | ||
|
6aa980eadb | ||
|
dbf0b9ebe6 | ||
|
874fb8c59c | ||
|
e195e2ad82 | ||
|
9aebbcc1a0 | ||
|
de31c4e797 | ||
|
7b734ef529 | ||
|
6753961756 | ||
|
d2295b82f1 | ||
|
74845a6b3a | ||
|
f13b17fd00 | ||
|
149d0bd227 | ||
|
eb12d385a0 | ||
|
d318768634 | ||
|
843cb97048 | ||
|
a85c36b15e | ||
|
76ab83893b | ||
|
9aec69413f | ||
|
42108b5e11 | ||
|
2267ef1ac2 | ||
|
3f73ae8545 | ||
|
6f45b46746 | ||
|
df43810f55 | ||
|
42252460a9 | ||
|
8dd6b5373d | ||
|
6c45c1ff6b | ||
|
18a672c16e | ||
|
d60998ba69 | ||
|
17a50027b1 | ||
|
663100a44f | ||
|
1c8128292c | ||
|
25bd56c254 | ||
|
d0c48f3fde | ||
|
abffd0f662 | ||
|
adf53d3264 | ||
|
a9576a4084 | ||
|
98929ca983 | ||
|
3b5777f900 | ||
|
6943fbba89 | ||
|
c07c6816fc | ||
|
b38e8a2c84 | ||
|
b2459edaf3 | ||
|
ff96c1a907 | ||
|
b4a343bdc9 | ||
|
6ee64c94a2 | ||
|
9c51a7866b | ||
|
51b3d9de63 | ||
|
bda99e1c35 | ||
|
763c6f625f | ||
|
06672d896b | ||
|
4afa184110 | ||
|
602841fd11 | ||
|
ae3c294a2f | ||
|
00b8cb1e52 | ||
|
eabe2632dc | ||
|
112392bcf3 | ||
|
9401ce1c5f | ||
|
ec7180db4f | ||
|
512a93727a | ||
|
c4642d2502 | ||
|
f3a596b78b | ||
|
887b1e25fb | ||
|
f31ea59a1a | ||
|
61a28c154b | ||
|
565053f508 | ||
|
5a922ffa5b | ||
|
b4ff57e2a4 | ||
|
e4d5cbbc76 | ||
|
dc415768a8 | ||
|
6a8140e82b | ||
|
213d092f6f | ||
|
3477562c58 | ||
|
d5d449b78e | ||
|
6c43f81e8d | ||
|
856ce16a87 | ||
|
bc5c095363 | ||
|
9ba6e9b60d | ||
|
bf26da660a | ||
|
a9b5dcd954 | ||
|
303f8f55cb | ||
|
c6fe842bc8 | ||
|
92e678a116 | ||
|
c098468699 | ||
|
613582e2c5 | ||
|
43e69df080 | ||
|
f6b4c5b70d | ||
|
fe84120bf2 | ||
|
0e1e792574 | ||
|
d4178511a2 | ||
|
0e3bc638e9 | ||
|
dd549a5e43 | ||
|
526c79d2e2 | ||
|
8afc638171 | ||
|
9e130333c0 | ||
|
2b7d8020b9 | ||
|
bb7e7b682d | ||
|
37039f95d2 | ||
|
993e28098d | ||
|
25c20cbcf3 | ||
|
88bbd0fca6 | ||
|
eed57fd089 | ||
|
58fc9e042a | ||
|
5ab3916311 | ||
|
79b8f56427 | ||
|
593c4b875c | ||
|
2e93f5f3e8 | ||
|
959f60a591 | ||
|
607a2c483a | ||
|
70ba9dac03 | ||
|
7e6c5df710 | ||
|
90973a52b4 | ||
|
4eef6a4de4 | ||
|
01b8d6a58e | ||
|
31b3d56ac1 | ||
|
ccf6e6c255 | ||
|
8fe3a97a1a | ||
|
2c5519da39 | ||
|
0c90bf0000 | ||
|
edc610e81d | ||
|
e071cd801a | ||
|
ac76b80cb1 | ||
|
d4e0840e6f | ||
|
137422116e | ||
|
5f8c9962a0 | ||
|
0a8391857f | ||
|
233d6a0a69 | ||
|
91b3627236 | ||
|
9dec6d3176 | ||
|
6fac65d193 | ||
|
42bf5778d5 | ||
|
4bf78d139b | ||
|
d76c571ad1 | ||
|
4046365977 | ||
|
c480dd8d2f | ||
|
266376af2e | ||
|
c4f42c1573 | ||
|
d8ac6f575e | ||
|
715c0ad608 | ||
|
745dd5f5a8 | ||
|
346523fad6 | ||
|
78aca08d39 | ||
|
90b1c2210e | ||
|
a04af20806 | ||
|
88dcb5d3d5 | ||
|
2d3781f285 | ||
|
b724e82bbd | ||
|
3163b1726c | ||
|
6b6c710706 | ||
|
a78eb6fb42 | ||
|
3b622bc005 | ||
|
b14f37d409 | ||
|
b0248d2d78 | ||
|
0f38ece743 | ||
|
e80cf43adc | ||
|
aba7f4a9e6 | ||
|
e1052bd168 | ||
|
d59a4d4aad | ||
|
8360752b2a | ||
|
d572070456 | ||
|
4513d1c0af | ||
|
74fe9f40b7 | ||
|
bdbbc63b9c | ||
|
10330e5867 | ||
|
2563561663 | ||
|
facd14b47e | ||
|
0596d1065e | ||
|
a414a44e36 | ||
|
6268693cff | ||
|
e5db724d2c | ||
|
dd790b41eb | ||
|
50859bc8a5 | ||
|
b0d976f462 | ||
|
9515abdb91 | ||
|
b53645177b | ||
|
0df0bd269a | ||
|
098f22609d | ||
|
1dedb05dce | ||
|
e3547aeb82 | ||
|
253ecdd3fe | ||
|
f9281f9267 | ||
|
56f0846378 | ||
|
0ede362120 | ||
|
e11c11ac9d | ||
|
e0e0173442 | ||
|
33c4abe909 | ||
|
cca85f648b | ||
|
add6d2b726 | ||
|
5f825002b6 | ||
|
aaf5700076 | ||
|
e9ac8f1f94 | ||
|
a39691b0d5 | ||
|
0c8e6172fb | ||
|
14b94a1e62 | ||
|
b550d1db0a | ||
|
a686a2f057 | ||
|
22d6b035d6 | ||
|
bdeedfea4e | ||
|
85e5c9dcca | ||
|
91f216d9ce | ||
|
b0c008690a | ||
|
55ea8d6030 | ||
|
8223a956df | ||
|
cfd15752ee | ||
|
5ee2efd4c2 | ||
|
0fdc76521b | ||
|
7ba5f8f22a | ||
|
f99d1a7a51 | ||
|
33dfaa478c | ||
|
4c72b76809 | ||
|
bf50c63d6e | ||
|
464466cade | ||
|
735b826063 | ||
|
b613c9f63d | ||
|
acaec9f95f | ||
|
2f3066235c | ||
|
e0a30fbce7 | ||
|
a8658fe4d1 | ||
|
c11f16fda0 | ||
|
bbe2b21310 | ||
|
8c33a2180d | ||
|
9e55d3cb44 | ||
|
a14e8f8ce5 | ||
|
4f9bd296a7 | ||
|
65fb35223c | ||
|
aefdd86020 | ||
|
aafb522538 | ||
|
1eb81e9b2a | ||
|
d8d67b5f17 | ||
|
7adee3c50d | ||
|
75dcbeaa9f | ||
|
f4af87f718 | ||
|
26d002a51a | ||
|
e0144ae7b2 | ||
|
c2c7c271e7 | ||
|
dfe6421da8 | ||
|
60d267893c | ||
|
e0361fe9fe | ||
|
130e7f7e8a | ||
|
f5c5d7d1e6 | ||
|
bddb4decfb | ||
|
3cde5974d2 | ||
|
5655febb8d | ||
|
437839ba72 | ||
|
4f49fb1f98 | ||
|
6e77ca50ae | ||
|
015c038d92 | ||
|
bd55fe7e8c | ||
|
6e66f1505c | ||
|
640a2221a5 | ||
|
c27214495c | ||
|
98f6a1a300 | ||
|
0260fcd6a7 | ||
|
f2d004a881 | ||
|
31654e728f | ||
|
c879d9380f | ||
|
9db5da5b3d | ||
|
d5aa6189b6 | ||
|
389cca5402 | ||
|
defb807dbc | ||
|
9fb7a9108a | ||
|
4bf78fd7fd | ||
|
261aa0e6aa | ||
|
41b8ec0470 | ||
|
984596ffd3 | ||
|
1416e25cfd | ||
|
3584d79e87 | ||
|
e5bbb899f7 | ||
|
2afc1c369a | ||
|
81f67f3a6e | ||
|
4a185ed02e | ||
|
cfd0fe6943 | ||
|
3f6abe056a | ||
|
9b961836be | ||
|
aa5e9bf25c | ||
|
50c3c3f0ee | ||
|
1f96a2c79a | ||
|
24a5972a0b | ||
|
fc8c6acae4 | ||
|
0f445c73a0 | ||
|
0f1c62bc7b | ||
|
b7258788cc | ||
|
632702e10f | ||
|
b5c316c9c3 | ||
|
458940217b | ||
|
1b82ea8a11 | ||
|
85cf70765d | ||
|
9794a84f3a | ||
|
33ba9f3392 | ||
|
09820dfdfa | ||
|
6590827316 | ||
|
738dd786ba | ||
|
17f2d6e03a | ||
|
20c3371460 | ||
|
aa523eadf1 | ||
|
d76f5132db | ||
|
179dcd9642 | ||
|
8ebb64a92a | ||
|
e091adcc9c | ||
|
61a7e0fdfc | ||
|
ad794c17ed | ||
|
b5f8251b3f | ||
|
b5f10f844f | ||
|
a1a6ff4555 | ||
|
eabe7e8e3c | ||
|
6d8468c91a | ||
|
aff7fab65f | ||
|
be053c3381 | ||
|
e805a47a98 | ||
|
9feae900d3 | ||
|
34f23477ff | ||
|
e5f069b15b | ||
|
fd550bc25a | ||
|
378c63b002 | ||
|
51766ffaee | ||
|
2c8e16cf4b | ||
|
279f506d69 | ||
|
8564e1eac1 | ||
|
6e45a2361d | ||
|
83b53690b5 | ||
|
191f38b9a0 | ||
|
96afebf969 | ||
|
3ece314338 | ||
|
c62d9e4c05 | ||
|
34b56205a3 | ||
|
a0477a10ce | ||
|
9e44ba096e | ||
|
7d29f133e5 | ||
|
e535f8e054 | ||
|
11e68e910b | ||
|
02efbc251e | ||
|
7434783b07 | ||
|
d446030a9b | ||
|
d6e3dfff6d | ||
|
369ee44b6f | ||
|
0543c810a7 | ||
|
bb0f6d040c | ||
|
02ef7c5da4 | ||
|
90899a17dd | ||
|
9c70c15e1c | ||
|
21374390ad | ||
|
d03a853f6e | ||
|
014008fd48 | ||
|
b3d593b626 | ||
|
744009882b | ||
|
1c407e8049 | ||
|
e75ea6642d | ||
|
ad9e5e6891 | ||
|
b828efa9e6 | ||
|
c66923bafc | ||
|
ebc5e1ead0 | ||
|
3db6cc98f5 | ||
|
a45f8f0796 | ||
|
c2968212d8 | ||
|
0793126dc4 | ||
|
9fb2dbb776 | ||
|
6f034c5215 | ||
|
0802772f09 | ||
|
696ff06263 | ||
|
b86d15a766 | ||
|
637844f264 | ||
|
c410829a42 | ||
|
8ef6a5c1bc | ||
|
cd36a68645 | ||
|
5225ac8a9a | ||
|
aaaef71b60 | ||
|
1fe8bbf47a | ||
|
827c135cc9 | ||
|
67c41633a2 | ||
|
92cebdd624 | ||
|
7017c73156 | ||
|
2e025be53a | ||
|
2126738598 | ||
|
99286b1fdd | ||
|
64717d0270 | ||
|
f197662653 | ||
|
e080a8533d | ||
|
f84e03f646 | ||
|
7c02b58114 | ||
|
12256eabb6 | ||
|
9b1bae858f | ||
|
db3c143b73 | ||
|
ea19638f4e | ||
|
89b07af756 | ||
|
7275f9e7f1 | ||
|
8fbbaf97ab | ||
|
b8a3d8f25d | ||
|
495986ff5d | ||
|
3ed3abb446 | ||
|
ca8c402796 | ||
|
fafe250b0d | ||
|
256ea96cd9 | ||
|
5cdd22e058 | ||
|
47e30a2e21 | ||
|
040c2e9b78 | ||
|
2c661205e4 | ||
|
b5d2ff4074 | ||
|
b3d93a09f2 | ||
|
2f72950d2d | ||
|
064a96ec07 | ||
|
a8feaeafe8 | ||
|
fc83f213d5 | ||
|
5e3dd4b55e | ||
|
53e5113893 | ||
|
f930f8821f | ||
|
b84b875cd2 | ||
|
bc4a787470 | ||
|
c6ef628589 | ||
|
d4415d4ad8 | ||
|
2b92ff372b | ||
|
c410c9bc47 | ||
|
52f625a88c | ||
|
feea7958f7 | ||
|
c61c130596 | ||
|
59a95a3c35 | ||
|
60af39b38c | ||
|
8376012f9a | ||
|
dd6e110210 | ||
|
898075f0f8 | ||
|
3308318524 | ||
|
54c27e3e67 | ||
|
54156dd9d8 | ||
|
8084d977fb | ||
|
997f1b92cf | ||
|
e1069bcbde | ||
|
9e22bc8691 | ||
|
751b0e2ede | ||
|
9fb98201f2 | ||
|
b9f7c3ff6e | ||
|
0d84769d66 | ||
|
cd9aea32b9 | ||
|
a12a6f52ae | ||
|
9739fabd68 | ||
|
32ce101541 | ||
|
89d2fcf5ed | ||
|
5e10b02103 | ||
|
1ce11e39e1 | ||
|
aed2d00373 | ||
|
691a891634 | ||
|
33af6d0f0a | ||
|
7a034a8c1e | ||
|
4d857c4be7 | ||
|
3ee1efe7e0 | ||
|
6fa019e23a | ||
|
9b2f42748c | ||
|
e53102fead | ||
|
87c1e631ef | ||
|
8c982c7aa0 | ||
|
8cfec5370a | ||
|
6cc0fe5f95 | ||
|
16b27be2d0 | ||
|
0dd053eeba | ||
|
4ed0201ffe | ||
|
19aadeefda | ||
|
8ca00c529e | ||
|
e138328be1 | ||
|
faec4417f4 | ||
|
34f27a1670 | ||
|
028340ee52 | ||
|
e86daaede6 | ||
|
91f2f2c6f1 | ||
|
5a3a91b464 | ||
|
1f972f0ee7 | ||
|
2e37b2dc2d | ||
|
8d6a9245c1 | ||
|
1a8950d01b | ||
|
b4fa01e943 | ||
|
cd057c126a | ||
|
377ebacf0d | ||
|
fb2d1c2a28 | ||
|
da2364b2c1 | ||
|
a5899494b9 | ||
|
86e009ad15 | ||
|
cc60a63f22 | ||
|
4044900c69 | ||
|
e84cf2e5ba | ||
|
e78664d68b | ||
|
a466be10c2 | ||
|
4e5b9b23de | ||
|
9bc98278fe | ||
|
33a789e030 | ||
|
c9db94f91c | ||
|
3cf83f1a62 | ||
|
d0344b9318 | ||
|
4072dd0246 | ||
|
6a6d83c674 | ||
|
94fe538100 | ||
|
4f9252568a | ||
|
5017dbd58d | ||
|
c4fcbc2cbd | ||
|
3be1e3029e | ||
|
7992b3f476 | ||
|
9dc25510a1 | ||
|
420f494628 | ||
|
8e4559f49f | ||
|
0fe95a032b | ||
|
9446db9cde | ||
|
adea3e734a | ||
|
919ff4575b | ||
|
ee56f0fe7d | ||
|
893dad0297 | ||
|
d08843853e | ||
|
97356d9879 | ||
|
9f09dec049 | ||
|
8a3164aaf7 | ||
|
6caf2f83ad | ||
|
4805e705ad | ||
|
9bf6e7f32e | ||
|
c93381ff04 | ||
|
88b79aba00 | ||
|
9c6df33e3b | ||
|
605726a4d7 | ||
|
3103e99dc7 | ||
|
a8c93ff661 | ||
|
1f4eac13b9 | ||
|
5e43f6195c | ||
|
6846eeaa48 | ||
|
b602b57b02 | ||
|
ba487a24dc | ||
|
015c9313a7 | ||
|
e7c81cd1a6 | ||
|
bf7936380a | ||
|
3f56bbb9d1 | ||
|
44d0a3a716 | ||
|
999122acdb | ||
|
c785c4b716 | ||
|
b305070e0a | ||
|
99634d4c05 | ||
|
fad1c652c0 | ||
|
1df74005a8 | ||
|
c7856ce162 | ||
|
cccf01447f | ||
|
ddc3eaa5bf | ||
|
65fa73855c | ||
|
391e4943d9 | ||
|
6801f7949f | ||
|
710aa10905 | ||
|
4a78202f96 | ||
|
d6a591cde3 | ||
|
4e447cc91a | ||
|
ec75f1741b | ||
|
af38f9d6c8 | ||
|
4614d3d92b | ||
|
866a4dc6d4 | ||
|
492352f652 | ||
|
1d05f722cb | ||
|
c1b88de806 | ||
|
89168c507b | ||
|
7a69c0f98c | ||
|
8cc6075d92 | ||
|
03b36d46c3 | ||
|
8104a446d4 | ||
|
aff3852568 | ||
|
39905eaf4b | ||
|
534cef94c9 | ||
|
a0ced790e2 | ||
|
0537365cac | ||
|
6e34e3c24e | ||
|
fecf3306f3 | ||
|
39db7005cd | ||
|
e956629735 | ||
|
89ca3f087e | ||
|
29d137cc5e | ||
|
88a11c1377 | ||
|
69b895caae | ||
|
d7f433fbf7 | ||
|
4d00c4c8af | ||
|
1e6c5cd381 | ||
|
0fbc5a3d83 | ||
|
3bfb2b3f69 | ||
|
337d876df7 | ||
|
8246023e0f | ||
|
b28b94b1f1 | ||
|
baf4bd7b5c | ||
|
81126dc97e | ||
|
391f80d480 | ||
|
febe44ed79 | ||
|
ede9a6815a | ||
|
2801415c1c | ||
|
dd029ed592 | ||
|
1d4fbd240e | ||
|
7275cdd152 | ||
|
b1e6fad38a | ||
|
9671a00214 | ||
|
d17b15a545 | ||
|
f841a0a1b8 | ||
|
7472d300b6 | ||
|
06ef03f8d6 | ||
|
40322bb1b6 | ||
|
6218c2e120 | ||
|
afbf7aadd2 | ||
|
a860a3310a | ||
|
ca24013470 | ||
|
99734fc648 | ||
|
3547f0bf0e | ||
|
01a22e7223 | ||
|
2145938d74 | ||
|
62a8741494 | ||
|
13155bf846 | ||
|
4d966d1762 | ||
|
056fb494b1 | ||
|
da7c9f6a7c | ||
|
73eb54bf54 | ||
|
6af8872ef3 | ||
|
a3070bedeb | ||
|
a12f903e93 | ||
|
d4cb357b26 | ||
|
b6e31e3664 | ||
|
7355ee623a | ||
|
a7385f0fbe | ||
|
c5814ddfaa | ||
|
96c439bf10 | ||
|
7a21a9032e | ||
|
1619014120 | ||
|
0a4d062e16 | ||
|
dda2dfecb3 | ||
|
b29c0ca153 | ||
|
c0296d10db | ||
|
4f3f91dfc3 | ||
|
52c931a8b6 | ||
|
9ca70432d9 | ||
|
1fbb807cc7 | ||
|
98f446df67 | ||
|
43b9254d1d | ||
|
97034e0776 | ||
|
02e5a7afc4 | ||
|
7efddcef54 | ||
|
ea36b83ee9 | ||
|
59cece1a0a | ||
|
e5fa23c3c0 | ||
|
9a7d88362f | ||
|
7f6c859b0d | ||
|
441a5a2175 | ||
|
ceca69d121 | ||
|
6a72d0305b | ||
|
7a8d9671c2 | ||
|
5b3d238804 | ||
|
1860a06eab | ||
|
1862992ca7 | ||
|
95fa6cceee | ||
|
19076de94c | ||
|
27289cbfad | ||
|
3d76942cdf | ||
|
51cc7202f8 | ||
|
303a933403 | ||
|
54b54c41c6 | ||
|
59e50d6d53 | ||
|
2a1656e7b3 | ||
|
12ce75b5f5 | ||
|
b82d90eb39 | ||
|
f302440297 | ||
|
848021c743 | ||
|
c4b4e1d7a9 | ||
|
ed33f06235 | ||
|
643845306a | ||
|
95511540ea | ||
|
b3b5fcc874 | ||
|
1b4ba00a73 | ||
|
8caf2e7c59 | ||
|
a87a60c108 | ||
|
5b5502390d | ||
|
1db2d9c3c1 | ||
|
5ef0105a5f | ||
|
e8421dbab1 | ||
|
e0197d711f | ||
|
11563ce971 | ||
|
bbcac37e30 | ||
|
8c25f3a9f7 | ||
|
e371f3eac7 | ||
|
dc7012864b | ||
|
cd53106ec3 | ||
|
86af3a2ba4 | ||
|
a6d4b460f1 | ||
|
975ad95bff | ||
|
61c59bdc91 | ||
|
79efbcaa4e | ||
|
8cc0e5438a | ||
|
2c8be65dcf | ||
|
c3598d0d58 | ||
|
92a2c08616 | ||
|
e5b43eabe1 | ||
|
a8be17dd4d | ||
|
170ddeaf63 | ||
|
8db200d75f | ||
|
3638b36849 | ||
|
8804cf885b | ||
|
ad23388043 | ||
|
79a8ed4677 | ||
|
5eeb213b12 | ||
|
75df7c202e | ||
|
2ef37a8e77 | ||
|
acbcb18226 | ||
|
5d0fd9f73a | ||
|
47c583516b | ||
|
91c6edf092 | ||
|
c2873cbc01 | ||
|
a1f1c0cc9d | ||
|
f46ebf5bec | ||
|
6dd7b7e8b5 | ||
|
721a39502a | ||
|
b01a956461 | ||
|
364c6d328a | ||
|
f7487e4e5c | ||
|
84b414a4f0 | ||
|
3f9e6c6013 | ||
|
e855f5cba4 | ||
|
90fccff6f1 | ||
|
a380c78e1e | ||
|
a6a18f2c59 | ||
|
6efebf7571 | ||
|
c7c3adf762 | ||
|
2e29bb48fa | ||
|
e1fc0a9059 | ||
|
c846dd5666 | ||
|
19a5900db5 | ||
|
5de8c3dc3c | ||
|
3ae0d347c9 | ||
|
2244635a41 | ||
|
68bd4e9faa | ||
|
8c12c46869 | ||
|
aecd1fa04e | ||
|
ac781e570f | ||
|
f28eed7f30 | ||
|
2869e04756 | ||
|
4446888eb2 | ||
|
7783912e93 | ||
|
ccac4c5fe8 | ||
|
a18681cfe4 | ||
|
096dad1767 | ||
|
068f8eed25 | ||
|
dd62829f96 | ||
|
be2959fbab | ||
|
7acdef7c01 | ||
|
bd0b6fbdab | ||
|
c83b4c21a4 | ||
|
9d22731d03 | ||
|
7b5ad8bb74 | ||
|
af98278590 | ||
|
bef2a4bc41 | ||
|
f24396ac0d | ||
|
b7f57eb556 | ||
|
c452c83855 | ||
|
c9b32463de | ||
|
1177f843c5 | ||
|
cdca28eb3f | ||
|
5169a947f4 | ||
|
6a95f34d0c | ||
|
11083e59ed | ||
|
6b45c7bd5f | ||
|
c5ec036b84 | ||
|
e2cfc01964 | ||
|
f007aef3d8 | ||
|
5ad1ae4e7b | ||
|
32586407d1 | ||
|
233b2fdade | ||
|
ea7e07c1a4 | ||
|
acf0885948 | ||
|
d8ef094a9a | ||
|
c925e8ef58 | ||
|
3f518c9263 | ||
|
8a746b457d | ||
|
0502b9cc22 | ||
|
6a0b1333da | ||
|
d05abc0807 | ||
|
b734fed853 | ||
|
67f80c7942 | ||
|
bb24d619d2 | ||
|
62f59fa59d | ||
|
adacf21edb | ||
|
314ab17edd | ||
|
49974a169b | ||
|
3bb58556ea | ||
|
98713a7cbe | ||
|
43e503e0ee | ||
|
37518342c6 | ||
|
81d582a2d2 | ||
|
bcea34ee7c | ||
|
3ff99a9eb1 | ||
|
20fbe0e254 | ||
|
e22f431660 | ||
|
9c8f2007d9 | ||
|
62a45d86ec | ||
|
3e0b20820a | ||
|
2dc8e61a72 | ||
|
47321954b7 | ||
|
ecc79ea2ec | ||
|
710740d6be | ||
|
de3c0f274c | ||
|
b215f13f04 | ||
|
950d8b8a13 | ||
|
31fc85153e | ||
|
782b0758ef | ||
|
21c5c5a336 | ||
|
f861f1fb9a | ||
|
7f79849146 | ||
|
db9f54bee5 | ||
|
134482f6c2 | ||
|
9051b28e14 | ||
|
1f76aa65f3 | ||
|
a641a992f6 | ||
|
8c334f0c10 | ||
|
ecd7b14171 | ||
|
65a1ed0f82 | ||
|
f6a8981028 | ||
|
bd1033be68 | ||
|
6eb357b421 | ||
|
1482efc927 | ||
|
908245686e | ||
|
70337e99fa | ||
|
1ecc2e042b | ||
|
bcc75099ab | ||
|
2c66f69c51 | ||
|
e1a6ed45bb | ||
|
3d5639a844 | ||
|
705cc6ee6b | ||
|
808be852c4 | ||
|
95496ebd38 | ||
|
574de287e7 | ||
|
e79afc6293 | ||
|
8e5be03fe9 | ||
|
b6f4f30015 | ||
|
222c7cd74b | ||
|
2d0e727f33 | ||
|
4ce8224c2c | ||
|
9d2fae3285 | ||
|
47f7a81b41 | ||
|
e49a6e06a8 | ||
|
4d5db19feb | ||
|
e8afa29013 | ||
|
1e6ed3f0f5 | ||
|
c99bfe116f | ||
|
03824189e4 | ||
|
645e662b11 | ||
|
1d22f001e6 | ||
|
718d2dc77e | ||
|
92425fcb46 | ||
|
7d48254cc9 | ||
|
c4efe5d0fa | ||
|
50a917ab4c | ||
|
736b619294 | ||
|
a8ffd339fe | ||
|
0897d3e381 | ||
|
5b84c51d81 | ||
|
e0b4f3ff37 | ||
|
4721007c02 | ||
|
f6b4031a96 | ||
|
39d89c8dbc | ||
|
8f2d84f4dc | ||
|
fe49e110bd | ||
|
6d46c08191 | ||
|
95bbebeb22 | ||
|
e3752b70e2 | ||
|
b45bd3ace7 | ||
|
8d5a624c8d | ||
|
29a3b6c792 | ||
|
78679ed001 | ||
|
2919b147d8 | ||
|
f514c5eafb | ||
|
2d1ce7dc24 | ||
|
026a143e42 | ||
|
9417c1803e | ||
|
6ebd64521b | ||
|
b3edc0884f | ||
|
48ce6a9a68 | ||
|
bf5f0bb8f7 | ||
|
b978fd9dc6 | ||
|
ae7f38331d | ||
|
3a21109f89 | ||
|
5d18ad678b | ||
|
2ea22ee387 | ||
|
37c7e0a6d0 | ||
|
22f7f491c5 | ||
|
60d6727974 | ||
|
86bbd05608 | ||
|
516d0f5b27 | ||
|
40d825d1c6 | ||
|
9ff92f2c36 | ||
|
740b2ffbf2 | ||
|
6728497434 | ||
|
9d2ab88c69 | ||
|
7a310cc7d9 | ||
|
20d4a86016 | ||
|
f3d3b493f7 | ||
|
448b6a7d49 | ||
|
8c9d26db1f | ||
|
e4fc9bb0b1 | ||
|
66cbf2607b | ||
|
2a90ce1935 | ||
|
b06746460e | ||
|
374a3a2005 | ||
|
84453ed957 | ||
|
8f21a055ad | ||
|
ed2f948bf5 | ||
|
5424cbd7f9 | ||
|
4ce2643bdb | ||
|
b5d1573acd | ||
|
784f0d5f3b | ||
|
c492b51b54 | ||
|
bd1c3c87b7 | ||
|
71e8f68102 | ||
|
76e1a46512 | ||
|
8467a95127 | ||
|
ae8aee0e60 | ||
|
b25fbc73d9 | ||
|
c499025623 | ||
|
91a5a73dca | ||
|
9f316bd255 | ||
|
0daf4b6b1c | ||
|
3ab6059b56 | ||
|
8e599e23a0 | ||
|
ecf6acd730 | ||
|
bb8768b604 | ||
|
1ee1dbb629 | ||
|
7d37b650a4 | ||
|
6c15f72371 | ||
|
552587dbb2 | ||
|
0602fa2316 | ||
|
9cc910cb34 | ||
|
61fa45e5de | ||
|
9cf8bd25cb | ||
|
fc89dfff9e | ||
|
84c43093b1 | ||
|
c2b0533fb8 | ||
|
513e62f61d | ||
|
2fd4dbb685 | ||
|
6f183a831c | ||
|
c543400955 | ||
|
2c4b862648 | ||
|
ddf5de8349 | ||
|
5b0d5d6b6e | ||
|
8ceff6d039 | ||
|
fb8ebe54f7 | ||
|
859ce03462 | ||
|
009efef3c9 | ||
|
ffbd1abd87 | ||
|
6e5cb747b0 | ||
|
b48d3328fe | ||
|
9da049748a | ||
|
63b7da3b60 | ||
|
72557dee52 | ||
|
2f2782ed1e | ||
|
7bc06c54c4 | ||
|
57e2a32d4c | ||
|
fa0c4ebab9 | ||
|
524156de78 | ||
|
3865bf48ff | ||
|
89b215f681 | ||
|
f315d887bb | ||
|
3d162e88c3 | ||
|
7d3ff8c7f2 | ||
|
e75a19c099 | ||
|
7925512bda | ||
|
b83538e4c5 | ||
|
d9dd8cfecf | ||
|
0d45825016 | ||
|
f6c6b13fcb | ||
|
0171263d8e | ||
|
c76fef342d | ||
|
2f245faee4 | ||
|
9c39ad3ff4 | ||
|
53d966cd64 | ||
|
bec46db5b9 | ||
|
3cddd9b58e | ||
|
a757904e8f | ||
|
937305bc41 | ||
|
7e1529c7df | ||
|
82da2e133b | ||
|
e7160c92f0 | ||
|
cbc51bc8e8 | ||
|
6738076f72 | ||
|
8afcaaddab | ||
|
a298411fa1 | ||
|
e0967e89a7 | ||
|
a0feca9711 | ||
|
c9a4f2a01a | ||
|
144dc69370 | ||
|
5e52ada169 | ||
|
2108029812 | ||
|
bcea90c896 | ||
|
6e56b79e8a | ||
|
be4afc49ff | ||
|
dba60740f6 | ||
|
0208dbf985 | ||
|
2d548a026f | ||
|
0bfb746991 | ||
|
fd8cb2a0e8 | ||
|
b3e7c01ab6 | ||
|
3d8f7ee33b | ||
|
8830354555 | ||
|
cb894cee42 | ||
|
8382b36823 | ||
|
91e0e84387 | ||
|
7ceb436021 | ||
|
2c2ee90d58 | ||
|
f95802c211 | ||
|
e9851c14f8 | ||
|
94f9a5342a | ||
|
63a0a6516c | ||
|
9db70086dd | ||
|
c37e8ae8b9 | ||
|
d6427e777c | ||
|
3f97a557a6 | ||
|
dfbde48dcf | ||
|
e769ac7941 | ||
|
8992277ce8 | ||
|
1b2819065a | ||
|
97ddf7e008 | ||
|
f67e2b9fe0 | ||
|
23caeec1cf | ||
|
202a453282 | ||
|
8013bb369a | ||
|
8536c437c4 | ||
|
9762cbf94f | ||
|
a1b994a8cd | ||
|
ef22a029b2 | ||
|
b3e3d9642e | ||
|
452f2cd086 | ||
|
e0c5c0047d | ||
|
2a1a22dffe | ||
|
67da9e0e85 | ||
|
c2c2c3f62b | ||
|
bff3c7c7af | ||
|
e2f21b3dd3 | ||
|
6c9ecf1cc8 | ||
|
4f282db6e2 | ||
|
d6e1989e1f | ||
|
4729be9e96 | ||
|
bb020c3e6b | ||
|
c22cacf9bd | ||
|
0907087ee3 | ||
|
1e985dc4f0 | ||
|
5b82ca23d3 | ||
|
2cdebe57af | ||
|
5cbe25d415 | ||
|
d764888393 | ||
|
1710a38ced | ||
|
ba75aa9d0c | ||
|
cbf98a2d7d | ||
|
7210cb8e99 | ||
|
ee3a3ef5fa | ||
|
888bc86608 | ||
|
b9b50a108b | ||
|
022b58f986 | ||
|
557160f158 | ||
|
ea5028cf2a | ||
|
4e8b104543 | ||
|
146d72468f | ||
|
f711133580 | ||
|
cd42c0e306 | ||
|
c0511d54fd | ||
|
ec3a2fa063 | ||
|
5a55891d06 | ||
|
f602f99b1a | ||
|
80708022e6 | ||
|
01cb8b3a9b | ||
|
c6fe6d49bc | ||
|
1d398ee2c3 | ||
|
812ba990ac | ||
|
5d270319e5 | ||
|
5d66d4c91f | ||
|
eefd3c0197 | ||
|
cdd9600c60 | ||
|
9ff962e86d | ||
|
5a5236760e | ||
|
62115f378a | ||
|
d88dff51fb | ||
|
3d1874adcc | ||
|
5197883379 | ||
|
cd235dfd42 | ||
|
67f1c63926 | ||
|
fb525f7cdc | ||
|
f1c178b544 | ||
|
eb754e3a84 | ||
|
0fe7972d0d | ||
|
6d55fec093 | ||
|
5a66012c6c | ||
|
3521d2e9fa | ||
|
597f001e42 | ||
|
8a8893fbd3 | ||
|
39c3a6c3e5 | ||
|
4b2c253427 | ||
|
f98653d2c9 | ||
|
c521f1d6a7 | ||
|
17104fde04 | ||
|
2f14cc832c | ||
|
585728bc23 | ||
|
22c3b7edd6 | ||
|
fa73b0b250 | ||
|
d82715372b | ||
|
084675c4f3 | ||
|
0a6421939b | ||
|
d5ca3dc132 | ||
|
adcbe0a2b1 | ||
|
556f7adab1 | ||
|
d3afd6ec68 | ||
|
fe9f5e3386 | ||
|
743d83ef71 | ||
|
76c18255b6 | ||
|
a6b1c27a5d | ||
|
783cea8d52 | ||
|
a7810bc279 | ||
|
dd7a184926 | ||
|
7cbcf4351b | ||
|
3957161124 | ||
|
840173a21e | ||
|
66e9832f5e | ||
|
67ad602041 | ||
|
7716961f07 | ||
|
6876559ceb | ||
|
fe38280a1a | ||
|
fff200b1d8 | ||
|
cc753db132 | ||
|
ec565de6cb | ||
|
fc631040fd | ||
|
615d5eaa77 | ||
|
72c4c18364 | ||
|
4c4debf004 | ||
|
7323e4467b | ||
|
c954249dfa | ||
|
f6a7fe168a | ||
|
659e1e4a26 | ||
|
632bcdd2da | ||
|
fb62d22013 | ||
|
58ea656fd8 | ||
|
16d8698e1b | ||
|
d8ae6cea75 | ||
|
dc40572312 | ||
|
3c014ccb2b | ||
|
bd22a92d68 | ||
|
40c2fa7e5e | ||
|
604b3f49b7 | ||
|
f6cbc7e80b | ||
|
0417599344 | ||
|
c694e86422 | ||
|
a951ca4489 | ||
|
794ad66896 | ||
|
857cec0509 | ||
|
d3472cd4a1 | ||
|
d6078821c5 | ||
|
21019fac66 | ||
|
03c6ed32fb | ||
|
1f98477c22 | ||
|
c8351d6d20 | ||
|
54eef1153f | ||
|
88d257f04b | ||
|
a55b96c9f6 | ||
|
14d96d0086 | ||
|
8ad14af39c | ||
|
52217bd4e4 | ||
|
dfdb92d3ab | ||
|
358a5d8b46 | ||
|
dcfddb8445 | ||
|
fa14375a65 | ||
|
b494e6b043 | ||
|
46d0cf7bb4 | ||
|
00849941c3 | ||
|
36554f3ce8 | ||
|
2cb7e510dc | ||
|
d80367c5fc | ||
|
6b92f23c81 | ||
|
4698d20fb4 | ||
|
f4287e1f56 | ||
|
0d68cebea8 | ||
|
5e351dad53 | ||
|
2db4dc8c96 | ||
|
856fcf7554 | ||
|
242476c290 | ||
|
3caa31bf58 | ||
|
9c5f338d3c | ||
|
43eeb008fa | ||
|
0be63a81c7 | ||
|
5b0406cfdc | ||
|
ca62538ce3 | ||
|
fb3f811cf3 | ||
|
192c1d81b8 | ||
|
d451f4180e | ||
|
5df37895d8 | ||
|
d83eefaf14 | ||
|
0d2e9455aa | ||
|
8bd35d47ad | ||
|
c728889e0e | ||
|
4de62a3712 | ||
|
c141962dc8 | ||
|
93796bb474 | ||
|
619820a059 | ||
|
3be5ab3a5c | ||
|
7f29daf0d4 | ||
|
9a23f187ce | ||
|
8b21096919 | ||
|
4dada87d32 | ||
|
322f8eabd6 | ||
|
2b17ecf196 | ||
|
1484f8ce91 | ||
|
52cb565eef | ||
|
a755103350 | ||
|
414e17a089 | ||
|
fedfc330ef | ||
|
8a8a05e31c | ||
|
8e2dd65c6e | ||
|
02f54ef219 | ||
|
aa76f6b9f2 | ||
|
eff277a872 | ||
|
e56088f921 | ||
|
269f9251a2 | ||
|
ca2a380d03 | ||
|
a2ab14d9d5 | ||
|
0d3dd61ad4 | ||
|
13aa1ff760 | ||
|
7870c48ced | ||
|
5d0f7229e3 | ||
|
bd407fd866 | ||
|
98515e7c7d | ||
|
34d415a6b3 | ||
|
c1ce0153ea | ||
|
9de41ce44c | ||
|
9efa7c1a8c | ||
|
762d9fcf7b | ||
|
62333f0ca2 | ||
|
1ac142347e | ||
|
1d54d60f04 | ||
|
fef1996b3d | ||
|
0bc9d87891 | ||
|
3bbe0f1d4e | ||
|
55d9154b01 | ||
|
6cd54639b5 | ||
|
7ef87e3fbd | ||
|
68122fca27 | ||
|
f340e8ca04 | ||
|
da4b446ac6 | ||
|
7d18ecd1bf | ||
|
b3199265a2 | ||
|
05a58e8942 | ||
|
1c724d0860 | ||
|
76f2305b84 | ||
|
0daf6ccbcb | ||
|
c903381154 | ||
|
0ae8710132 | ||
|
ebc4912ada | ||
|
663e611fae | ||
|
f4a1d4ef02 | ||
|
fe97d19c66 | ||
|
d7ccd22383 | ||
|
bda6b55047 | ||
|
15e1d87527 | ||
|
922f75b004 | ||
|
f729887320 | ||
|
fc75ca40c3 | ||
|
3e97ed915a | ||
|
ecfd198c3f | ||
|
7a1231a32f | ||
|
e10ea1fcf3 | ||
|
2a8239075e | ||
|
f28b1fd178 | ||
|
800bd98ae6 | ||
|
c45df4e820 | ||
|
fa636e35e0 | ||
|
02e6e6cf48 | ||
|
bcbe6339ec | ||
|
eb4186add4 | ||
|
fdc827e066 | ||
|
58ef28e914 | ||
|
40027e054c | ||
|
1a029a71e5 | ||
|
0766a10ad3 | ||
|
ad43169065 | ||
|
3be435561a | ||
|
93f3323074 | ||
|
a378e0eb0c | ||
|
8e5a635bfb | ||
|
50177914a8 | ||
|
f3093a3740 | ||
|
9a753a269f | ||
|
69bf5a8403 | ||
|
1dd6d583d0 | ||
|
2c04ce7a61 | ||
|
df49e0e993 | ||
|
f269ddacce | ||
|
4d9118447b | ||
|
114ed8bec1 | ||
|
96bc21aa6b | ||
|
034feb87cd | ||
|
193d54c4eb | ||
|
4aa3a80558 | ||
|
2060f00f95 | ||
|
05cf78b589 | ||
|
361e97d097 | ||
|
9da3adeda9 | ||
|
bd4887f660 | ||
|
befab4f3c1 | ||
|
b1c6b3bc94 | ||
|
0ba0a9cbd3 | ||
|
ab3d8ade72 | ||
|
acd824d432 | ||
|
d0197a94fb | ||
|
f59246ea25 | ||
|
55c4fd644c | ||
|
ecbb37e0ba | ||
|
70c289fef0 | ||
|
80a6a58a84 | ||
|
87dfa9a061 | ||
|
39d700b87a | ||
|
b2affdff5b | ||
|
3ce8510f88 | ||
|
bc869f8ec3 | ||
|
39b3db9e27 | ||
|
fabb5bc7e6 | ||
|
b0b78ee144 | ||
|
d0e2023a63 | ||
|
65065bf315 | ||
|
868c5bd114 | ||
|
3905227758 | ||
|
cfea05c2b4 | ||
|
0951e204c9 | ||
|
a91b1d2f26 | ||
|
e8f5e62c44 | ||
|
fb94245943 | ||
|
d3224c420a | ||
|
2afa989500 | ||
|
946da08304 | ||
|
33306a0699 | ||
|
5a33a141af | ||
|
e7186f41ed | ||
|
79b09577eb | ||
|
ce28527cde | ||
|
8a54793ede | ||
|
b69507be8a | ||
|
a7bfe9afed | ||
|
59900357a7 | ||
|
8c79e9a61e | ||
|
bb20f3966f | ||
|
201a5b6e06 | ||
|
8bb9a9803b | ||
|
b7b3282649 | ||
|
6e05cb38f6 | ||
|
a4c69a8f43 | ||
|
47fcf3403f | ||
|
6f96f8b01e | ||
|
6ab2821c34 | ||
|
29b775f22c | ||
|
78c3b8bb86 | ||
|
d1dfbe8ce5 | ||
|
8ab866e7f4 | ||
|
de834b65e8 | ||
|
2d1e8dc8a0 | ||
|
b5a1c54ab2 | ||
|
5e23959e12 | ||
|
5ae963cb34 | ||
|
b33e95f1e7 | ||
|
9ba0560696 | ||
|
e05876a5f6 | ||
|
afae9421f6 | ||
|
f72e847c17 | ||
|
cf40048f67 | ||
|
0df96f101b | ||
|
8591108451 | ||
|
cc67e8b26f | ||
|
97a4114265 | ||
|
e19dac0658 | ||
|
481ca6190e | ||
|
642b774530 | ||
|
4d5e8df8e6 | ||
|
568a74e22c | ||
|
7b062b76c7 | ||
|
3392f3aa09 | ||
|
af6eebaa1a | ||
|
f8acf53f72 | ||
|
73c133c91d | ||
|
0ac066aac7 | ||
|
65d825b62c | ||
|
e9bea9dec0 | ||
|
6cab65efb0 | ||
|
8ef8df4b18 | ||
|
6a24d72183 | ||
|
e65c0171e4 | ||
|
0ce55e897d | ||
|
fe7c833c8b | ||
|
1aca32454f | ||
|
86fcde5d07 | ||
|
8195035363 | ||
|
eb7019d54a | ||
|
ab5ab01496 | ||
|
9d2c1f7602 | ||
|
195f6460e0 | ||
|
e9a6f46bef | ||
|
5331a555f6 | ||
|
3bd612ad81 | ||
|
dcae4f330e | ||
|
642f990fbc | ||
|
7268c5ebfb | ||
|
68e6e8ca90 | ||
|
fa13f06e64 | ||
|
e2ced58517 | ||
|
838e488134 | ||
|
555624decf | ||
|
528b1b10b7 | ||
|
e9e9ab8919 | ||
|
f4f749f130 | ||
|
c66dd87f68 | ||
|
3b3dfebd82 | ||
|
5afda415d1 | ||
|
7481cf9ffe | ||
|
bb6d4d67d5 | ||
|
22331c8951 | ||
|
6db29a7ae1 | ||
|
c27b049ca0 | ||
|
bb32ec38da | ||
|
d40cb5f618 | ||
|
599adb3003 | ||
|
13914b91df | ||
|
01284ef6a0 | ||
|
7f9792b571 | ||
|
5882a9a3a2 | ||
|
a673858e13 | ||
|
c27a6472af | ||
|
4a4f62f29e | ||
|
aae5852ad3 | ||
|
e01c998758 | ||
|
2df69fc3ed | ||
|
3757caf449 | ||
|
ce97122c6d | ||
|
4eda5218d5 | ||
|
a37f82bb9d | ||
|
d0ca73caf8 | ||
|
ec66a42664 | ||
|
3bfeacaa88 | ||
|
ec49bd2d69 | ||
|
d69049d6be | ||
|
2dd571bc5d | ||
|
73741e547b | ||
|
362541c2b1 | ||
|
bd29de880d | ||
|
466abd7a3d | ||
|
7df35e8131 | ||
|
02253134c9 | ||
|
e420c9c895 | ||
|
697e4963db | ||
|
c5d83ef715 | ||
|
1c3585f575 | ||
|
09e308a06d | ||
|
fabe9ce56b | ||
|
1f8149706c | ||
|
7dd0c7296f | ||
|
868bc3a069 | ||
|
bb43e732c8 | ||
|
79ea63f164 | ||
|
1169e1915d | ||
|
1b439cb6a0 | ||
|
61e263ba8d | ||
|
f958ea921c | ||
|
38c26c8c44 | ||
|
6c0e17480c | ||
|
919597bfcf | ||
|
8a8403ff8a | ||
|
7330cdee2c | ||
|
b8b6625872 | ||
|
1b50650267 | ||
|
6be65cb512 | ||
|
7e60a3c075 | ||
|
cb0583df1d | ||
|
56ddf5827f | ||
|
9433ff449a | ||
|
c44b366350 | ||
|
0857237fbb | ||
|
27a95675d0 | ||
|
f74a4e6e9b | ||
|
504901ccb6 | ||
|
281330b1d0 | ||
|
48db45f85b | ||
|
a414584f4b | ||
|
c8e92608fd | ||
|
47b1973cb6 | ||
|
b8bab30684 | ||
|
d9e07b3b29 | ||
|
9a72f39ff3 | ||
|
d1aefbea62 | ||
|
87d0888fee | ||
|
af97a8312c | ||
|
a8d2b819c4 | ||
|
ed974c2c84 | ||
|
1a9c7fe9ca | ||
|
38c3552908 | ||
|
0bfe270078 | ||
|
8a4d7685f7 | ||
|
a88a68f8a6 | ||
|
9c590dae7b | ||
|
6fc6e7ced2 | ||
|
277f7d906d | ||
|
cdcb787991 | ||
|
ae4575369c | ||
|
8ae115f9bd | ||
|
d591b4d2da | ||
|
be74893e02 | ||
|
45a00f1a93 | ||
|
a2a199b48e | ||
|
6326b6b631 | ||
|
dbdbf23bea | ||
|
00f5732a0d | ||
|
3ecd2f150d | ||
|
b29a011186 | ||
|
20d64270a4 | ||
|
15c1975f6e | ||
|
008e313652 | ||
|
a65877cd7e | ||
|
e30d10288d | ||
|
a0c8df6679 | ||
|
a43cdbac54 | ||
|
0cf4212835 | ||
|
c11cb57c66 | ||
|
2fd174d7cf | ||
|
c55d59e70a | ||
|
009bc4a1a3 | ||
|
a12b70468f | ||
|
8c8655863e | ||
|
e174f1475f | ||
|
cdd3441ead | ||
|
20f68ef013 | ||
|
976516a559 | ||
|
39b0ac4fda | ||
|
7d1aa37f50 | ||
|
8ab730f47d | ||
|
6b5b413025 | ||
|
6f99cf0fd5 | ||
|
77745e466d | ||
|
f671d7559a | ||
|
eb141e88fb | ||
|
f3598d2f4d | ||
|
691496af3c | ||
|
3de74e58b7 | ||
|
628d39931f | ||
|
a5314f57af | ||
|
6f4d1cda13 | ||
|
0e69bcc282 | ||
|
bd23583431 | ||
|
e0a7676c3f | ||
|
09ce2ab70e | ||
|
52f50287e9 | ||
|
0f51a85d8f | ||
|
0ecc72e945 | ||
|
66990474b9 | ||
|
da77c9e744 | ||
|
c251ab51c0 | ||
|
502982154d | ||
|
bf36dd2036 | ||
|
ebc889baea | ||
|
14cd51056b | ||
|
1dc5c4f98f | ||
|
95080106e0 | ||
|
7e8ef278fe | ||
|
6bdebe22ed | ||
|
29450d8893 | ||
|
e979194a0e | ||
|
e10331f988 | ||
|
573a1b7d35 | ||
|
335535e73b | ||
|
0e4ce1f978 | ||
|
565a287d20 | ||
|
f4b9a7143c | ||
|
66436bd9f7 | ||
|
724b3682d1 | ||
|
7767648520 | ||
|
64ce9d2218 | ||
|
cd85541e19 | ||
|
c1583fa001 | ||
|
5842b8416e | ||
|
3e296a4a90 | ||
|
8a03e0d670 | ||
|
46cee69804 | ||
|
ec6335bdfd | ||
|
28c24c8c45 | ||
|
b90e2c6300 | ||
|
6b47cbb4c5 | ||
|
43ce44cb3b | ||
|
f9d4e11a27 | ||
|
8956654288 | ||
|
5bc0e89871 | ||
|
d16b240749 | ||
|
73c355b92a | ||
|
34629afda0 | ||
|
d2fb48ce49 | ||
|
b5943a430f | ||
|
43d75d712f | ||
|
51be1ad2c1 | ||
|
15a7a77bb6 | ||
|
f68bdb9e08 | ||
|
b4a900c993 | ||
|
dfc43e819e | ||
|
07bf18168f | ||
|
5ca9674ced | ||
|
154ebc24c2 | ||
|
3e128d06f4 | ||
|
453adbcd5c | ||
|
04e15e6555 | ||
|
db119a60e6 | ||
|
d927154217 | ||
|
275ef147f6 | ||
|
8566f81d4f | ||
|
74eefdb4f1 | ||
|
c90e562367 | ||
|
f4c45f3f21 | ||
|
99dbea1469 | ||
|
33666c7817 | ||
|
c7be5d25d0 | ||
|
c990818200 | ||
|
6cab639d8e | ||
|
21dbabe6f2 | ||
|
fe9254790c | ||
|
cbe63da1f7 | ||
|
c190451098 | ||
|
551a018613 | ||
|
45f0c77761 | ||
|
6e89799b05 | ||
|
8877688ee4 | ||
|
669c45125c | ||
|
876dc581a8 | ||
|
a267db851a | ||
|
26c150090a | ||
|
4926ff0992 | ||
|
39c6d11ed6 | ||
|
5b5a29849e | ||
|
b9123cad7c | ||
|
43e3b3e328 | ||
|
7149349e25 | ||
|
9080a0e778 | ||
|
d26e0423f7 | ||
|
b602e0c014 | ||
|
29d44973a7 | ||
|
903185a69c | ||
|
84cd7e496b | ||
|
b3f3886cd9 | ||
|
b1e1ee7d55 | ||
|
b60322f729 | ||
|
b89539a70e | ||
|
78ea308608 | ||
|
d7435d02d3 | ||
|
3539f9372d | ||
|
0e15eb4f00 | ||
|
119261dc5d | ||
|
2c0509a5c7 | ||
|
443b931b36 | ||
|
8c6ef3f0fd | ||
|
0fa0013a69 | ||
|
8f4c87ad49 | ||
|
5842c912a9 | ||
|
c6412a186c | ||
|
e72e6679a3 | ||
|
0788754a5f | ||
|
f5e7233162 | ||
|
a37f95e7db | ||
|
20490b0618 | ||
|
8b1f69c1a3 | ||
|
f830f0f6df | ||
|
4721a4ae19 | ||
|
c4a5099e56 | ||
|
be343298e8 | ||
|
54017bcf63 | ||
|
90a4ea4f9b | ||
|
6b5cbe3768 | ||
|
46b4a74549 | ||
|
feb94b446a | ||
|
879362c5b5 | ||
|
1e7fc0f7df | ||
|
8df557f621 | ||
|
8b8606349e | ||
|
2b8b04dd55 | ||
|
b23c4dacb9 | ||
|
f703f3f20e | ||
|
2d39d34ab5 | ||
|
671efc0726 | ||
|
d17b554666 | ||
|
7557af0594 | ||
|
9f4a240f91 | ||
|
07576eb338 | ||
|
c61946329c | ||
|
cc3afd87aa | ||
|
858d9271e3 | ||
|
5aa4aae0f5 | ||
|
82240cb661 | ||
|
f3664b07d2 | ||
|
a3e0117ff0 | ||
|
e5f88a1462 | ||
|
95d873574c | ||
|
d35b3b4792 | ||
|
c8e5c36c1d | ||
|
01b966c664 | ||
|
0c63f03db4 | ||
|
962d3f1df0 | ||
|
0198029ea6 | ||
|
b0e7221b3a | ||
|
f6b121758b | ||
|
4c0a1ec0a0 | ||
|
8dd76e6e2f | ||
|
edf27fdac5 | ||
|
1c2f65f268 | ||
|
b732b4d8c8 | ||
|
291b865f17 | ||
|
f57a7826a8 | ||
|
e5c80e46b0 | ||
|
a66e640499 | ||
|
24fab91694 | ||
|
5881a24faa | ||
|
3b82c8cb10 | ||
|
b9919f7c88 | ||
|
2e9b3fc31e | ||
|
0a089c8656 | ||
|
a82afd6ccf | ||
|
4fc58068c9 | ||
|
fccae1009b | ||
|
5dac5fdb3b | ||
|
ddc8e5c712 | ||
|
3c07c8c2a0 | ||
|
c97a9b0b19 | ||
|
57326be5bf | ||
|
7e589a529d | ||
|
6afa29eb5c | ||
|
d7c3d59799 | ||
|
1c8e7a3483 | ||
|
a88e640924 | ||
|
3c27aa2f2e | ||
|
0614a1a57f | ||
|
447a5391ed | ||
|
7345f1ce2e | ||
|
75abae80fd | ||
|
70513f8da4 | ||
|
d5acfc5c2f | ||
|
83c886781d | ||
|
1215c3ddbf | ||
|
ea1a4ffbb8 | ||
|
cada6f294d | ||
|
4ade2789f6 | ||
|
c06f224ace | ||
|
bb21336191 | ||
|
d32030a374 | ||
|
adf10ef492 | ||
|
6788d82316 | ||
|
a470f0a6db | ||
|
3feafaade6 | ||
|
8ed41ea525 | ||
|
558f672634 | ||
|
ca4ce6b2f5 | ||
|
9a8d8f5b0c | ||
|
6f61d70b72 | ||
|
ffe201be36 | ||
|
8943c34572 | ||
|
dc5add2b8d | ||
|
10a4d74190 | ||
|
94419d4573 | ||
|
f59419ed7e | ||
|
457f13ad0b | ||
|
aea5c3545c | ||
|
d1d7ed1381 | ||
|
44caadc723 | ||
|
7c21eb84ea | ||
|
07cbc847f0 | ||
|
f6fae7b536 | ||
|
ba04bc9d22 | ||
|
1946d81ab3 | ||
|
e263405a81 | ||
|
300f887c02 | ||
|
2ee9d4f101 | ||
|
255c79a8f7 | ||
|
6f0f366780 | ||
|
1e607a8041 | ||
|
49845c1155 | ||
|
f6e9e043d8 | ||
|
75c25556aa | ||
|
8a040f3fbc | ||
|
07b2046685 | ||
|
90c15aeebc | ||
|
884f48faf6 | ||
|
081d16d907 | ||
|
b795b8a040 | ||
|
dbb9cbe280 | ||
|
3b1f936dcf | ||
|
d334072722 | ||
|
62a390582c | ||
|
a4b104c1da | ||
|
b823a94124 | ||
|
2451c0a815 | ||
|
725e82f6df | ||
|
4334b446b5 | ||
|
34595c02ba | ||
|
1d49ddd86f | ||
|
cdb252faaa | ||
|
5f4522e55b | ||
|
b1f0276307 | ||
|
5ce1e1e7df | ||
|
2ed21c98d5 | ||
|
f3815b7bc8 | ||
|
49b4156cfd | ||
|
486413731a | ||
|
9715054102 | ||
|
7735f22562 | ||
|
d8e441b079 | ||
|
d75952394f | ||
|
af012e8b5a | ||
|
b6a320503e | ||
|
9a919d8fa3 | ||
|
b4ecdae8e4 | ||
|
0ca20b14f5 | ||
|
e1ee0dfec1 | ||
|
685c41689e | ||
|
8fcb5dcc4d | ||
|
c606055df2 | ||
|
a4855decb8 | ||
|
86cf600d9e | ||
|
852959cf2b | ||
|
a5f1ff43b5 | ||
|
d836677342 | ||
|
b1eaaea89a | ||
|
11f2c076f6 | ||
|
10c038d8f3 | ||
|
3d4af04927 | ||
|
1af967b00e | ||
|
b5993fc2a3 | ||
|
a29d2e1149 | ||
|
9cd1277d70 | ||
|
ee2a59ad59 | ||
|
e05efe8280 | ||
|
ee33976d1d | ||
|
d0d1fd189b | ||
|
76cca33525 | ||
|
8bdc3940b1 | ||
|
31cbb60a38 | ||
|
582919804a | ||
|
eaa597a430 | ||
|
a6c5def4f4 | ||
|
13f5997554 | ||
|
846df59882 | ||
|
2d2c0ab6cd | ||
|
5625078cfe | ||
|
9e7dc9433a | ||
|
87fe2847f0 | ||
|
5c1782a605 | ||
|
115d0e794e | ||
|
ee4620ef9e | ||
|
5fb5228591 | ||
|
54ab1f1e80 | ||
|
b07fb709ba | ||
|
96a7e04ea5 | ||
|
2fea7969d3 | ||
|
d668f3a3c3 | ||
|
9749aa936c | ||
|
e2cc1aec26 | ||
|
e6624c1fd5 | ||
|
3bb2edd53d | ||
|
7de24bad2e | ||
|
297ac8ef4c | ||
|
cd995ff45f | ||
|
e61761e9af | ||
|
c927c31391 | ||
|
2dbcad7840 | ||
|
d2a344af5d | ||
|
9d5f9606a4 | ||
|
4094d62613 | ||
|
ceaf6fcffe | ||
|
e72ae0a4b2 | ||
|
28620b7d93 | ||
|
65cfd74b98 | ||
|
11e2cd925b | ||
|
f7797b89ed | ||
|
7d80314235 | ||
|
3d9845ebed | ||
|
b3d07e26fc | ||
|
9b12a923f5 | ||
|
eff3b08d49 | ||
|
1f22248965 | ||
|
68677b8525 | ||
|
8e538eebc5 | ||
|
5bc7723feb | ||
|
18e75202d7 | ||
|
11cf09b41a | ||
|
908d04d0e8 | ||
|
e7c028eed6 | ||
|
8bdad7d73e | ||
|
12a624330f | ||
|
d7be6e037b | ||
|
1d90ddc0a9 | ||
|
830d16943b | ||
|
0b03fa963a | ||
|
a1617548cf | ||
|
2bfea20007 | ||
|
843e3ae849 | ||
|
6f36a478a5 | ||
|
880deabac1 | ||
|
eba65f57ab | ||
|
7f4badc947 | ||
|
ebd9d0fe25 | ||
|
bb5cf54e61 | ||
|
ff5fe30407 | ||
|
50ca72e53c | ||
|
21f0a2b1b8 | ||
|
d25b55b93a | ||
|
e599bb2a7b | ||
|
f26e20e1e9 | ||
|
5d5f34518d | ||
|
a2fa918da2 | ||
|
531f5dd9da | ||
|
1b7c42bf53 | ||
|
eecd0b91c5 | ||
|
9854db9120 | ||
|
aeac3df4a1 | ||
|
75c03dd81e | ||
|
f69d9e9559 | ||
|
11d7b71959 | ||
|
126b17898d | ||
|
8d00784dfe | ||
|
17d4dcc30b | ||
|
16dbbdb34c | ||
|
433a23feb4 | ||
|
c747d1d225 | ||
|
d4293866b3 | ||
|
9fa058a8bd | ||
|
4591cf9afa | ||
|
ed34079452 | ||
|
f6b47e2ee3 | ||
|
e900104e10 | ||
|
944a748cb6 | ||
|
eb8ace14c8 | ||
|
1b8193ab8b | ||
|
ed9cbc89c1 | ||
|
2fdd46b364 | ||
|
4f39da4343 | ||
|
a2a0038368 | ||
|
22417e3d9c | ||
|
4fb9c1cd98 | ||
|
cb833db5fb | ||
|
4f007321e1 | ||
|
3aa4b67173 | ||
|
25c80df156 | ||
|
e7a6ed20e8 | ||
|
502407a1dd | ||
|
03757a0663 | ||
|
f0f1cd37dd | ||
|
83ccccb565 | ||
|
b83de54bb4 | ||
|
261bf416ee | ||
|
a0ffbfce31 | ||
|
82abd358a5 | ||
|
d50d1101fb | ||
|
f0ebd6da0f | ||
|
9f033cbf6d | ||
|
b3f80239c1 | ||
|
0f3dbe1a30 | ||
|
4ed854c818 | ||
|
b0586b4f4d | ||
|
f866a8fd1b | ||
|
dce0441ecf | ||
|
29c9621137 | ||
|
46b70ded94 | ||
|
20fb9385f5 | ||
|
fcca5c5b58 | ||
|
36c370947c | ||
|
fa099867a8 | ||
|
88277e2d21 | ||
|
48eb74cfcd | ||
|
db5121511d | ||
|
c7dd7d42c6 | ||
|
0806d34eee | ||
|
b9193f35c1 | ||
|
43e5337a0a | ||
|
1ae812d172 | ||
|
dd93bb1aad | ||
|
bf58fafd76 | ||
|
693d008851 | ||
|
737155a43a | ||
|
53b3b1bb40 | ||
|
97e9357153 | ||
|
706a10d4cf | ||
|
ec694bf8bd | ||
|
372a3bfcde | ||
|
cfdc1ef62a | ||
|
7ae7502146 | ||
|
7a294b5fcd | ||
|
79287abd7b | ||
|
cf450bd01f | ||
|
7e5d0b9ec8 | ||
|
314dfb294a | ||
|
6705adf47b | ||
|
d8dac3f80e | ||
|
16dad60eef | ||
|
7ef52f723c | ||
|
374dc92e8f | ||
|
3c91126806 | ||
|
803ed6050f | ||
|
7336678454 | ||
|
6ee537b3f2 | ||
|
f3a9301483 | ||
|
5aba63d5aa | ||
|
a3276c3ffe | ||
|
4956dc3197 | ||
|
b1c5ad6a61 | ||
|
364461b58f | ||
|
74a747d455 | ||
|
036871cd95 | ||
|
580126cff3 | ||
|
71a1c9fee7 | ||
|
80de9f6a68 | ||
|
c71d4c364a | ||
|
dcab076221 | ||
|
94808e2cbc | ||
|
82e61f501a | ||
|
37fddf8eef | ||
|
3669849368 | ||
|
ebf7e9f45f | ||
|
d000717d34 | ||
|
d191eed760 | ||
|
a750372a03 | ||
|
5dfba1b064 | ||
|
72747ed686 | ||
|
c7898ac3e4 | ||
|
c70d024f5f | ||
|
7cf148ea13 | ||
|
41f287fbea | ||
|
3ae799f4de | ||
|
3e5090e792 | ||
|
48d038ead4 | ||
|
8bcff3ac74 | ||
|
202478d108 | ||
|
6320da67e4 | ||
|
c44c398626 | ||
|
186a3d40c6 | ||
|
230472de45 | ||
|
790e77de01 | ||
|
7286532656 | ||
|
b85c7be5ac | ||
|
5eae76b209 | ||
|
7d90f84306 | ||
|
3e4f18bed2 | ||
|
e31da34324 | ||
|
6c85564cc1 | ||
|
8cfe6a900c | ||
|
2ebbcbe233 | ||
|
4e2e36df60 | ||
|
4bee15d0fa | ||
|
b1596ffecb | ||
|
b9fccc9fce | ||
|
9345bc1610 | ||
|
78ae67ae28 | ||
|
e880d2c12a | ||
|
044d327818 | ||
|
cc9b29488f | ||
|
8fe5063a35 | ||
|
843887fcb9 | ||
|
91a60f871a | ||
|
225c313bb3 | ||
|
abc6e9a7bc | ||
|
16070b5543 | ||
|
0afd410ae7 | ||
|
faca59b3a6 | ||
|
9b6149d3ac | ||
|
4c05257783 | ||
|
e6a84dcb60 | ||
|
1f3e073894 | ||
|
dbc164e131 | ||
|
16a163662b | ||
|
67a8d8ca90 | ||
|
0e974eb49a | ||
|
d5f9e3a05e | ||
|
d181713832 | ||
|
ffb0adfc59 | ||
|
a83b8e7792 | ||
|
2f7a9c6a00 | ||
|
423e9c4ac0 | ||
|
c631db62d5 | ||
|
b8de0fc47e |
146
.appveyor.yml
146
.appveyor.yml
@@ -1,146 +0,0 @@
|
||||
build: false
|
||||
clone_folder: c:\projects\phpbb
|
||||
version: '{build}'
|
||||
|
||||
services:
|
||||
- iis
|
||||
|
||||
environment:
|
||||
matrix:
|
||||
- db: mssql
|
||||
db_version: sql2012sp1
|
||||
php: 7.1
|
||||
- db: mssql
|
||||
db_version: sql2014
|
||||
php: 7.1
|
||||
- db: mssql
|
||||
db_version: sql2016
|
||||
php: 7.2
|
||||
# - db: mssql
|
||||
# db_version: sql2017
|
||||
# php: 7.1
|
||||
# - db: mariadb
|
||||
# php: 7.1
|
||||
# - db: mysqli
|
||||
# php: 7.1
|
||||
# - db: sqlite
|
||||
# php: 7.1
|
||||
# - db: postgresql
|
||||
# php: 7.1
|
||||
|
||||
hosts:
|
||||
phpbb.test: 127.0.0.1
|
||||
|
||||
init:
|
||||
- SET PATH=%systemroot%\system32\inetsrv\;C:\Program Files\OpenSSL;C:\tools\php;c:\php;%PATH%
|
||||
- SET ANSICON=121x90 (121x90)
|
||||
- REG ADD "HKEY_CURRENT_USER\Software\Microsoft\Command Processor" /v DelayedExpansion /t REG_DWORD /d 1 /f
|
||||
|
||||
before_test:
|
||||
- ps: |
|
||||
Set-Service wuauserv -StartupType Manual
|
||||
choco install chocolatey -y --version 0.10.13 --allow-downgrade
|
||||
choco install php -y --version ((choco search php --exact --all-versions -r | select-string -pattern $env:php | sort { [version]($_ -split '\|' | select -last 1) } -Descending | Select-Object -first 1) -replace '[php|]','')
|
||||
Get-ChildItem -Path "c:\tools\php$($env:php -replace '([0-9])[.]([0-9])[.]?([0-9]+)?','$1$2')" -Recurse |
|
||||
Move-Item -destination "c:\tools\php"
|
||||
cd c:\tools\php
|
||||
cat php.ini-development | %{$_ -replace "memory_limit = 128M","memory_limit = 1024M"} | Out-File -Encoding "Default" php.ini
|
||||
Add-Content php.ini "`n date.timezone=UTC"
|
||||
Add-Content php.ini "`n display_errors=On"
|
||||
Add-Content php.ini "`n extension_dir=ext"
|
||||
Add-Content php.ini "`n extension=php_openssl.dll"
|
||||
Add-Content php.ini "`n extension=php_mbstring.dll"
|
||||
Add-Content php.ini "`n extension=php_curl.dll"
|
||||
Add-Content php.ini "`n extension=php_gd2.dll"
|
||||
Add-Content php.ini "`n extension=php_tidy.dll"
|
||||
Add-Content php.ini "`n extension=php_fileinfo.dll"
|
||||
Add-Content php.ini "`n extension=php_pdo_sqlite.dll"
|
||||
Add-Content php.ini "`n extension=php_sqlite3.dll"
|
||||
Add-Content php.ini "`n extension=php_pdo_mysql.dll"
|
||||
Add-Content php.ini "`n extension=php_mysqli.dll"
|
||||
Add-Content php.ini "`n extension=php_pdo_pgsql.dll"
|
||||
Add-Content php.ini "`n extension=php_pgsql.dll"
|
||||
|
||||
# Get MSSQL driver
|
||||
if ($env:db -eq "mssql") {
|
||||
cd c:\tools\php\ext
|
||||
$DLLVersion = "5.3.0"
|
||||
$VCVersion = If ([System.Version]"$($env:php)" -ge [System.Version]"7.2") {"vc15"} Else {"vc14"}
|
||||
curl -o php_sqlsrv-$($DLLVersion)-$($env:php -replace '([0-9])[.]([0-9])[.]?([0-9]+)?','$1.$2')-nts-vc14-x64.zip https://windows.php.net/downloads/pecl/releases/sqlsrv/$($:DLLVersion)/php_sqlsrv-$($DLLVersion)-$($env:php -replace '([0-9])[.]([0-9])[.]?([0-9]+)?','$1.$2')-nts-$($VCVersion)-x64.zip
|
||||
7z x -y php_sqlsrv-$($DLLVersion)-$($env:php -replace '([0-9])[.]([0-9])[.]?([0-9]+)?','$1.$2')-nts-vc14-x64.zip > $null
|
||||
curl -o php_pdo_sqlsrv-$($DLLVersion)-$($env:php -replace '([0-9])[.]([0-9])[.]?([0-9]+)?','$1.$2')-nts-vc14-x64.zip https://windows.php.net/downloads/pecl/releases/pdo_sqlsrv/$($DLLVersion)/php_pdo_sqlsrv-$($DLLVersion)-$($env:php -replace '([0-9])[.]([0-9])[.]?([0-9]+)?','$1.$2')-nts-$($VCVersion)-x64.zip
|
||||
7z x -y php_pdo_sqlsrv-$($DLLVersion)-$($env:php -replace '([0-9])[.]([0-9])[.]?([0-9]+)?','$1.$2')-nts-vc14-x64.zip > $null
|
||||
Remove-Item c:\tools\php\* -include .zip
|
||||
cd c:\tools\php
|
||||
Add-Content php.ini "`nextension=php_sqlsrv.dll"
|
||||
Add-Content php.ini "`nextension=php_pdo_sqlsrv.dll"
|
||||
Add-Content php.ini "`n"
|
||||
|
||||
$instanceName = $env:db_version.ToUpper()
|
||||
Start-Service "MSSQL`$$instanceName"
|
||||
Set-Variable -Name "sqlServerPath" -Value "(local)\$($env:db_version.ToUpper())"
|
||||
|
||||
# Create database write test config
|
||||
sqlcmd -S $sqlServerPath -Q "Use [master]; CREATE DATABASE [phpbb_test] COLLATE Latin1_General_CI_AS"
|
||||
$data = "<?php`n`n`$dbms = 'phpbb\\db\\driver\\mssqlnative';`n`$dbhost = '.\\$env:db_version';`n`$dbport = '';`n`$dbname = 'phpbb_test';`n`$dbuser = 'sa';`n`$dbpasswd = 'Password12!';`n`$phpbb_functional_url = 'http://phpbb.test/';"; $data | Out-File -Encoding "Default" "c:\\projects\\phpbb\\tests\\test_config.php"
|
||||
}
|
||||
elseif ($env:db -eq "mysqli") {
|
||||
Start-Service MySQL57
|
||||
$env:MYSQL_PWD="Password12!"
|
||||
$cmd = '"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql" -e "create database phpbb_test;" --user=root'
|
||||
iex "& $cmd"
|
||||
$data = "<?php`n`n`$dbms = 'phpbb\\db\\driver\\mysqli';`n`$dbhost = 'localhost';`n`$dbport = '';`n`$dbname = 'phpbb_test';`n`$dbuser = 'root';`n`$dbpasswd = 'Password12!';`n`$phpbb_functional_url = 'http://phpbb.test/';"; $data | Out-File -Encoding "Default" "c:\\projects\\phpbb\\tests\\test_config.php"
|
||||
}
|
||||
elseif ($env:db -eq "postgresql") {
|
||||
Start-Service postgresql-x64-9.5
|
||||
$env:PGUSER="postgres"
|
||||
$env:PGPASSWORD="Password12!"
|
||||
$Env:Path="C:\Program Files\PostgreSQL\9.6\bin\;$($Env:Path)"
|
||||
createdb phpbb_test
|
||||
$data = "<?php`n`n`$dbms = 'phpbb\\db\\driver\\postgres';`n`$dbhost = 'localhost';`n`$dbport = '';`n`$dbname = 'phpbb_test';`n`$dbuser = 'postgres';`n`$dbpasswd = 'Password12!';`n`$phpbb_functional_url = 'http://phpbb.test/';"; $data | Out-File -Encoding "Default" "c:\\projects\\phpbb\\tests\\test_config.php"
|
||||
}
|
||||
elseif ($env:db -eq "mariadb") {
|
||||
appveyor-retry choco install mariadb -y --force
|
||||
$env:MYSQL_PWD=""
|
||||
$cmd = '"C:\Program Files\MariaDB 10.2\bin\mysql" -e "create database phpbb_test;" --user=root'
|
||||
iex "& $cmd"
|
||||
$data = "<?php`n`n`$dbms = 'phpbb\\db\\driver\\mysqli';`n`$dbhost = 'localhost';`n`$dbport = '';`n`$dbname = 'phpbb_test';`n`$dbuser = 'root';`n`$dbpasswd = '';`n`$phpbb_functional_url = 'http://phpbb.test/';"; $data | Out-File -Encoding "Default" "c:\\projects\\phpbb\\tests\\test_config.php"
|
||||
}
|
||||
elseif ($env:db -eq "sqlite") {
|
||||
# install sqlite
|
||||
appveyor-retry choco install sqlite -y
|
||||
sqlite3 c:\projects\test.db "create table aTable(field1 int); drop table aTable;"
|
||||
$data = "<?php`n`n`$dbms = 'phpbb\\db\\driver\\sqlite3';`n`$dbhost = 'c:\\projects\\test.db';`n`$dbport = '';`n`$dbname = '';`n`$dbuser = '';`n`$dbpasswd = '';`n`$phpbb_functional_url = 'http://phpbb.test/';"; $data | Out-File -Encoding "Default" "c:\\projects\\phpbb\\tests\\test_config.php"
|
||||
}
|
||||
|
||||
# Install PhantomJS
|
||||
choco install phantomjs -y
|
||||
Start-Process "phantomjs" "--webdriver=8910" | Out-Null
|
||||
- ps: |
|
||||
cd c:\projects\phpbb\phpBB
|
||||
(Get-Content c:\projects\phpbb\phpBB\web.config).replace("<configuration>", "<configuration>`n`t<system.web>`n`t`t<customErrors mode=`"Off`"/>`n`t</system.web>") | Set-Content c:\projects\phpbb\phpBB\web.config
|
||||
(Get-Content c:\projects\phpbb\phpBB\web.config).replace("`t</system.webServer>", "`t`t<httpErrors errorMode=`"Detailed`" />`n`t</system.webServer>") | Set-Content c:\projects\phpbb\phpBB\web.config
|
||||
- cd c:\projects\phpbb\phpBB
|
||||
- php ..\composer.phar install
|
||||
- choco install urlrewrite -y
|
||||
- ps: New-WebSite -Name 'phpBBTest' -PhysicalPath 'c:\projects\phpbb\phpBB' -Force
|
||||
- ps: Import-Module WebAdministration; Set-ItemProperty 'IIS:\Sites\phpBBTest' -name Bindings -value @{protocol='http';bindingInformation='*:80:phpbb.test'}
|
||||
- echo Change default anonymous user AUTH to ApplicationPool
|
||||
- appcmd set config -section:anonymousAuthentication /username:"" --password
|
||||
- echo Setup FAST-CGI configuration
|
||||
- appcmd set config /section:system.webServer/fastCGI /+[fullPath='C:\tools\php\php-cgi.exe']
|
||||
- echo Setup FACT-CGI handler
|
||||
- appcmd set config /section:system.webServer/handlers /+[name='PHP-FastCGI',path='*.php',verb='*',modules='FastCgiModule',scriptProcessor='C:\tools\php\php-cgi.exe',resourceType='Either']
|
||||
- iisreset
|
||||
- NET START W3SVC
|
||||
- mkdir "C:\projects\phpbb\phpBB\cache\test"
|
||||
- mkdir "C:\projects\phpbb\phpBB\cache\installer"
|
||||
- icacls "C:\projects\phpbb\phpBB\cache" /grant Users:F /T
|
||||
- icacls "C:\projects\phpbb\phpBB\files" /grant Users:F /T
|
||||
- icacls "C:\projects\phpbb\phpBB\store" /grant Users:F /T
|
||||
- icacls "C:\projects\phpbb\phpBB\images\avatars\upload" /grant Users:F /T
|
||||
|
||||
test_script:
|
||||
- cd c:\projects\phpbb
|
||||
- php -e phpBB\vendor\phpunit\phpunit\phpunit --verbose
|
||||
|
20
.devcontainer/Dockerfile
Normal file
20
.devcontainer/Dockerfile
Normal file
@@ -0,0 +1,20 @@
|
||||
# Debian version
|
||||
ARG VARIANT="buster"
|
||||
FROM mcr.microsoft.com/vscode/devcontainers/base:0-${VARIANT}
|
||||
|
||||
# Install PHP
|
||||
RUN apt-get -y update
|
||||
RUN apt-get -y install php php-xml php-mbstring php-curl php-zip php-xdebug
|
||||
|
||||
# Install Composer
|
||||
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
|
||||
|
||||
# Install MySQL
|
||||
RUN apt-get -y install mysql-server php-mysql
|
||||
|
||||
# Xdebug
|
||||
ADD resources/xdebug.ini /etc/php/8.1/apache2/conf.d/xdebug.ini
|
||||
|
||||
# Configure Apache
|
||||
RUN echo "Listen 8080" >> /etc/apache2/ports.conf && \
|
||||
a2enmod rewrite
|
37
.devcontainer/devcontainer.json
Normal file
37
.devcontainer/devcontainer.json
Normal file
@@ -0,0 +1,37 @@
|
||||
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
|
||||
// https://github.com/microsoft/vscode-dev-containers/tree/v0.238.1/containers/ubuntu
|
||||
{
|
||||
"name": "Ubuntu",
|
||||
"build": {
|
||||
"dockerfile": "Dockerfile",
|
||||
// Update 'VARIANT' to pick an Ubuntu version: jammy / ubuntu-22.04, focal / ubuntu-20.04, bionic /ubuntu-18.04
|
||||
// Use ubuntu-22.04 or ubuntu-18.04 on local arm64/Apple Silicon.
|
||||
"args": { "VARIANT": "ubuntu-22.04" }
|
||||
},
|
||||
|
||||
// Configure tool-specific properties.
|
||||
"customizations": {
|
||||
// Configure properties specific to VS Code.
|
||||
"vscode": {
|
||||
"settings": {
|
||||
// Allow Xdebug to listen to requests from remote (or container)
|
||||
"remote.localPortHost": "allInterfaces"
|
||||
},
|
||||
//"devPort": {},
|
||||
// Specify which VS Code extensions to install (List of IDs)
|
||||
"extensions": ["xdebug.php-debug"]
|
||||
}
|
||||
},
|
||||
|
||||
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
||||
"forwardPorts": [80, 9003],
|
||||
|
||||
// Use 'postCreateCommand' to run commands after the container is created.
|
||||
"postStartCommand": "bash .devcontainer/resources/setup.sh",
|
||||
|
||||
// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
|
||||
"remoteUser": "vscode",
|
||||
"features": {
|
||||
"github-cli": "latest"
|
||||
}
|
||||
}
|
38
.devcontainer/resources/phpbb-config.yml
Normal file
38
.devcontainer/resources/phpbb-config.yml
Normal file
@@ -0,0 +1,38 @@
|
||||
installer:
|
||||
admin:
|
||||
name: admin
|
||||
password: adminadmin
|
||||
email: admin@example.org
|
||||
|
||||
board:
|
||||
lang: en
|
||||
name: My Board
|
||||
description: My amazing new phpBB board
|
||||
|
||||
database:
|
||||
dbms: mysqli
|
||||
dbhost: 127.0.0.1
|
||||
dbport: 3306
|
||||
dbuser: phpbb
|
||||
dbpasswd: phpbb
|
||||
dbname: phpbb
|
||||
table_prefix: phpbb_
|
||||
|
||||
email:
|
||||
enabled: false
|
||||
smtp_delivery : ~
|
||||
smtp_host: ~
|
||||
smtp_port: ~
|
||||
smtp_auth: ~
|
||||
smtp_user: ~
|
||||
smtp_pass: ~
|
||||
|
||||
server:
|
||||
cookie_secure: false
|
||||
server_protocol: http://
|
||||
force_server_vars: true
|
||||
server_name: localhost
|
||||
server_port: 80
|
||||
script_path: /
|
||||
|
||||
extensions: []
|
52
.devcontainer/resources/setup.sh
Normal file
52
.devcontainer/resources/setup.sh
Normal file
@@ -0,0 +1,52 @@
|
||||
# setup.sh
|
||||
# Commands to install and configure phpBB
|
||||
|
||||
# Start MySQL
|
||||
echo "[Codespaces] Start MySQL"
|
||||
sudo service mysql start
|
||||
|
||||
# Start Apache
|
||||
echo "[Codespaces] Start Apache"
|
||||
sudo service apache2 start
|
||||
|
||||
# Add SSH key
|
||||
echo "[Codespaces] Add SSH key"
|
||||
echo "$SSH_KEY" > /home/vscode/.ssh/id_rsa && chmod 600 /home/vscode/.ssh/id_rsa
|
||||
|
||||
# Create a MySQL user to use
|
||||
echo "[Codespaces] Create MySQL user"
|
||||
sudo mysql -u root<<EOFMYSQL
|
||||
CREATE USER 'phpbb'@'localhost' IDENTIFIED BY 'phpbb';
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'phpbb'@'localhost' WITH GRANT OPTION;
|
||||
CREATE DATABASE IF NOT EXISTS phpbb;
|
||||
EOFMYSQL
|
||||
|
||||
# Download dependencies
|
||||
echo "[Codespaces] Install Composer dependencies"
|
||||
composer install --no-interaction
|
||||
|
||||
# Symlink the webroot so it can be viewed
|
||||
echo "[Codespaces] Create Symlink of webroot"
|
||||
sudo rm -rf /var/www/html
|
||||
sudo ln -s /workspaces/phpbb/phpBB /var/www/html
|
||||
|
||||
# Copy phpBB config
|
||||
echo "[Codespaces] Copy phpBB configuration"
|
||||
cp /workspaces/phpbb/.devcontainer/resources/phpbb-config.yml /workspaces/phpbb/phpBB/install/install-config.yml
|
||||
|
||||
# Force the server URL to reflect the Codespace
|
||||
# https://docs.github.com/en/codespaces/developing-in-a-codespace/default-environment-variables-for-your-codespace
|
||||
if [ "$CODESPACES" = true ] ; then
|
||||
echo "[Codespaces] Set the phpBB server name using default environment variables"
|
||||
codespaces_url="${CODESPACE_NAME}-80.${GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN}"
|
||||
sed -i "s/localhost/$codespaces_url/g" /workspaces/phpbb/phpBB/install/install-config.yml
|
||||
fi
|
||||
|
||||
# Install phpBB
|
||||
echo "[Codespaces] Run phpBB CLI installation"
|
||||
cd /workspaces/phpbb/phpBB && composer install --no-interaction
|
||||
sudo php /workspaces/phpbb/phpBB/install/phpbbcli.php install /workspaces/phpbb/phpBB/install/install-config.yml
|
||||
rm -rf /workspaces/phpbb/phpBB/install
|
||||
|
||||
# Finished
|
||||
echo "[Codespaces] phpBB installation completed"
|
10
.devcontainer/resources/xdebug.ini
Normal file
10
.devcontainer/resources/xdebug.ini
Normal file
@@ -0,0 +1,10 @@
|
||||
zend_extension=xdebug.so
|
||||
|
||||
[xdebug]
|
||||
xdebug.mode=develop,debug
|
||||
xdebug.discover_client_host=1
|
||||
xdebug.client_port=9003
|
||||
xdebug.start_with_request=yes
|
||||
xdebug.log='/var/log/xdebug/xdebug.log'
|
||||
xdebug.connect_timeout_ms=2000
|
||||
xdebug.idekey=VSCODE
|
8
.github/PULL_REQUEST_TEMPLATE.md
vendored
8
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,10 +1,10 @@
|
||||
Checklist:
|
||||
|
||||
- [ ] Correct branch: master for new features; 3.3.x & 3.2.x for fixes
|
||||
- [ ] Correct branch: master for new features; 3.3.x for fixes
|
||||
- [ ] Tests pass
|
||||
- [ ] Code follows coding guidelines: [master](https://area51.phpbb.com/docs/dev/master/development/coding_guidelines.html), [3.3.x](https://area51.phpbb.com/docs/dev/3.3.x/development/coding_guidelines.html) and [3.2.x](https://area51.phpbb.com/docs/dev/3.2.x/development/coding_guidelines.html)
|
||||
- [ ] Code follows coding guidelines: [master](https://area51.phpbb.com/docs/master/coding-guidelines.html) and [3.3.x](https://area51.phpbb.com/docs/dev/3.3.x/development/coding_guidelines.html)
|
||||
- [ ] Commit follows commit message [format](https://area51.phpbb.com/docs/dev/3.3.x/development/git.html)
|
||||
|
||||
Tracker ticket (set the ticket ID to **your ticket ID**):
|
||||
Tracker ticket:
|
||||
|
||||
https://tracker.phpbb.com/browse/PHPBB3-12345
|
||||
https://tracker.phpbb.com/browse/PHPBB-12345
|
||||
|
27
.github/check-doctum-parse-errors.sh
vendored
Executable file
27
.github/check-doctum-parse-errors.sh
vendored
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
set -e
|
||||
|
||||
if [ ! -f doctum.phar ]; then
|
||||
# Download the latest (5.x.x) release if the file does not exist
|
||||
# Remove it to update your phar
|
||||
curl -O https://doctum.long-term.support/releases/5/doctum.phar
|
||||
rm -f doctum.phar.sha256
|
||||
curl -O https://doctum.long-term.support/releases/5/doctum.phar.sha256
|
||||
sha256sum --strict --check doctum.phar.sha256
|
||||
rm -f doctum.phar.sha256
|
||||
chmod +x ./doctum.phar
|
||||
# You can fetch the latest (5.x.x) version code here:
|
||||
# https://doctum.long-term.support/releases/5/VERSION
|
||||
fi
|
||||
# Show the version to inform users of the script
|
||||
./doctum.phar version --text
|
||||
./doctum.phar parse build/doctum-checkout.conf.php -v
|
63
.github/check-executable-files.sh
vendored
Executable file
63
.github/check-executable-files.sh
vendored
Executable file
@@ -0,0 +1,63 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
set -e
|
||||
|
||||
root="$1"
|
||||
path="${root}phpBB/"
|
||||
|
||||
# Check the permissions of the files
|
||||
|
||||
# The following variables MUST NOT contain any wildcard
|
||||
# Directories to skip
|
||||
directories_skipped="-path ${path}develop -o -path ${path}vendor"
|
||||
|
||||
# Files to skip
|
||||
files_skipped="-false"
|
||||
|
||||
# Files which have to be executable
|
||||
executable_files="-path ${path}bin/* -o -path ${path}install/phpbbcli.php"
|
||||
|
||||
incorrect_files=$( \
|
||||
find ${path} \
|
||||
'(' \
|
||||
'(' \
|
||||
${directories_skipped} \
|
||||
')' \
|
||||
-a -type d -prune -a -type f \
|
||||
')' -o \
|
||||
'(' \
|
||||
-type f -a \
|
||||
-not '(' \
|
||||
${files_skipped} \
|
||||
')' -a \
|
||||
'(' \
|
||||
'(' \
|
||||
'(' \
|
||||
${executable_files} \
|
||||
')' -a \
|
||||
-not -perm /100 \
|
||||
')' -o \
|
||||
'(' \
|
||||
-not '(' \
|
||||
${executable_files} \
|
||||
')' -a \
|
||||
-perm /111 \
|
||||
')' \
|
||||
')' \
|
||||
')' \
|
||||
)
|
||||
|
||||
if [ "${incorrect_files}" != '' ]
|
||||
then
|
||||
echo "The following files do not have proper permissions:";
|
||||
ls -la ${incorrect_files}
|
||||
exit 1;
|
||||
fi
|
14
.github/check-image-icc-profiles.sh
vendored
Executable file
14
.github/check-image-icc-profiles.sh
vendored
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
set -e
|
||||
|
||||
find . -type f -a -iregex '.*\.\(gif\|jpg\|jpeg\|png\)$' -a -not -wholename '*vendor/*' | \
|
||||
parallel --gnu --keep-order 'phpBB/develop/strip_icc_profiles.sh {}'
|
64
.github/ext-check-executable-files.sh
vendored
Executable file
64
.github/ext-check-executable-files.sh
vendored
Executable file
@@ -0,0 +1,64 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
set -e
|
||||
|
||||
root="$1"
|
||||
extname="$2"
|
||||
path="${root}phpBB/ext/${extname}/"
|
||||
|
||||
# Check the permissions of the files
|
||||
|
||||
# The following variables MUST NOT contain any wildcard
|
||||
# Directories to skip
|
||||
directories_skipped="-path ${path}develop -o -path ${path}vendor -o -path ${path}.git"
|
||||
|
||||
# Files to skip
|
||||
files_skipped="-false"
|
||||
|
||||
# Files which have to be executable
|
||||
executable_files="-path ${path}bin/* -o -path ${path}install/phpbbcli.php"
|
||||
|
||||
incorrect_files=$( \
|
||||
find ${path} \
|
||||
'(' \
|
||||
'(' \
|
||||
${directories_skipped} \
|
||||
')' \
|
||||
-a -type d -prune -a -type f \
|
||||
')' -o \
|
||||
'(' \
|
||||
-type f -a \
|
||||
-not '(' \
|
||||
${files_skipped} \
|
||||
')' -a \
|
||||
'(' \
|
||||
'(' \
|
||||
'(' \
|
||||
${executable_files} \
|
||||
')' -a \
|
||||
-not -perm /100 \
|
||||
')' -o \
|
||||
'(' \
|
||||
-not '(' \
|
||||
${executable_files} \
|
||||
')' -a \
|
||||
-perm /111 \
|
||||
')' \
|
||||
')' \
|
||||
')' \
|
||||
)
|
||||
|
||||
if [ "${incorrect_files}" != '' ]
|
||||
then
|
||||
echo "The following files do not have proper permissions:";
|
||||
ls -la ${incorrect_files}
|
||||
exit 1;
|
||||
fi
|
25
.github/ext-sniff.sh
vendored
Executable file
25
.github/ext-sniff.sh
vendored
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
set -e
|
||||
set -x
|
||||
|
||||
EXTNAME=$1
|
||||
NOTESTS=$2
|
||||
|
||||
if [ "$NOTESTS" == "1" ]
|
||||
then
|
||||
phpBB/vendor/bin/phpcs \
|
||||
-s \
|
||||
--extensions=php \
|
||||
--standard=build/code_sniffer/ruleset-php-extensions.xml \
|
||||
--ignore=*/"$EXTNAME"/tests/*,*/"$EXTNAME"/vendor/* \
|
||||
phpBB/ext/"$EXTNAME"
|
||||
fi
|
41
.github/ldap/base.ldif
vendored
Normal file
41
.github/ldap/base.ldif
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
dn: dc=example,dc=com
|
||||
objectClass: top
|
||||
objectClass: dcObject
|
||||
objectClass: organization
|
||||
o: example
|
||||
dc: example
|
||||
|
||||
dn: ou=foo,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: foo
|
||||
|
||||
dn: cn=admin,dc=example,dc=com
|
||||
objectClass: simpleSecurityObject
|
||||
objectClass: organizationalRole
|
||||
cn: admin
|
||||
description: LDAP administrator
|
||||
userPassword:: e1NTSEF9NytMR2gveUxTMzdsc3RRd1V1dENZSVA0TWdYdm9SdDY=
|
||||
|
||||
dn: ou=group,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: group
|
||||
|
||||
dn: cn=admin,ou=foo,dc=example,dc=com
|
||||
objectClass: posixAccount
|
||||
objectClass: inetOrgPerson
|
||||
objectClass: organizationalPerson
|
||||
objectClass: person
|
||||
loginShell: /bin/bash
|
||||
homeDirectory: /home/admin
|
||||
uid: admin
|
||||
cn: admin
|
||||
uidNumber: 10000
|
||||
gidNumber: 10000
|
||||
sn: admin
|
||||
mail: admin@example.com
|
||||
userPassword:: e1NTSEF9WHpueGZURHZZc21JSkl6czdMVXBjdCtWYTA1dlMzVlQ=
|
||||
|
||||
dn: cn=admin,ou=group,dc=example,dc=com
|
||||
objectClass: posixGroup
|
||||
gidNumber: 10000
|
||||
cn: admin
|
17
.github/ldap/slapd.conf
vendored
Normal file
17
.github/ldap/slapd.conf
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
# See slapd.conf(5) for details on configuration options.
|
||||
include /etc/ldap/schema/core.schema
|
||||
include /etc/ldap/schema/cosine.schema
|
||||
include /etc/ldap/schema/inetorgperson.schema
|
||||
include /etc/ldap/schema/nis.schema
|
||||
|
||||
pidfile /var/tmp/slapd/slapd.pid
|
||||
argsfile /var/tmp/slapd/slapd.args
|
||||
|
||||
modulepath /usr/lib/openldap
|
||||
|
||||
database ldif
|
||||
directory /var/tmp/slapd
|
||||
|
||||
suffix "dc=example,dc=com"
|
||||
rootdn "cn=admin,dc=example,dc=com"
|
||||
rootpw adminadmin
|
16
.github/phing-sniff.sh
vendored
Executable file
16
.github/phing-sniff.sh
vendored
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
set -e
|
||||
set -x
|
||||
|
||||
cd build
|
||||
../phpBB/vendor/bin/phing sniff
|
||||
cd ..
|
39
.github/phpunit-mariadb-github.xml
vendored
Normal file
39
.github/phpunit-mariadb-github.xml
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit backupGlobals="true"
|
||||
backupStaticAttributes="false"
|
||||
colors="true"
|
||||
convertErrorsToExceptions="true"
|
||||
convertNoticesToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
processIsolation="false"
|
||||
stopOnFailure="false"
|
||||
verbose="true"
|
||||
bootstrap="../tests/bootstrap.php">
|
||||
<testsuites>
|
||||
<testsuite name="phpBB Test Suite">
|
||||
<directory suffix="_test.php">../tests</directory>
|
||||
<exclude>../tests/functional</exclude>
|
||||
<exclude>../tests/lint_test.php</exclude>
|
||||
</testsuite>
|
||||
<testsuite name="phpBB Functional Tests">
|
||||
<directory suffix="_test.php">../tests/functional</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
|
||||
<groups>
|
||||
<exclude>
|
||||
<group>slow</group>
|
||||
</exclude>
|
||||
</groups>
|
||||
|
||||
<php>
|
||||
<server name="PHPBB_TEST_DBMS" value="mysqli" />
|
||||
<server name="PHPBB_TEST_DBHOST" value="0.0.0.0" />
|
||||
<server name="PHPBB_TEST_DBPORT" value="3306" />
|
||||
<server name="PHPBB_TEST_DBNAME" value="phpbb_tests" />
|
||||
<server name="PHPBB_TEST_DBUSER" value="root" />
|
||||
<server name="PHPBB_TEST_DBPASSWD" value="" />
|
||||
<server name="PHPBB_TEST_TABLE_PREFIX" value="phpbb_"/>
|
||||
<server name="PHPBB_FUNCTIONAL_URL" value="http://localhost/" />
|
||||
</php>
|
||||
</phpunit>
|
41
.github/phpunit-mssql-github.xml
vendored
Normal file
41
.github/phpunit-mssql-github.xml
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit backupGlobals="true"
|
||||
backupStaticAttributes="false"
|
||||
colors="true"
|
||||
convertErrorsToExceptions="true"
|
||||
convertNoticesToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
processIsolation="false"
|
||||
stopOnFailure="false"
|
||||
verbose="true"
|
||||
bootstrap="../tests/bootstrap.php">
|
||||
<testsuites>
|
||||
<testsuite name="phpBB Test Suite">
|
||||
<directory suffix="_test.php">../tests</directory>
|
||||
<exclude>../tests/functional</exclude>
|
||||
<exclude>../tests/lint_test.php</exclude>
|
||||
</testsuite>
|
||||
<testsuite name="phpBB Functional Tests">
|
||||
<directory suffix="_test.php">../tests/functional</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
|
||||
<groups>
|
||||
<exclude>
|
||||
<group>slow</group>
|
||||
</exclude>
|
||||
</groups>
|
||||
|
||||
<php>
|
||||
<server name="PHPBB_TEST_DBMS" value="phpbb\db\driver\mssqlnative" />
|
||||
<server name="PHPBB_TEST_DBHOST" value="127.0.0.1" />
|
||||
<server name="PHPBB_TEST_DBPORT" value="" />
|
||||
<server name="PHPBB_TEST_DBNAME" value="phpbb_tests" />
|
||||
<server name="PHPBB_TEST_DBUSER" value="sa" />
|
||||
<server name="PHPBB_TEST_DBPASSWD" value="Pssw0rd_12" />
|
||||
<server name="PHPBB_TEST_REDIS_HOST" value="localhost" />
|
||||
<server name="PHPBB_TEST_MEMCACHED_HOST" value="localhost" />
|
||||
<server name="PHPBB_TEST_TABLE_PREFIX" value="phpbb_"/>
|
||||
<server name="PHPBB_FUNCTIONAL_URL" value="http://localhost/" />
|
||||
</php>
|
||||
</phpunit>
|
41
.github/phpunit-mysql-github.xml
vendored
Normal file
41
.github/phpunit-mysql-github.xml
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit backupGlobals="true"
|
||||
backupStaticAttributes="false"
|
||||
colors="true"
|
||||
convertErrorsToExceptions="true"
|
||||
convertNoticesToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
processIsolation="false"
|
||||
stopOnFailure="false"
|
||||
verbose="true"
|
||||
bootstrap="../tests/bootstrap.php">
|
||||
<testsuites>
|
||||
<testsuite name="phpBB Test Suite">
|
||||
<directory suffix="_test.php">../tests</directory>
|
||||
<exclude>../tests/functional</exclude>
|
||||
<exclude>../tests/lint_test.php</exclude>
|
||||
</testsuite>
|
||||
<testsuite name="phpBB Functional Tests">
|
||||
<directory suffix="_test.php">../tests/functional</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
|
||||
<groups>
|
||||
<exclude>
|
||||
<group>slow</group>
|
||||
</exclude>
|
||||
</groups>
|
||||
|
||||
<php>
|
||||
<server name="PHPBB_TEST_DBMS" value="phpbb\db\driver\mysqli" />
|
||||
<server name="PHPBB_TEST_DBHOST" value="0.0.0.0" />
|
||||
<server name="PHPBB_TEST_DBPORT" value="3306" />
|
||||
<server name="PHPBB_TEST_DBNAME" value="phpbb_tests" />
|
||||
<server name="PHPBB_TEST_DBUSER" value="root" />
|
||||
<server name="PHPBB_TEST_DBPASSWD" value="" />
|
||||
<server name="PHPBB_TEST_REDIS_HOST" value="localhost" />
|
||||
<server name="PHPBB_TEST_MEMCACHED_HOST" value="localhost" />
|
||||
<server name="PHPBB_TEST_TABLE_PREFIX" value="phpbb_"/>
|
||||
<server name="PHPBB_FUNCTIONAL_URL" value="http://localhost/" />
|
||||
</php>
|
||||
</phpunit>
|
41
.github/phpunit-postgres-github.xml
vendored
Normal file
41
.github/phpunit-postgres-github.xml
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit backupGlobals="true"
|
||||
backupStaticAttributes="false"
|
||||
colors="true"
|
||||
convertErrorsToExceptions="true"
|
||||
convertNoticesToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
processIsolation="false"
|
||||
stopOnFailure="false"
|
||||
verbose="true"
|
||||
bootstrap="../tests/bootstrap.php">
|
||||
<testsuites>
|
||||
<testsuite name="phpBB Test Suite">
|
||||
<directory suffix="_test.php">../tests</directory>
|
||||
<exclude>../tests/functional</exclude>
|
||||
<exclude>../tests/lint_test.php</exclude>
|
||||
</testsuite>
|
||||
<testsuite name="phpBB Functional Tests">
|
||||
<directory suffix="_test.php">../tests/functional</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
|
||||
<groups>
|
||||
<exclude>
|
||||
<group>slow</group>
|
||||
</exclude>
|
||||
</groups>
|
||||
|
||||
<php>
|
||||
<server name="PHPBB_TEST_DBMS" value="phpbb\db\driver\postgres"/>
|
||||
<server name="PHPBB_TEST_DBHOST" value="localhost" />
|
||||
<server name="PHPBB_TEST_DBPORT" value="5432" />
|
||||
<server name="PHPBB_TEST_DBNAME" value="phpbb_tests" />
|
||||
<server name="PHPBB_TEST_DBUSER" value="postgres" />
|
||||
<server name="PHPBB_TEST_DBPASSWD" value="postgres" />
|
||||
<server name="PHPBB_TEST_REDIS_HOST" value="localhost" />
|
||||
<server name="PHPBB_TEST_MEMCACHED_HOST" value="localhost" />
|
||||
<server name="PHPBB_TEST_TABLE_PREFIX" value="phpbb_"/>
|
||||
<server name="PHPBB_FUNCTIONAL_URL" value="http://localhost/" />
|
||||
</php>
|
||||
</phpunit>
|
41
.github/phpunit-psql-windows-github.xml
vendored
Normal file
41
.github/phpunit-psql-windows-github.xml
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit backupGlobals="true"
|
||||
backupStaticAttributes="false"
|
||||
colors="true"
|
||||
convertErrorsToExceptions="true"
|
||||
convertNoticesToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
processIsolation="false"
|
||||
stopOnFailure="false"
|
||||
verbose="true"
|
||||
bootstrap="../tests/bootstrap.php">
|
||||
<testsuites>
|
||||
<testsuite name="phpBB Test Suite">
|
||||
<directory suffix="_test.php">../tests</directory>
|
||||
<exclude>../tests/functional</exclude>
|
||||
<exclude>../tests/lint_test.php</exclude>
|
||||
</testsuite>
|
||||
<testsuite name="phpBB Functional Tests">
|
||||
<directory suffix="_test.php">../tests/functional</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
|
||||
<groups>
|
||||
<exclude>
|
||||
<group>slow</group>
|
||||
</exclude>
|
||||
</groups>
|
||||
|
||||
<php>
|
||||
<server name="PHPBB_TEST_DBMS" value="phpbb\db\driver\postgres"/>
|
||||
<server name="PHPBB_TEST_DBHOST" value="localhost" />
|
||||
<server name="PHPBB_TEST_DBPORT" value="5432" />
|
||||
<server name="PHPBB_TEST_DBNAME" value="phpbb_tests" />
|
||||
<server name="PHPBB_TEST_DBUSER" value="postgres" />
|
||||
<server name="PHPBB_TEST_DBPASSWD" value="root" />
|
||||
<server name="PHPBB_TEST_REDIS_HOST" value="localhost" />
|
||||
<server name="PHPBB_TEST_MEMCACHED_HOST" value="localhost" />
|
||||
<server name="PHPBB_TEST_TABLE_PREFIX" value="phpbb_"/>
|
||||
<server name="PHPBB_FUNCTIONAL_URL" value="http://phpbb.test/" />
|
||||
</php>
|
||||
</phpunit>
|
35
.github/phpunit-sqlite3-github.xml
vendored
Normal file
35
.github/phpunit-sqlite3-github.xml
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit backupGlobals="true"
|
||||
backupStaticAttributes="false"
|
||||
colors="true"
|
||||
convertErrorsToExceptions="true"
|
||||
convertNoticesToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
processIsolation="false"
|
||||
stopOnFailure="false"
|
||||
verbose="true"
|
||||
bootstrap="../tests/bootstrap.php">
|
||||
<testsuites>
|
||||
<testsuite name="phpBB Test Suite">
|
||||
<directory suffix="_test.php">../tests</directory>
|
||||
<exclude>../tests/functional</exclude>
|
||||
<exclude>../tests/lint_test.php</exclude>
|
||||
</testsuite>
|
||||
<testsuite name="phpBB Functional Tests">
|
||||
<directory suffix="_test.php">../tests/functional</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
|
||||
<groups>
|
||||
<exclude>
|
||||
<group>slow</group>
|
||||
</exclude>
|
||||
</groups>
|
||||
|
||||
<php>
|
||||
<server name="PHPBB_TEST_REDIS_HOST" value="localhost" />
|
||||
<server name="PHPBB_TEST_MEMCACHED_HOST" value="localhost" />
|
||||
<server name="PHPBB_TEST_TABLE_PREFIX" value="phpbb_"/>
|
||||
<server name="PHPBB_FUNCTIONAL_URL" value="http://localhost/" />
|
||||
</php>
|
||||
</phpunit>
|
22
.github/prepare-extension.sh
vendored
Executable file
22
.github/prepare-extension.sh
vendored
Executable file
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
set -e
|
||||
set -x
|
||||
|
||||
EXTNAME=$1
|
||||
|
||||
# Move the extension in place
|
||||
mkdir --parents phpBB/ext/$EXTNAME
|
||||
cp -R ../tmp/* phpBB/ext/$EXTNAME
|
||||
|
||||
# Move the test files for extensions in place
|
||||
cp -R .github/*.xml phpBB/ext/$EXTNAME/.github
|
||||
cp -R .github/*.sh phpBB/ext/$EXTNAME/.github
|
26
.github/setup-database.sh
vendored
Executable file
26
.github/setup-database.sh
vendored
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
set -e
|
||||
set -x
|
||||
|
||||
DB=$1
|
||||
MYISAM=$2
|
||||
|
||||
if [ "$DB" == "postgres" ]
|
||||
then
|
||||
psql -c 'DROP DATABASE IF EXISTS phpbb_tests;' -U postgres
|
||||
psql -c 'create database phpbb_tests;' -U postgres
|
||||
fi
|
||||
|
||||
if [ "$MYISAM" == '1' ]
|
||||
then
|
||||
mysql -h 127.0.0.1 -u root -e 'SET GLOBAL storage_engine=MyISAM;'
|
||||
fi
|
14
.github/setup-exiftool.sh
vendored
Executable file
14
.github/setup-exiftool.sh
vendored
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
set -e
|
||||
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y parallel libimage-exiftool-perl
|
19
.github/setup-ldap.sh
vendored
Executable file
19
.github/setup-ldap.sh
vendored
Executable file
@@ -0,0 +1,19 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
set -e
|
||||
set -x
|
||||
|
||||
sudo apt-get -y install ldap-utils slapd
|
||||
mkdir /var/tmp/slapd
|
||||
cp .github/ldap/slapd.conf /var/tmp/slapd/slapd.conf
|
||||
slapd -d 256 -d 128 -f /var/tmp/slapd/slapd.conf -h ldap://localhost:3389 &
|
||||
sleep 3
|
||||
ldapadd -H ldap://localhost:3389 -D "cn=admin,dc=example,dc=com" -w adminadmin -f .github/ldap/base.ldif
|
36
.github/setup-phpbb.sh
vendored
Executable file
36
.github/setup-phpbb.sh
vendored
Executable file
@@ -0,0 +1,36 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
set -e
|
||||
set -x
|
||||
|
||||
DB=$1
|
||||
PHP_VERSION=$2
|
||||
NOTESTS=$3
|
||||
|
||||
if [ "$NOTESTS" == '1' ]
|
||||
then
|
||||
.github/setup-exiftool.sh
|
||||
.github/setup-unbuffer.sh
|
||||
fi
|
||||
|
||||
if [ "$NOTESTS" != '1' ]
|
||||
then
|
||||
.github/setup-webserver.sh
|
||||
fi
|
||||
|
||||
cd phpBB
|
||||
php ../composer.phar install --dev --no-interaction
|
||||
if [[ "$PHP_VERSION" =~ ^nightly$ || "$PHP_VERSION" =~ ^8 ]]
|
||||
then
|
||||
php ../composer.phar remove phpunit/dbunit --dev --update-with-dependencies \
|
||||
&& php ../composer.phar require symfony/yaml:~4.4 misantron/dbunit:~5.0 phpunit/phpunit:^9.3 doctrine/instantiator:^1.4 --dev --update-with-all-dependencies --ignore-platform-reqs
|
||||
fi
|
||||
cd ..
|
14
.github/setup-unbuffer.sh
vendored
Executable file
14
.github/setup-unbuffer.sh
vendored
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
set -e
|
||||
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y expect-dev
|
81
.github/setup-webserver.sh
vendored
Executable file
81
.github/setup-webserver.sh
vendored
Executable file
@@ -0,0 +1,81 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
set -e
|
||||
set -x
|
||||
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y nginx coreutils
|
||||
|
||||
sudo service nginx stop
|
||||
|
||||
DIR=$(dirname "$0")
|
||||
USER=$(whoami)
|
||||
PHPBB_ROOT_PATH=$(realpath "$DIR/../phpBB")
|
||||
NGINX_SITE_CONF="/etc/nginx/sites-enabled/default"
|
||||
NGINX_CONF="/etc/nginx/nginx.conf"
|
||||
APP_SOCK=$(realpath "$DIR")/php-app.sock
|
||||
NGINX_PHP_CONF="$DIR/nginx-php.conf"
|
||||
|
||||
# php-fpm
|
||||
PHP_FPM_BIN="/usr/sbin/php-fpm$PHP_VERSION"
|
||||
PHP_FPM_CONF="$DIR/php-fpm.conf"
|
||||
|
||||
if [ ! -f $PHP_FPM_BIN ] && [ -f "/usr/bin/php-fpm" ]
|
||||
then
|
||||
PHP_FPM_BIN="/usr/bin/php-fpm"
|
||||
fi
|
||||
|
||||
if [ ! -f $PHP_FPM_BIN ]
|
||||
then
|
||||
sudo apt-get install php$PHP_VERSION-fpm php$PHP_VERSION-cli \
|
||||
php$PHP_VERSION-curl php$PHP_VERSION-xml php$PHP_VERSION-mbstring \
|
||||
php$PHP_VERSION-zip php$PHP_VERSION-mysql php$PHP_VERSION-sqlite3 \
|
||||
php$PHP_VERSION-intl php$PHP_VERSION-gd php$PHP_VERSION-pgsql
|
||||
sudo service php$PHP_VERSION-fpm start
|
||||
sudo service php$PHP_VERSION-fpm status
|
||||
fi
|
||||
|
||||
echo "
|
||||
[global]
|
||||
|
||||
[ci]
|
||||
user = $USER
|
||||
group = $USER
|
||||
listen = $APP_SOCK
|
||||
listen.mode = 0666
|
||||
pm = static
|
||||
pm.max_children = 2
|
||||
|
||||
php_admin_value[memory_limit] = 128M
|
||||
" > $PHP_FPM_CONF
|
||||
|
||||
sudo $PHP_FPM_BIN \
|
||||
--fpm-config "$DIR/php-fpm.conf"
|
||||
|
||||
# nginx
|
||||
sudo sed -i "s/user www-data;/user $USER;/g" $NGINX_CONF
|
||||
sudo cp "$DIR/../phpBB/docs/nginx.sample.conf" "$NGINX_SITE_CONF"
|
||||
sudo sed -i \
|
||||
-e "s/example\.com/localhost/g" \
|
||||
-e "s|root /path/to/phpbb;|root $PHPBB_ROOT_PATH;|g" \
|
||||
$NGINX_SITE_CONF
|
||||
|
||||
# Generate FastCGI configuration for Nginx
|
||||
echo "
|
||||
upstream php {
|
||||
server unix:$APP_SOCK;
|
||||
}
|
||||
" > $NGINX_PHP_CONF
|
||||
|
||||
sudo mv "$NGINX_PHP_CONF" /etc/nginx/conf.d/php.conf
|
||||
|
||||
sudo nginx -T
|
||||
sudo service nginx start
|
70
.github/workflows/check_merge_to_master.yml
vendored
Normal file
70
.github/workflows/check_merge_to_master.yml
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
name: Check merge to master
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [ opened, synchronize, reopened ]
|
||||
branches:
|
||||
- 3.3.x
|
||||
|
||||
jobs:
|
||||
merge-check:
|
||||
if: github.event_name == 'pull_request_target' && github.event.pull_request.base.ref == '3.3.x'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0 # Ensure full history is fetched
|
||||
|
||||
- name: Set up Git user
|
||||
run: |
|
||||
git config --global user.name "github-actions"
|
||||
git config --global user.email "github-actions@github.com"
|
||||
|
||||
- name: Fetch all branches
|
||||
run: git fetch origin
|
||||
|
||||
- name: Simulate merging PR into 3.3.x
|
||||
id: simulate_merge
|
||||
run: |
|
||||
git checkout 3.3.x
|
||||
git fetch origin pull/${{ github.event.pull_request.number }}/head
|
||||
git merge --no-ff FETCH_HEAD || exit 1
|
||||
|
||||
- name: Attempt to merge updated 3.3.x into master
|
||||
id: merge_master
|
||||
run: |
|
||||
git checkout master
|
||||
if git merge --no-ff 3.3.x --no-commit; then
|
||||
echo "mergeable=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "mergeable=false" >> $GITHUB_OUTPUT
|
||||
git merge --abort
|
||||
fi
|
||||
|
||||
- name: Find Comment
|
||||
uses: peter-evans/find-comment@v3
|
||||
id: fc
|
||||
with:
|
||||
issue-number: ${{ github.event.pull_request.number }}
|
||||
comment-author: 'github-actions[bot]'
|
||||
body-includes: The attempt to merge branch `3.3.x` into `master` has completed
|
||||
|
||||
- name: Post comment on PR
|
||||
if: always() # Ensure this step always runs, regardless of merge result
|
||||
uses: peter-evans/create-or-update-comment@v4
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
issue-number: ${{ github.event.pull_request.number }}
|
||||
comment-id: ${{ steps.fc.outputs.comment-id }}
|
||||
edit-mode: replace
|
||||
body: |
|
||||
The attempt to merge branch `3.3.x` into `master` has completed after considering the changes in this PR.
|
||||
|
||||
- Merge result: ${{ steps.merge_master.outputs.mergeable == 'true' && 'Success ✅' || 'Conflict ❌' }}
|
||||
|
||||
${{ steps.merge_master.outputs.mergeable == 'true' && 'This PR is ready to be merged.' || 'A separate PR will be needed to merge `3.3.x` into `master`.' }}
|
||||
|
||||
- name: Mark job as succeeded
|
||||
if: always()
|
||||
run: echo "Merge check completed. Ignoring the result to avoid failed status."
|
60
.github/workflows/merge_3.3.x_to_master.yml
vendored
Normal file
60
.github/workflows/merge_3.3.x_to_master.yml
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
name: Merge 3.3.x into master
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 3.3.x
|
||||
|
||||
jobs:
|
||||
merge-branch:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/create-github-app-token@v1
|
||||
id: app-token
|
||||
with:
|
||||
app-id: ${{ vars.MERGE_MASTER_APP_ID }}
|
||||
private-key: ${{ secrets.MERGE_MASTER_SECRET }}
|
||||
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # Fetch full history for proper merging
|
||||
ref: 3.3.x # Checkout the 3.3.x branch
|
||||
token: ${{ steps.app-token.outputs.token }}
|
||||
|
||||
- name: Fetch the latest commit information
|
||||
id: get-commit-info
|
||||
run: |
|
||||
# Get the latest commit SHA and its author details
|
||||
COMMIT_SHA=$(git rev-parse HEAD)
|
||||
COMMIT_AUTHOR_NAME=$(git log -1 --pretty=format:'%an' $COMMIT_SHA)
|
||||
COMMIT_AUTHOR_EMAIL=$(git log -1 --pretty=format:'%ae' $COMMIT_SHA)
|
||||
|
||||
# Save them as output for later steps
|
||||
echo "commit_sha=$COMMIT_SHA" >> $GITHUB_ENV
|
||||
echo "commit_author_name=$COMMIT_AUTHOR_NAME" >> $GITHUB_ENV
|
||||
echo "commit_author_email=$COMMIT_AUTHOR_EMAIL" >> $GITHUB_ENV
|
||||
|
||||
- name: Set up Git with the pull request author's info
|
||||
run: |
|
||||
git config --global user.name "${{ env.commit_author_name }}"
|
||||
git config --global user.email "${{ env.commit_author_email }}"
|
||||
|
||||
- name: Fetch all branches
|
||||
run: git fetch --all
|
||||
|
||||
- name: Merge 3.3.x into master
|
||||
run: |
|
||||
git checkout master
|
||||
if git merge --no-ff 3.3.x; then
|
||||
echo "merge_failed=false" >> $GITHUB_ENV
|
||||
else
|
||||
echo "merge_failed=true" >> $GITHUB_ENV
|
||||
fi
|
||||
|
||||
- name: Push changes to master if merge was successful
|
||||
if: env.merge_failed == 'false'
|
||||
run: git push origin master
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
598
.github/workflows/tests.yml
vendored
Normal file
598
.github/workflows/tests.yml
vendored
Normal file
@@ -0,0 +1,598 @@
|
||||
name: Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 3.3.x
|
||||
- master
|
||||
- 'prep-release-*'
|
||||
tags:
|
||||
- 'release-*'
|
||||
pull_request:
|
||||
branches:
|
||||
- 3.3.x
|
||||
- master
|
||||
- 'prep-release-*'
|
||||
|
||||
jobs:
|
||||
# Basic checks, e.g. parse errors, commit messages, etc.
|
||||
basic-checks:
|
||||
runs-on: ubuntu-22.04
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- db: 'none'
|
||||
php: '7.2'
|
||||
NOTESTS: 1
|
||||
|
||||
name: PHP ${{ matrix.php }} - ${{ matrix.db }}
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 100
|
||||
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, mysqli, sqlite, pdo_sqlite, intl, gd, exif, iconv, sqlsrv, pdo_sqlsrv, ldap
|
||||
coverage: none
|
||||
|
||||
- name: Get Composer Cache Directory
|
||||
id: composer-cache
|
||||
env:
|
||||
PHP_VERSION: ${{ matrix.php }}
|
||||
run: |
|
||||
cd phpBB
|
||||
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
echo "version=${PHP_VERSION%.*}" >> $GITHUB_OUTPUT
|
||||
cd ..
|
||||
|
||||
- name: Cache Composer dependencies
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
key: composer-${{ steps.composer-cache.outputs.version }}-${{ hashFiles('phpBB/composer.lock') }}
|
||||
|
||||
- name: Setup environment for phpBB
|
||||
env:
|
||||
DB: ${{ matrix.db }}
|
||||
PHP_VERSION: ${{ matrix.php }}
|
||||
NOTESTS: '1'
|
||||
run: |
|
||||
.github/setup-phpbb.sh $DB $PHP_VERSION $NOTESTS
|
||||
|
||||
- name: Phing sniff
|
||||
run: |
|
||||
.github/phing-sniff.sh
|
||||
|
||||
- name: Check doctum parse errors
|
||||
run: |
|
||||
.github/check-doctum-parse-errors.sh
|
||||
|
||||
- name: Check image ICC profiles
|
||||
run: |
|
||||
.github/check-image-icc-profiles.sh
|
||||
|
||||
- name: Check executable files
|
||||
run: |
|
||||
.github/check-executable-files.sh ./
|
||||
|
||||
- name: Check commit message
|
||||
if: github.event_name == 'pull_request'
|
||||
run: |
|
||||
git fetch origin $GITHUB_BASE_REF &> /dev/null
|
||||
git-tools/commit-msg-hook-range.sh $(git rev-parse origin/$GITHUB_BASE_REF)..$GITHUB_SHA
|
||||
|
||||
# Tests for MySQL and MariaDB
|
||||
mysql-tests:
|
||||
runs-on: ubuntu-22.04
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- php: '7.2'
|
||||
db: "mariadb:10.1"
|
||||
- php: '7.2'
|
||||
db: "mariadb:10.2"
|
||||
- php: '7.2'
|
||||
db: "mariadb:10.3"
|
||||
- php: '7.2'
|
||||
db: "mariadb:10.4"
|
||||
- php: '7.2'
|
||||
db: "mariadb:10.5"
|
||||
- php: '7.2'
|
||||
db: "mysql:5.6"
|
||||
db_alias: "MySQL Slow Tests"
|
||||
SLOWTESTS: 1
|
||||
- php: '7.2'
|
||||
db: "mysql:5.6"
|
||||
db_alias: "MyISAM Tests"
|
||||
MYISAM: 1
|
||||
- php: '7.2'
|
||||
db: "mysql:5.6"
|
||||
- php: '7.2'
|
||||
db: "mysql:5.7"
|
||||
- php: '7.3'
|
||||
db: "mysql:5.7"
|
||||
- php: '7.4'
|
||||
db: "mysql:5.7"
|
||||
- php: '7.4'
|
||||
db: "mysql:8.0"
|
||||
- php: '8.0'
|
||||
db: "mysql:5.7"
|
||||
- php: '8.1'
|
||||
db: "mysql:5.7"
|
||||
- php: '8.2'
|
||||
db: "mysql:5.7"
|
||||
- php: '8.3'
|
||||
db: "mysql:5.7"
|
||||
- php: '8.4'
|
||||
db: "mysql:5.7"
|
||||
|
||||
name: PHP ${{ matrix.php }} - ${{ matrix.db_alias != '' && matrix.db_alias || matrix.db }}
|
||||
|
||||
services:
|
||||
mysql:
|
||||
image: ${{ matrix.db }}
|
||||
env:
|
||||
MYSQL_ALLOW_EMPTY_PASSWORD: yes
|
||||
MYSQL_DATABASE: phpbb_tests
|
||||
ports:
|
||||
- 3306:3306
|
||||
options: >-
|
||||
--health-cmd="mysqladmin ping"
|
||||
--health-interval=10s
|
||||
--health-timeout=5s
|
||||
--health-retries=3
|
||||
|
||||
redis:
|
||||
image: redis
|
||||
options: >-
|
||||
--health-cmd "redis-cli ping"
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
ports:
|
||||
- 6379:6379
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- id: database-type
|
||||
env:
|
||||
MATRIX_DB: ${{ matrix.db }}
|
||||
run: |
|
||||
db=$(echo "${MATRIX_DB%%:*}")
|
||||
echo "db=$db" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, mysqli, sqlite, pdo_sqlite, intl, gd, exif, iconv, sqlsrv, pdo_sqlsrv, ldap
|
||||
coverage: none
|
||||
|
||||
- name: Get Composer Cache Directory
|
||||
id: composer-cache
|
||||
env:
|
||||
PHP_VERSION: ${{ matrix.php }}
|
||||
run: |
|
||||
cd phpBB
|
||||
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
echo "version=${PHP_VERSION%.*}" >> $GITHUB_OUTPUT
|
||||
cd ..
|
||||
|
||||
- name: Cache Composer dependencies
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
key: composer-${{ steps.composer-cache.outputs.version }}-${{ hashFiles('phpBB/composer.lock') }}
|
||||
|
||||
- name: Setup environment for phpBB
|
||||
env:
|
||||
DB: ${{steps.database-type.outputs.db}}
|
||||
PHP_VERSION: ${{ matrix.php }}
|
||||
NOTESTS: '0'
|
||||
run: |
|
||||
.github/setup-phpbb.sh $DB $PHP_VERSION ${NOTESTS:-0}
|
||||
|
||||
- name: Setup database
|
||||
env:
|
||||
DB: ${{steps.database-type.outputs.db}}
|
||||
MYISAM: ${{ matrix.MYISAM != 1 && '0' || '1' }}
|
||||
run: |
|
||||
.github/setup-database.sh $DB $MYISAM
|
||||
|
||||
- name: Setup LDAP
|
||||
if: ${{ matrix.SLOWTESTS == 1 }}
|
||||
run: |
|
||||
.github/setup-ldap.sh
|
||||
|
||||
- name: Lint tests
|
||||
if: ${{ matrix.SLOWTESTS != 1 && steps.database-type.outputs.db == 'mysql' }}
|
||||
run: phpBB/vendor/bin/phpunit tests/lint_test.php
|
||||
|
||||
- name: Run unit tests
|
||||
env:
|
||||
DB: ${{steps.database-type.outputs.db}}
|
||||
if: ${{ matrix.SLOWTESTS != 1 && matrix.NOTESTS != 1 }}
|
||||
run: |
|
||||
phpBB/vendor/bin/phpunit --configuration .github/phpunit-$DB-github.xml --verbose --stop-on-error
|
||||
|
||||
- name: Slow tests
|
||||
env:
|
||||
DB: ${{steps.database-type.outputs.db}}
|
||||
if: ${{ matrix.SLOWTESTS == 1 }}
|
||||
run: |
|
||||
phpBB/vendor/bin/phpunit --configuration .github/phpunit-$DB-github.xml --group slow
|
||||
|
||||
# Tests for PostgreSQL
|
||||
postgres-tests:
|
||||
runs-on: ubuntu-22.04
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- php: '7.2'
|
||||
db: "postgres:9.3"
|
||||
- php: '7.2'
|
||||
db: "postgres:9.5"
|
||||
- php: '7.2'
|
||||
db: "postgres:9.6"
|
||||
- php: '7.2'
|
||||
db: "postgres:10"
|
||||
- php: '7.2'
|
||||
db: "postgres:11"
|
||||
- php: '7.2'
|
||||
db: "postgres:12"
|
||||
- php: '7.2'
|
||||
db: "postgres:13"
|
||||
- php: '7.3'
|
||||
db: "postgres:13"
|
||||
- php: '7.4'
|
||||
db: "postgres:13"
|
||||
- php: '8.0'
|
||||
db: "postgres:12"
|
||||
- php: '8.0'
|
||||
db: "postgres:13"
|
||||
- php: '8.1'
|
||||
db: "postgres:14"
|
||||
- php: '8.2'
|
||||
db: "postgres:14"
|
||||
- php: '8.3'
|
||||
db: "postgres:14"
|
||||
- php: '8.4'
|
||||
db: "postgres:14"
|
||||
|
||||
name: PHP ${{ matrix.php }} - ${{ matrix.db }}
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: ${{ matrix.db != 'postgres:9.3' && matrix.db != 'postgres:9.5' && matrix.db != 'postgres:9.6' && matrix.db != 'postgres:10' && matrix.db != 'postgres:11' && matrix.db != 'postgres:12' && matrix.db != 'postgres:13' && 'postgres:10' || matrix.db }}
|
||||
env:
|
||||
POSTGRES_HOST: localhost
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
ports:
|
||||
- 5432:5432
|
||||
options: >-
|
||||
-v /var/run/postgresql:/var/run/postgresql
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
|
||||
redis:
|
||||
image: redis
|
||||
options: >-
|
||||
--health-cmd "redis-cli ping"
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
ports:
|
||||
- 6379:6379
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- id: database-type
|
||||
env:
|
||||
MATRIX_DB: ${{ matrix.db }}
|
||||
run: |
|
||||
db=$(echo "${MATRIX_DB%%:*}")
|
||||
echo "db=$db" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, mysqli, sqlite, pdo_sqlite, intl, gd, exif, iconv, sqlsrv, pdo_sqlsrv, ldap
|
||||
coverage: none
|
||||
|
||||
- name: Get Composer Cache Directory
|
||||
id: composer-cache
|
||||
env:
|
||||
PHP_VERSION: ${{ matrix.php }}
|
||||
run: |
|
||||
cd phpBB
|
||||
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
echo "version=${PHP_VERSION%.*}" >> $GITHUB_OUTPUT
|
||||
cd ..
|
||||
|
||||
- name: Cache Composer dependencies
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
key: composer-${{ steps.composer-cache.outputs.version }}-${{ hashFiles('phpBB/composer.lock') }}
|
||||
|
||||
- name: Setup environment for phpBB
|
||||
env:
|
||||
DB: ${{steps.database-type.outputs.db}}
|
||||
PHP_VERSION: ${{ matrix.php }}
|
||||
NOTESTS: '0'
|
||||
run: |
|
||||
.github/setup-phpbb.sh $DB $PHP_VERSION ${NOTESTS:-0}
|
||||
|
||||
- name: Setup database
|
||||
env:
|
||||
DB: ${{steps.database-type.outputs.db}}
|
||||
MYISAM: '0'
|
||||
run: |
|
||||
.github/setup-database.sh $DB $MYISAM
|
||||
|
||||
- name: Run unit tests
|
||||
env:
|
||||
DB: ${{steps.database-type.outputs.db}}
|
||||
run: |
|
||||
phpBB/vendor/bin/phpunit --configuration .github/phpunit-$DB-github.xml --verbose --stop-on-error
|
||||
|
||||
# Other database types, namely sqlite3 and mssql
|
||||
other-tests:
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- php: '7.2'
|
||||
db: "sqlite3"
|
||||
- php: '7.2'
|
||||
db: "mcr.microsoft.com/mssql/server:2017-latest"
|
||||
db_alias: 'MSSQL 2017'
|
||||
- php: '7.2'
|
||||
db: "mcr.microsoft.com/mssql/server:2019-CU27-ubuntu-20.04"
|
||||
db_alias: 'MSSQL 2019'
|
||||
|
||||
name: PHP ${{ matrix.php }} - ${{ matrix.db_alias != '' && matrix.db_alias || matrix.db }}
|
||||
|
||||
services:
|
||||
mssql:
|
||||
image: ${{ matrix.db != 'mcr.microsoft.com/mssql/server:2017-latest' && matrix.db != 'mcr.microsoft.com/mssql/server:2019-CU27-ubuntu-20.04' && 'mcr.microsoft.com/mssql/server:2017-latest' || matrix.db }}
|
||||
env:
|
||||
SA_PASSWORD: "Pssw0rd_12"
|
||||
ACCEPT_EULA: "y"
|
||||
ports:
|
||||
- 1433:1433
|
||||
options: >-
|
||||
--health-cmd="/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'Pssw0rd_12' -Q \"Use [master]; CREATE DATABASE [phpbb_tests] COLLATE Latin1_General_CI_AS\" || exit 1"
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
--health-start-period 10s
|
||||
|
||||
redis:
|
||||
image: redis
|
||||
options: >-
|
||||
--health-cmd "redis-cli ping"
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
ports:
|
||||
- 6379:6379
|
||||
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- id: database-type
|
||||
env:
|
||||
MATRIX_DB: ${{ matrix.db }}
|
||||
run: |
|
||||
if [ $MATRIX_DB == 'mcr.microsoft.com/mssql/server:2017-latest' ] || [ $MATRIX_DB == 'mcr.microsoft.com/mssql/server:2019-CU27-ubuntu-20.04' ]
|
||||
then
|
||||
db='mssql'
|
||||
else
|
||||
db=$(echo "${MATRIX_DB%%:*}")
|
||||
fi
|
||||
echo "db=$db" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, mysqli, sqlite, pdo_sqlite, intl, gd, exif, iconv, sqlsrv, pdo_sqlsrv, ldap
|
||||
coverage: none
|
||||
|
||||
- name: Get Composer Cache Directory
|
||||
id: composer-cache
|
||||
env:
|
||||
PHP_VERSION: ${{ matrix.php }}
|
||||
run: |
|
||||
cd phpBB
|
||||
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
echo "version=${PHP_VERSION%.*}" >> $GITHUB_OUTPUT
|
||||
cd ..
|
||||
|
||||
- name: Cache Composer dependencies
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
key: composer-${{ steps.composer-cache.outputs.version }}-${{ hashFiles('phpBB/composer.lock') }}
|
||||
|
||||
- name: Setup environment for phpBB
|
||||
env:
|
||||
DB: ${{steps.database-type.outputs.db}}
|
||||
PHP_VERSION: ${{ matrix.php }}
|
||||
NOTESTS: '0'
|
||||
run: |
|
||||
.github/setup-phpbb.sh $DB $PHP_VERSION ${NOTESTS:-0}
|
||||
|
||||
- name: Setup database
|
||||
env:
|
||||
DB: ${{steps.database-type.outputs.db}}
|
||||
MYISAM: '0'
|
||||
run: |
|
||||
.github/setup-database.sh $DB $MYISAM
|
||||
|
||||
- name: Run unit tests
|
||||
env:
|
||||
DB: ${{steps.database-type.outputs.db}}
|
||||
run: |
|
||||
phpBB/vendor/bin/phpunit --configuration .github/phpunit-$DB-github.xml --verbose --stop-on-error
|
||||
|
||||
# Test with IIS & PostgreSQL on Windows
|
||||
windows-tests:
|
||||
runs-on: windows-latest
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- php: '7.4'
|
||||
db: "postgres"
|
||||
type: 'unit'
|
||||
- php: '8.0'
|
||||
db: "postgres"
|
||||
type: 'unit'
|
||||
- php: '8.1'
|
||||
db: "postgres"
|
||||
type: 'unit'
|
||||
- php: '8.2'
|
||||
db: "postgres"
|
||||
type: 'unit'
|
||||
- php: '8.3'
|
||||
db: "postgres"
|
||||
type: 'unit'
|
||||
- php: '8.4'
|
||||
db: "postgres"
|
||||
type: 'unit'
|
||||
- php: '7.4'
|
||||
db: "postgres"
|
||||
type: 'functional'
|
||||
- php: '8.0'
|
||||
db: "postgres"
|
||||
type: 'functional'
|
||||
- php: '8.1'
|
||||
db: "postgres"
|
||||
type: 'functional'
|
||||
- php: '8.2'
|
||||
db: "postgres"
|
||||
type: 'functional'
|
||||
- php: '8.3'
|
||||
db: "postgres"
|
||||
type: 'functional'
|
||||
- php: '8.4'
|
||||
db: "postgres"
|
||||
type: 'functional'
|
||||
|
||||
name: Windows - PHP ${{ matrix.php }} - ${{ matrix.db }} - ${{ matrix.type }}
|
||||
|
||||
steps:
|
||||
- name: Prepare git for Windows
|
||||
run: |
|
||||
git config --system core.autocrlf false
|
||||
git config --system core.eol lf
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, intl, gd, exif, iconv, pgsql, pdo_pgsql
|
||||
ini-values: upload_tmp_dir=${{ runner.temp }}, sys_temp_dir=${{ runner.temp }}
|
||||
coverage: none
|
||||
|
||||
- name: Get Composer Cache Directory
|
||||
id: composer-cache
|
||||
run: |
|
||||
cd phpBB
|
||||
echo "dir=$(composer config cache-files-dir)" >> $env:GITHUB_OUTPUT
|
||||
$major_version="${{ matrix.php }}".substring(0,1)
|
||||
echo "version=$major_version" >> $env:GITHUB_OUTPUT
|
||||
cd ..
|
||||
|
||||
- name: Cache Composer dependencies
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
key: composer-${{ steps.composer-cache.outputs.version }}-${{ hashFiles('phpBB/composer.lock') }}
|
||||
|
||||
- name: Setup environment for phpBB
|
||||
env:
|
||||
GITHUB_WORKSPACE: ${{ github.workspace }}
|
||||
TEMP_DIR: ${{ runner.temp }}
|
||||
run: |
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName IIS-WebServerRole, IIS-WebServer, IIS-CommonHttpFeatures, IIS-ManagementConsole, IIS-HttpErrors, IIS-HttpRedirect, IIS-WindowsAuthentication, IIS-StaticContent, IIS-DefaultDocument, IIS-HttpCompressionStatic, IIS-DirectoryBrowsing, IIS-WebServerManagementTools, IIS-CGI -All
|
||||
Set-Service wuauserv -StartupType Manual
|
||||
(Get-Content ${env:GITHUB_WORKSPACE}\phpBB\web.config).replace("<configuration>", "<configuration>`n`t<system.web>`n`t`t<customErrors mode=`"Off`"/>`n`t</system.web>") | Set-Content ${env:GITHUB_WORKSPACE}\phpBB\web.config
|
||||
(Get-Content ${env:GITHUB_WORKSPACE}\phpBB\web.config).replace("`t</system.webServer>", "`t`t<httpErrors errorMode=`"Detailed`" />`n`t</system.webServer>") | Set-Content ${env:GITHUB_WORKSPACE}\phpBB\web.config
|
||||
choco install urlrewrite -y
|
||||
Import-Module WebAdministration
|
||||
New-WebSite -Name 'phpBBTest' -PhysicalPath "${env:GITHUB_WORKSPACE}\phpBB" -Force
|
||||
$session = Get-PSSession -Name WinPSCompatSession
|
||||
$sb = {Set-ItemProperty 'IIS:\Sites\phpBBTest' -name Bindings -value @{protocol='http';bindingInformation='*:80:phpbb.test'}}
|
||||
Invoke-Command -Scriptblock $sb -Session $session
|
||||
$sb = {Set-WebConfigurationProperty -filter /system.WebServer/security/authentication/AnonymousAuthentication -name enabled -value true -location "IIS:\Sites\phpBBTest"}
|
||||
Invoke-Command -Scriptblock $sb -Session $session
|
||||
Add-Content -Path $env:windir\System32\drivers\etc\hosts -Value "`r`n127.0.0.1`tphpbb.test" -Force
|
||||
[System.Environment]::SetEnvironmentVariable('PATH',$Env:PATH+";%windir%\system32\inetsrv")
|
||||
echo Setup FAST-CGI configuration
|
||||
Add-WebConfiguration -Filter /system.webServer/fastCgi -PSPath IIS:\ -Value @{fullpath="C:\tools\php\php-cgi.exe"}
|
||||
echo Setup FACT-CGI handler
|
||||
New-WebHandler -Name "PHP-FastCGI" -Path "*.php" -Modules FastCgiModule -ScriptProcessor "C:\tools\php\php-cgi.exe" -Verb '*' -ResourceType Either
|
||||
iisreset
|
||||
NET START W3SVC
|
||||
mkdir "${env:GITHUB_WORKSPACE}\phpBB\cache\test"
|
||||
mkdir "${env:GITHUB_WORKSPACE}\phpBB\cache\installer"
|
||||
icacls "${env:GITHUB_WORKSPACE}\phpBB\cache" /grant Users:F /T
|
||||
icacls "${env:GITHUB_WORKSPACE}\phpBB\files" /grant Users:F /T
|
||||
icacls "${env:GITHUB_WORKSPACE}\phpBB\store" /grant Users:F /T
|
||||
icacls "${env:GITHUB_WORKSPACE}\phpBB\images\avatars\upload" /grant Users:F /T
|
||||
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("IIS_IUSRS", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
|
||||
$acl = Get-ACL "${env:TEMP_DIR}"
|
||||
$acl.AddAccessRule($accessRule)
|
||||
Set-ACL -Path "${env:TEMP_DIR}" -ACLObject $acl
|
||||
cd ${env:GITHUB_WORKSPACE}\phpBB
|
||||
php ..\composer.phar install
|
||||
php ..\composer.phar remove phpunit/dbunit --dev --update-with-dependencies
|
||||
php ..\composer.phar require symfony/yaml:~4.4 misantron/dbunit:~5.0 phpunit/phpunit:^9.3 doctrine/instantiator:^1.4 --dev --update-with-all-dependencies --ignore-platform-reqs
|
||||
cd ..
|
||||
- name: Setup database
|
||||
run: |
|
||||
$postgreSqlSvc = Get-Service "postgresql*"
|
||||
Set-Service $postgreSqlSvc.Name -StartupType manual
|
||||
$runningStatus = [System.ServiceProcess.ServiceControllerStatus]::Running
|
||||
$maxStartTimeout = New-TimeSpan -Seconds 30
|
||||
try {
|
||||
$postgreSqlSvc.Start()
|
||||
$postgreSqlSvc.WaitForStatus($runningStatus, $maxStartTimeout)
|
||||
} catch {
|
||||
$_ | select *
|
||||
}
|
||||
[System.Environment]::SetEnvironmentVariable('PATH',$Env:PATH+";${env:PGBIN}")
|
||||
$env:PGPASSWORD = 'root'
|
||||
psql -c 'ALTER SYSTEM SET hot_standby = on;' -U postgres
|
||||
psql -c 'ALTER SYSTEM SET wal_level = minimal;' -U postgres
|
||||
psql -c 'DROP DATABASE IF EXISTS phpbb_tests;' -U postgres
|
||||
psql -c 'create database phpbb_tests;' -U postgres
|
||||
Set-MpPreference -ExclusionPath "${env:PGDATA}" # Exclude PGDATA directory from Windows Defender
|
||||
Set-MpPreference -DisableRealtimeMonitoring $true
|
||||
- name: Run unit tests
|
||||
if: ${{ matrix.type == 'unit' }}
|
||||
run: |
|
||||
phpBB/vendor/bin/phpunit --configuration .github/phpunit-psql-windows-github.xml --verbose --stop-on-error --exclude-group functional
|
||||
- name: Run unit tests
|
||||
if: ${{ matrix.type == 'functional' }}
|
||||
run: |
|
||||
phpBB/vendor/bin/phpunit --configuration .github/phpunit-psql-windows-github.xml --verbose --stop-on-error --group functional
|
34
.gitignore
vendored
34
.gitignore
vendored
@@ -1,30 +1,54 @@
|
||||
*~
|
||||
/phpunit.xml
|
||||
# Excludes cache
|
||||
/phpBB/cache/*
|
||||
!/phpBB/cache/.htaccess
|
||||
!/phpBB/cache/index.html
|
||||
/phpBB/composer.phar
|
||||
|
||||
# Excludes user data
|
||||
/phpBB/config*.php*
|
||||
/phpBB/ext/*
|
||||
/phpBB/files/*
|
||||
/phpBB/images/avatars/gallery/*
|
||||
/phpBB/images/avatars/upload/*
|
||||
/phpBB/images/ranks/*
|
||||
/phpBB/install/schemas/schema.json
|
||||
/phpBB/store/*
|
||||
|
||||
# Excludes all custom langages
|
||||
/phpBB/language/*
|
||||
!/phpBB/language/en
|
||||
/phpBB/store/*
|
||||
|
||||
# Excludes all custom styles
|
||||
/phpBB/styles/*
|
||||
!/phpBB/styles/prosilver
|
||||
/phpBB/styles/prosilver/theme/*/
|
||||
!/phpBB/styles/prosilver/theme/en
|
||||
!/phpBB/styles/prosilver/theme/images
|
||||
!/phpBB/styles/all
|
||||
|
||||
# Excludes all custom env
|
||||
/phpBB/config/*
|
||||
!/phpBB/config/default
|
||||
!/phpBB/config/development
|
||||
!/phpBB/config/installer
|
||||
!/phpBB/config/production
|
||||
!/phpBB/config/test
|
||||
!/phpBB/config/.htaccess
|
||||
|
||||
# Excludes vendors
|
||||
/phpBB/vendor
|
||||
|
||||
# Excludes test / dev files
|
||||
/phpunit.xml
|
||||
/phpBB/composer.phar
|
||||
/tests/phpbb_unit_tests.sqlite*
|
||||
/tests/test_config*.php
|
||||
/tests/tmp/*
|
||||
/tests/vendor
|
||||
/vagrant/phpbb-install-config.yml
|
||||
.vagrant
|
||||
node_modules
|
||||
|
||||
# Excludes IDE / editors files
|
||||
*~
|
||||
.idea
|
||||
*.DS_Store*
|
||||
/.vscode
|
||||
|
52
.travis.yml
52
.travis.yml
@@ -1,52 +0,0 @@
|
||||
language: php
|
||||
dist: xenial
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- php: 7.1
|
||||
env: DB=none;NOTESTS=1
|
||||
- php: 7.1
|
||||
env: DB=mariadb
|
||||
- php: 7.1
|
||||
env: DB=postgres
|
||||
- php: 7.1
|
||||
env: DB=sqlite3
|
||||
- php: 7.1
|
||||
env: DB=mysqli;SLOWTESTS=1
|
||||
- php: 7.1
|
||||
env: DB=mysqli # MyISAM
|
||||
- php: 7.2
|
||||
env: DB=mysqli
|
||||
- php: 7.3
|
||||
env: DB=mysqli
|
||||
- php: 7.4snapshot
|
||||
env: DB=mysqli
|
||||
- php: nightly
|
||||
env: DB=mysqli
|
||||
allow_failures:
|
||||
- php: nightly
|
||||
fast_finish: true
|
||||
|
||||
services:
|
||||
- redis-server
|
||||
- postgresql
|
||||
- mysql
|
||||
- memcached
|
||||
|
||||
install:
|
||||
- travis/setup-phpbb.sh $DB $TRAVIS_PHP_VERSION $NOTESTS
|
||||
|
||||
before_script:
|
||||
- travis/setup-database.sh $DB $TRAVIS_PHP_VERSION $NOTESTS
|
||||
- travis/setup-ldap.sh $SLOWTESTS
|
||||
- phantomjs --webdriver=8910 > /dev/null &
|
||||
|
||||
script:
|
||||
- travis/phing-sniff.sh $DB $TRAVIS_PHP_VERSION $NOTESTS
|
||||
- travis/check-sami-parse-errors.sh $DB $TRAVIS_PHP_VERSION $NOTESTS
|
||||
- travis/check-image-icc-profiles.sh $DB $TRAVIS_PHP_VERSION $NOTESTS
|
||||
- travis/check-executable-files.sh $DB $TRAVIS_PHP_VERSION $NOTESTS ./
|
||||
- sh -c "if [ '$SLOWTESTS' != '1' -a '$DB' = 'mysqli' ]; then phpBB/vendor/bin/phpunit tests/lint_test.php; fi"
|
||||
- sh -c "if [ '$NOTESTS' != '1' -a '$SLOWTESTS' != '1' ]; then phpBB/vendor/bin/phpunit --configuration travis/phpunit-$DB-travis.xml --verbose --stop-on-error; fi"
|
||||
- sh -c "if [ '$SLOWTESTS' = '1' ]; then phpBB/vendor/bin/phpunit --configuration travis/phpunit-$DB-travis.xml --group slow; fi"
|
||||
- sh -c "set -x;if [ '$NOTESTS' = '1' -a '$TRAVIS_PULL_REQUEST' != 'false' ]; then git remote set-branches --add origin $TRAVIS_BRANCH && git fetch && git-tools/commit-msg-hook-range.sh origin/$TRAVIS_BRANCH..$TRAVIS_PULL_REQUEST_SHA; fi"
|
18
.vscode/launch.json
vendored
Normal file
18
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Debug phpBB",
|
||||
"type": "php",
|
||||
"request": "launch",
|
||||
"port": 9003,
|
||||
"pathMappings": {
|
||||
"/var/www/html": "${workspaceRoot}/phpBB/"
|
||||
},
|
||||
"log": true
|
||||
}
|
||||
]
|
||||
}
|
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"php.debug.ideKey": "VSCODE"
|
||||
}
|
60
README.md
60
README.md
@@ -1,42 +1,50 @@
|
||||
[](http://www.phpbb.com)
|
||||
|
||||
## ABOUT
|
||||
[<img src="phpBB/styles/all/imgs/svg/phpbb_logo_large_cosmic.svg" alt="phpBB" style="max-width:40%" width="400">](https://www.phpbb.com)
|
||||
|
||||
phpBB is a free open-source bulletin board written in PHP.
|
||||
|
||||
## COMMUNITY
|
||||
## 🧑🏻🤝🏻🧑🏽 Community
|
||||
|
||||
Get your copy of phpBB, find support and lots more on [phpBB.com](http://www.phpbb.com)! Discuss the development on [area51](http://area51.phpbb.com/phpBB/index.php).
|
||||
Get your copy of phpBB, find support and lots more on [phpBB.com](https://www.phpbb.com). Discuss the development on [area51](https://area51.phpbb.com/phpBB/index.php).
|
||||
|
||||
## INSTALLING DEPENDENCIES
|
||||
## 👨💻 Contribute
|
||||
|
||||
To be able to run an installation from the repo (and not from a pre-built package) you need to run the following commands to install phpBB's dependencies.
|
||||
|
||||
cd phpBB
|
||||
php ../composer.phar install
|
||||
|
||||
|
||||
## CONTRIBUTE
|
||||
|
||||
1. [Create an account on phpBB.com](http://www.phpbb.com/community/ucp.php?mode=register)
|
||||
2. [Create a ticket (unless there already is one)](http://tracker.phpbb.com/secure/CreateIssue!default.jspa)
|
||||
1. [Create an account on phpBB.com](https://www.phpbb.com/community/ucp.php?mode=register)
|
||||
2. [Create a ticket (unless there already is one)](https://tracker.phpbb.com/secure/CreateIssue!default.jspa)
|
||||
3. Read our [Coding guidelines](https://area51.phpbb.com/docs/dev/development/coding_guidelines.html) and [Git Contribution Guidelines](https://area51.phpbb.com/docs/dev/development/git.html)
|
||||
4. Send us a pull request
|
||||
|
||||
## VAGRANT
|
||||
### 🏗️ Setting up a development build of phpBB
|
||||
|
||||
Read our [Vagrant documentation](phpBB/docs/vagrant.md) to find out how to use Vagrant to develop and contribute to phpBB.
|
||||
To run an installation from the repo (and not from a pre-built package) on a local server, run the following commands:
|
||||
|
||||
## AUTOMATED TESTING
|
||||
- Fork phpbb/phpbb to your GitHub account, then create a local clone of it:
|
||||
```
|
||||
git clone https://github.com/your_github_name/phpbb.git
|
||||
```
|
||||
- Install phpBB's dependencies (from the root of your phpbb repo):
|
||||
```
|
||||
cd phpBB
|
||||
php ../composer.phar install
|
||||
```
|
||||
|
||||
We have unit and functional tests in order to prevent regressions. You can view the bamboo continuous integration [here](https://bamboo.phpbb.com) or check our travis builds below:
|
||||
Alternatively, you can read:
|
||||
|
||||
Travis CI | AppVeyor | Branch | Description
|
||||
---------- | -------- | ------- | -----------
|
||||
[](http://travis-ci.org/phpbb/phpbb) | [](https://ci.appveyor.com/project/phpBB/phpbb/branch/master) | **master** | Latest development version
|
||||
[](http://travis-ci.org/phpbb/phpbb) | [](https://ci.appveyor.com/project/phpBB/phpbb/branch/3.3.x) | **3.3.x** | Development of version 3.3.x
|
||||
[](http://travis-ci.org/phpbb/phpbb) | [](https://ci.appveyor.com/project/phpBB/phpbb/branch/3.2.x) | **3.2.x** | Development of version 3.2.x
|
||||
* Our [Vagrant documentation](phpBB/docs/vagrant.md) to find out how to use Vagrant to develop and contribute to phpBB.
|
||||
* Our [GitHub Codespaces documentation](phpBB/docs/codespaces.md) to learn about phpBB's cloud-based development environment.
|
||||
|
||||
## LICENSE
|
||||
## 📓 Documentation
|
||||
|
||||
phpBB's [Development Documentation](https://area51.phpbb.com/docs/dev/index.html) contains all the information you'll need to learn about developing for phpBB's core, extensions and automated testing.
|
||||
|
||||
## 🔬 Automated Testing
|
||||
|
||||
We have unit and functional tests in order to prevent regressions. You can view the bamboo continuous integration [here](https://bamboo.phpbb.com) or check our GitHub Actions below:
|
||||
|
||||
Branch | Description | GitHub Actions |
|
||||
------- | ----------- | -------------- |
|
||||
**master** | Latest development version |  |
|
||||
**3.3.x** | Development of version 3.3.x |  |
|
||||
|
||||
## 📜 License
|
||||
|
||||
[GNU General Public License v2](http://opensource.org/licenses/gpl-2.0.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.3.0-RC1" />
|
||||
<property name="prevversion" value="3.2.8" />
|
||||
<property name="olderversions" value="3.1.0, 3.1.1, 3.1.2, 3.1.3, 3.1.4, 3.1.5, 3.1.6, 3.1.7, 3.1.7-pl1, 3.1.8, 3.1.9, 3.1.10, 3.1.11, 3.1.12, 3.2.0-a1, 3.2.0-a2, 3.2.0-b1, 3.2.0-b2, 3.2.0-RC1, 3.2.0-RC2, 3.2.0, 3.2.1, 3.2.2, 3.2.3, 3.2.4, 3.2.5, 3.2.6, 3.2.7, 3.3.0-b1, 3.3.0-b2" />
|
||||
<property name="newversion" value="3.3.14-RC1" />
|
||||
<property name="prevversion" value="3.3.13" />
|
||||
<property name="olderversions" value="3.1.0, 3.1.1, 3.1.2, 3.1.3, 3.1.4, 3.1.5, 3.1.6, 3.1.7, 3.1.7-pl1, 3.1.8, 3.1.9, 3.1.10, 3.1.11, 3.1.12, 3.2.0, 3.2.1, 3.2.2, 3.2.3, 3.2.4, 3.2.5, 3.2.6, 3.2.7, 3.2.8, 3.2.9, 3.2.10, 3.2.11, 3.3.0, 3.3.1, 3.3.2, 3.3.3, 3.3.4, 3.3.5, 3.3.6, 3.3.7, 3.3.8, 3.3.9, 3.3.10, 3.3.11, 3.3.12" />
|
||||
<!-- no configuration should be needed beyond this point -->
|
||||
|
||||
<property name="oldversions" value="${olderversions}, ${prevversion}" />
|
||||
@@ -128,13 +128,13 @@
|
||||
<!-- Builds docs for current branch into build/api/output/master -->
|
||||
<target name="docs">
|
||||
<exec dir="."
|
||||
command="phpBB/vendor/bin/sami.php update build/sami-checkout.conf.php"
|
||||
command="./doctum.phar update build/doctum-checkout.conf.php"
|
||||
passthru="true" />
|
||||
</target>
|
||||
<!-- Builds docs for multiple branches/tags into build/api/output/$branch -->
|
||||
<target name="docs-all">
|
||||
<exec dir="."
|
||||
command="phpBB/vendor/bin/sami.php update build/sami-all.conf.php"
|
||||
command="./doctum.phar update build/doctum-all.conf.php"
|
||||
passthru="true" />
|
||||
</target>
|
||||
|
||||
@@ -181,6 +181,7 @@
|
||||
|
||||
<!-- create an empty config.php file (not for diffs) -->
|
||||
<touch file="build/new_version/phpBB3/config.php" />
|
||||
<copy file="build/new_version/phpBB3/phpbb/.htaccess" tofile="build/new_version/phpBB3/vendor/.htaccess" />
|
||||
|
||||
</target>
|
||||
|
||||
@@ -362,6 +363,8 @@
|
||||
<chmod mode="0777" file="${dir}/store" />
|
||||
<chmod mode="0777" file="${dir}/files" />
|
||||
<chmod mode="0777" file="${dir}/images/avatars/upload" />
|
||||
<!-- set permissions of executable scripts to 755 -->
|
||||
<chmod mode="0755" file="${dir}/bin/phpbbcli.php" />
|
||||
</target>
|
||||
|
||||
<target name="clean-vendor-dir">
|
||||
|
@@ -1,16 +1,16 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
if ($_SERVER['argc'] != 2)
|
||||
{
|
||||
@@ -18,40 +18,54 @@ if ($_SERVER['argc'] != 2)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$fixVersion = $_SERVER['argv'][1];
|
||||
if ($_SERVER['argv'][1] == '--stdin')
|
||||
{
|
||||
$stdIn = file_get_contents('php://stdin');
|
||||
// XML output from tracker can be directly piped to this script using:
|
||||
// cat tracker_output.xml | php build/build_changelog.php --stdin
|
||||
$xml = simplexml_load_string($stdIn);
|
||||
}
|
||||
else
|
||||
{
|
||||
$fixVersion = $_SERVER['argv'][1];
|
||||
|
||||
$query = 'project IN (PHPBB3, SECURITY)
|
||||
AND resolution = Fixed
|
||||
AND fixVersion = "' . $fixVersion . '"
|
||||
AND status IN ("Unverified Fix", Closed)';
|
||||
$query = 'project IN (PHPBB3, SECURITY)
|
||||
AND resolution = Fixed
|
||||
AND fixVersion = "' . $fixVersion . '"
|
||||
AND status IN ("Unverified Fix", Closed)';
|
||||
|
||||
$url = 'http://tracker.phpbb.com/sr/jira.issueviews:searchrequest-xml/temp/SearchRequest.xml?jqlQuery=' . urlencode($query) . '&tempMax=1000';
|
||||
$xml = simplexml_load_string(file_get_contents($url));
|
||||
$url = 'https://tracker.phpbb.com/sr/jira.issueviews:searchrequest-xml/temp/SearchRequest.xml?jqlQuery=' . urlencode($query) . '&tempMax=1000';
|
||||
$xml = simplexml_load_string(file_get_contents($url));
|
||||
}
|
||||
|
||||
$types = [];
|
||||
foreach ($xml->xpath('//item') as $item)
|
||||
{
|
||||
$key = (string) $item->key;
|
||||
|
||||
$keyUrl = 'http://tracker.phpbb.com/browse/' . $key;
|
||||
$keyUrl = 'https://tracker.phpbb.com/browse/' . $key;
|
||||
$keyLink = '<a href="' . $keyUrl . '">' . $key . '</a>';
|
||||
|
||||
$value = str_replace($key, $keyLink, htmlspecialchars($item->title));
|
||||
$value = str_replace($key, $keyLink, htmlspecialchars($item->title, ENT_COMPAT));
|
||||
$value = str_replace(']', '] -', $value);
|
||||
|
||||
$types[(string) $item->type][$key] = $value;
|
||||
}
|
||||
|
||||
ksort($types);
|
||||
foreach ($types as $type => $tickets)
|
||||
if (count($types))
|
||||
{
|
||||
echo "<h4>$type</h4>\n";
|
||||
echo "<ul>\n";
|
||||
|
||||
uksort($tickets, 'strnatcasecmp');
|
||||
|
||||
foreach ($tickets as $ticket)
|
||||
ksort($types);
|
||||
foreach ($types as $type => $tickets)
|
||||
{
|
||||
echo "<li>$ticket</li>\n";
|
||||
echo "<h4>$type</h4>\n";
|
||||
echo "<ul>\n";
|
||||
|
||||
uksort($tickets, 'strnatcasecmp');
|
||||
|
||||
foreach ($tickets as $ticket)
|
||||
{
|
||||
echo "<li>$ticket</li>\n";
|
||||
}
|
||||
echo "</ul>\n";
|
||||
}
|
||||
echo "</ul>\n";
|
||||
}
|
||||
|
@@ -43,10 +43,10 @@ class build_package
|
||||
$_before = $this->versions[count($this->versions) - 2];
|
||||
|
||||
$this->locations = array(
|
||||
'new_version' => dirname(dirname(__FILE__)) . '/phpBB/',
|
||||
'old_versions' => dirname(__FILE__) . '/old_versions/',
|
||||
'root' => dirname(__FILE__) . '/',
|
||||
'package_dir' => dirname(__FILE__) . '/new_version/'
|
||||
'new_version' => dirname(__DIR__) . '/phpBB/',
|
||||
'old_versions' => __DIR__ . '/old_versions/',
|
||||
'root' => __DIR__ . '/',
|
||||
'package_dir' => __DIR__ . '/new_version/'
|
||||
);
|
||||
|
||||
$this->package_infos = array(
|
||||
|
@@ -0,0 +1,57 @@
|
||||
<?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 PHP_CodeSniffer\Files\File;
|
||||
use PHP_CodeSniffer\Sniffs\Sniff;
|
||||
|
||||
/**
|
||||
* Checks that the visibility qualifiers are placed after the static keyword
|
||||
* according to the coding guidelines
|
||||
*/
|
||||
class phpbb_Sniffs_ControlStructures_StaticKeywordSniff implements Sniff
|
||||
{
|
||||
/**
|
||||
* Registers the tokens that this sniff wants to listen for.
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
return [
|
||||
T_STATIC,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes this test, when one of its tokens is encountered.
|
||||
*
|
||||
* @param File $phpcsFile The file being scanned.
|
||||
* @param int $stackPtr The position of the current token in the stack passed in $tokens.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function process(File $phpcsFile, $stackPtr)
|
||||
{
|
||||
$tokens = $phpcsFile->getTokens();
|
||||
|
||||
$disallowed_after_tokens = [
|
||||
T_PUBLIC,
|
||||
T_PROTECTED,
|
||||
T_PRIVATE,
|
||||
];
|
||||
|
||||
if (in_array($tokens[$stackPtr + 2]['code'], $disallowed_after_tokens))
|
||||
{
|
||||
$error = 'Access specifier (e.g. public) should not follow static scope attribute. Encountered "' . $tokens[$stackPtr + 2]['content'] . '" after static';
|
||||
$phpcsFile->addWarning($error, $stackPtr, 'InvalidStaticFunctionDeclaration', [], 1);
|
||||
}
|
||||
}
|
||||
}
|
@@ -19,21 +19,34 @@ use PHP_CodeSniffer\Sniffs\Sniff;
|
||||
*/
|
||||
class phpbb_Sniffs_Namespaces_UnusedUseSniff implements Sniff
|
||||
{
|
||||
const FIND = [
|
||||
T_NS_SEPARATOR,
|
||||
T_STRING,
|
||||
T_WHITESPACE,
|
||||
];
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
return array(T_USE);
|
||||
return [T_USE];
|
||||
}
|
||||
|
||||
protected function check(File $phpcsFile, $found_name, $full_name, $short_name, $line)
|
||||
protected function check(File $phpcsFile, $found_name, $full_name, $short_name, $stack_pointer)
|
||||
{
|
||||
$found_name_normalized = ltrim($found_name, '\\');
|
||||
$full_name = ltrim($full_name, '\\');
|
||||
|
||||
if ($found_name === $full_name)
|
||||
$is_global = ($full_name === $short_name);
|
||||
$unnecessarily_fully_qualified = ($is_global)
|
||||
? ($found_name_normalized !== $found_name && $found_name_normalized === $short_name)
|
||||
: ($found_name_normalized === $full_name);
|
||||
|
||||
if ($unnecessarily_fully_qualified)
|
||||
{
|
||||
$error = 'Either use statement or full name must be used.';
|
||||
$phpcsFile->addError($error, $line, 'FullName');
|
||||
$phpcsFile->addError($error, $stack_pointer, 'FullName');
|
||||
}
|
||||
|
||||
if ($found_name === $short_name)
|
||||
@@ -58,27 +71,50 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements Sniff
|
||||
|
||||
$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);
|
||||
$class_name_end = $phpcsFile->findNext(self::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));
|
||||
$name_short = $tokens[$alias_position]['content'];
|
||||
$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'];
|
||||
$name_full = $phpcsFile->getTokensAsString($class_name_start, ($class_name_end - $class_name_start));
|
||||
$name_short = $tokens[$class_name_end - 1]['content'];
|
||||
}
|
||||
|
||||
if ($tokens[$class_name_start]['content'] === 'function'
|
||||
&& $tokens[$class_name_start + 1]['code'] === T_WHITESPACE)
|
||||
{
|
||||
$class_name_start += 2;
|
||||
$name_full = $phpcsFile->getTokensAsString(
|
||||
$class_name_start,
|
||||
($class_name_end - $class_name_start - (int) ($aliasing_as_position !== false))
|
||||
);
|
||||
$ok = $this->findFunctionUsage($phpcsFile, $stackPtr, $tokens, $name_full, $name_short);
|
||||
}
|
||||
else
|
||||
{
|
||||
$ok = $this->findClassUsage($phpcsFile, $stackPtr, $tokens, $name_full, $name_short);
|
||||
}
|
||||
|
||||
if ($name_full[0] === '\\')
|
||||
{
|
||||
$phpcsFile->addError("There must not be a leading '\\' in use statements.", $stackPtr, 'Malformed');
|
||||
}
|
||||
|
||||
if (!$ok)
|
||||
{
|
||||
$error = 'There must not be unused USE statements.';
|
||||
$phpcsFile->addError($error, $stackPtr, 'Unused');
|
||||
}
|
||||
}
|
||||
|
||||
private function findClassUsage(File $phpcsFile, $stackPtr, $tokens, $class_name_full, $class_name_short)
|
||||
{
|
||||
$ok = false;
|
||||
|
||||
// Checks in simple statements (new, instanceof and extends)
|
||||
@@ -95,11 +131,11 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements Sniff
|
||||
continue;
|
||||
}
|
||||
|
||||
$simple_class_name_end = $phpcsFile->findNext($find, ($simple_statement + 1), null, true);
|
||||
$simple_class_name_end = $phpcsFile->findNext(self::FIND, ($simple_statement + 1), null, true);
|
||||
|
||||
$simple_class_name = trim($phpcsFile->getTokensAsString($simple_class_name_start, ($simple_class_name_end - $simple_class_name_start)));
|
||||
|
||||
$ok = $this->check($phpcsFile, $simple_class_name, $class_name_full, $class_name_short, $simple_statement) ? true : $ok;
|
||||
$ok = $this->check($phpcsFile, $simple_class_name, $class_name_full, $class_name_short, $simple_statement) || $ok;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,12 +145,12 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements Sniff
|
||||
{
|
||||
$old_paamayim_nekudotayim = $paamayim_nekudotayim;
|
||||
|
||||
$paamayim_nekudotayim_class_name_start = $phpcsFile->findPrevious($find, $paamayim_nekudotayim - 1, null, true);
|
||||
$paamayim_nekudotayim_class_name_start = $phpcsFile->findPrevious(self::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)));
|
||||
|
||||
$ok = $this->check($phpcsFile, $paamayim_nekudotayim_class_name, $class_name_full, $class_name_short, $paamayim_nekudotayim) ? true : $ok;
|
||||
$ok = $this->check($phpcsFile, $paamayim_nekudotayim_class_name, $class_name_full, $class_name_short, $paamayim_nekudotayim) || $ok;
|
||||
}
|
||||
|
||||
// Checks in implements
|
||||
@@ -129,11 +165,11 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements Sniff
|
||||
$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_end = $phpcsFile->findNext(self::FIND, ($implemented_class - 1), null, true);
|
||||
|
||||
$implements_class_name = trim($phpcsFile->getTokensAsString($implements_class_name_start, ($implements_class_name_end - $implements_class_name_start)));
|
||||
|
||||
$ok = $this->check($phpcsFile, $implements_class_name, $class_name_full, $class_name_short, $implements) ? true : $ok;
|
||||
$ok = $this->check($phpcsFile, $implements_class_name, $class_name_full, $class_name_short, $implements) || $ok;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,7 +177,7 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements Sniff
|
||||
while (($docblock = $phpcsFile->findNext(T_DOC_COMMENT_CLOSE_TAG, ($old_docblock + 1))) !== false)
|
||||
{
|
||||
$old_docblock = $docblock;
|
||||
$ok = $this->checkDocblock($phpcsFile, $docblock, $tokens, $class_name_full, $class_name_short) ? true : $ok;
|
||||
$ok = $this->checkDocblock($phpcsFile, $docblock, $tokens, $class_name_full, $class_name_short) || $ok;
|
||||
}
|
||||
|
||||
// Checks in type hinting
|
||||
@@ -154,7 +190,7 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements Sniff
|
||||
$params = $phpcsFile->getMethodParameters($function_declaration);
|
||||
foreach ($params as $param)
|
||||
{
|
||||
$ok = $this->check($phpcsFile, $param['type_hint'], $class_name_full, $class_name_short, $function_declaration) ? true : $ok;
|
||||
$ok = $this->check($phpcsFile, $param['type_hint'], $class_name_full, $class_name_short, $function_declaration) || $ok;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,18 +201,106 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements Sniff
|
||||
$old_catch = $catch;
|
||||
|
||||
$caught_class_name_start = $phpcsFile->findNext(array(T_NS_SEPARATOR, T_STRING), $catch + 1);
|
||||
$caught_class_name_end = $phpcsFile->findNext($find, $caught_class_name_start + 1, null, true);
|
||||
$caught_class_name_end = $phpcsFile->findNext(self::FIND, $caught_class_name_start + 1, null, true);
|
||||
|
||||
$caught_class_name = trim($phpcsFile->getTokensAsString($caught_class_name_start, ($caught_class_name_end - $caught_class_name_start)));
|
||||
|
||||
$ok = $this->check($phpcsFile, $caught_class_name, $class_name_full, $class_name_short, $catch) ? true : $ok;
|
||||
$ok = $this->check($phpcsFile, $caught_class_name, $class_name_full, $class_name_short, $catch) || $ok;
|
||||
}
|
||||
|
||||
if (!$ok)
|
||||
$old_use = $stackPtr;
|
||||
while (($use = $phpcsFile->findNext(T_USE, ($old_use + 1))) !== false)
|
||||
{
|
||||
$error = 'There must not be unused USE statements.';
|
||||
$phpcsFile->addError($error, $stackPtr, 'Unused');
|
||||
$old_use = $use;
|
||||
|
||||
// Needs to be inside a class and must not be inside a function scope.
|
||||
if (!$phpcsFile->hasCondition($use, [T_CLASS, T_TRAIT]) || $phpcsFile->hasCondition($use, T_FUNCTION))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$next = $phpcsFile->findNext(T_WHITESPACE, ($use + 1), null, true, null, true);
|
||||
if ($tokens[$next]['code'] === T_OPEN_PARENTHESIS)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$class_name_start = $phpcsFile->findNext(array(T_NS_SEPARATOR, T_STRING), $use + 1, null, false, null, true);
|
||||
$class_name_end = $phpcsFile->findNext(self::FIND, $class_name_start + 1, null, true, null, true);
|
||||
$found_name = trim($phpcsFile->getTokensAsString($class_name_start, ($class_name_end - $class_name_start)));
|
||||
|
||||
$ok = $this->check($phpcsFile, $found_name, $class_name_full, $class_name_short, $use) || $ok;
|
||||
}
|
||||
|
||||
return $ok;
|
||||
}
|
||||
|
||||
private function findFunctionUsage(File $phpcsFile, $stackPtr, $tokens, $name_full, $name_short)
|
||||
{
|
||||
$ok = false;
|
||||
$position = $phpcsFile->findNext(T_OPEN_PARENTHESIS, $stackPtr + 1);
|
||||
while ($position !== false)
|
||||
{
|
||||
$function_name_end = $position;
|
||||
$found_start = 1 + $phpcsFile->findPrevious(
|
||||
[T_NS_SEPARATOR, T_STRING, T_WHITESPACE],
|
||||
$function_name_end - 1,
|
||||
null,
|
||||
true
|
||||
);
|
||||
|
||||
$position = $phpcsFile->findNext(T_OPEN_PARENTHESIS, $position + 1);
|
||||
if ($found_start === null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$function_name_start = $found_start;
|
||||
|
||||
// Trim the output.
|
||||
while ($tokens[$function_name_start]['code'] === T_WHITESPACE && $function_name_start < $function_name_end)
|
||||
{
|
||||
++$function_name_start;
|
||||
}
|
||||
|
||||
while ($tokens[$function_name_end]['code'] === T_WHITESPACE && $function_name_end > $function_name_start)
|
||||
{
|
||||
--$function_name_end;
|
||||
}
|
||||
|
||||
$function_name_length = $function_name_end - $function_name_start;
|
||||
|
||||
// Filter out control structures, built in type constructors, etc.
|
||||
if ($function_name_length <= 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// This doesn't seem to be valid PHP, where is the opening tag?
|
||||
if ($found_start === 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$previous_token = $found_start - 1;
|
||||
$filter = [
|
||||
T_FUNCTION, // Function declaration
|
||||
T_OBJECT_OPERATOR, // Method call
|
||||
T_DOUBLE_COLON, // Static method call
|
||||
T_NEW, // Constructors
|
||||
];
|
||||
|
||||
// Filter out calls to methods and function declarations.
|
||||
if (in_array($tokens[$previous_token]['code'], $filter))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$function_name = $phpcsFile->getTokensAsString($function_name_start, $function_name_length);
|
||||
$ok = $this->check($phpcsFile, $function_name, $name_full, $name_short, $function_name_start) || $ok;
|
||||
}
|
||||
|
||||
return $ok;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -247,7 +371,7 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements Sniff
|
||||
$classes = explode('|', str_replace('[]', '', $classes));
|
||||
foreach ($classes as $class)
|
||||
{
|
||||
$ok = $this->check($phpcsFile, $class, $class_name_full, $class_name_short, $tokens[$tag + 2]['line']) ? true : $ok;
|
||||
$ok = $this->check($phpcsFile, $class, $class_name_full, $class_name_short, $tag + 2) || $ok;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -89,4 +89,7 @@
|
||||
<!-- There MUST be one space between control structure and opening parenthesis -->
|
||||
<rule ref="./phpbb/Sniffs/ControlStructures/OpeningParenthesisSniff.php" />
|
||||
|
||||
<!-- Static qualifier MUST be placed before the visibility qualifiers. -->
|
||||
<rule ref="./phpbb/Sniffs/ControlStructures/StaticKeywordSniff.php" />
|
||||
|
||||
</ruleset>
|
||||
|
21
build/doctum-all.conf.php
Normal file
21
build/doctum-all.conf.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
require __DIR__ . '/doctum-checkout.conf.php';
|
||||
|
||||
$config['versions'] = Doctum\Version\GitVersionCollection::create(__DIR__ . '/../')
|
||||
->add('3.3.x')
|
||||
->add('master')
|
||||
;
|
||||
|
||||
return new Doctum\Doctum($iterator, $config);
|
31
build/doctum-checkout.conf.php
Normal file
31
build/doctum-checkout.conf.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
$iterator = Symfony\Component\Finder\Finder::create()
|
||||
->files()
|
||||
->name('*.php')
|
||||
->in(__DIR__ . '/../phpBB/')
|
||||
->notPath('#^cache/#')
|
||||
->notPath('#^develop/#')
|
||||
->notPath('#^ext/#')
|
||||
->notPath('#^vendor/#')
|
||||
->notPath('data');
|
||||
|
||||
// This variable will be used and changed in doctum-all.conf.php
|
||||
$config = [
|
||||
'title' => 'phpBB API Documentation',
|
||||
'build_dir' => __DIR__ . '/api/output/%version%',
|
||||
'cache_dir' => __DIR__ . '/api/cache/%version%',
|
||||
];
|
||||
|
||||
return new Doctum\Doctum($iterator, $config);
|
@@ -84,7 +84,7 @@ foreach ($older_verions as $version)
|
||||
'phpBB ' . $version . ' to ' . $current_version . ' Update Package',
|
||||
'phpBB-' . $version . '_to_' . $current_version,
|
||||
'update',
|
||||
'update',
|
||||
'advanced_update',
|
||||
$version
|
||||
);
|
||||
}
|
||||
|
@@ -1,32 +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.
|
||||
*
|
||||
*/
|
||||
|
||||
require __DIR__ . '/sami-checkout.conf.php';
|
||||
|
||||
$config['versions'] = Sami\Version\GitVersionCollection::create(__DIR__ . '/../')
|
||||
/*
|
||||
This would be nice, but currently causes various problems that need
|
||||
debugging.
|
||||
->addFromTags('release-3.0.*')
|
||||
->add('3.0.x', '3.0-next (olympus)')
|
||||
->addFromTags('release-3.1.*')
|
||||
->add('3.1.x', '3.1-next (ascraeus)')
|
||||
->add('master')
|
||||
*/
|
||||
->add('3.0.x')
|
||||
->add('3.1.x')
|
||||
->add('3.2.x')
|
||||
->add('master')
|
||||
;
|
||||
|
||||
return new Sami\Sami($iterator, $config);
|
@@ -1,44 +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.
|
||||
*
|
||||
*/
|
||||
|
||||
// Prevent 'Class "acm" does not exist.' exception on removeClass().
|
||||
class PhpbbArrayStore extends Sami\Store\ArrayStore
|
||||
{
|
||||
public function removeClass(Sami\Project $project, $name)
|
||||
{
|
||||
unset($this->classes[$name]);
|
||||
}
|
||||
}
|
||||
|
||||
$iterator = Symfony\Component\Finder\Finder::create()
|
||||
->files()
|
||||
->name('*.php')
|
||||
->in(__DIR__ . '/../phpBB/')
|
||||
->notPath('#^cache/#')
|
||||
->notPath('#^develop/#')
|
||||
->notPath('#^ext/#')
|
||||
->notPath('#^vendor/#')
|
||||
->notPath('data')
|
||||
;
|
||||
|
||||
$config = array(
|
||||
'theme' => 'enhanced',
|
||||
'title' => 'phpBB API Documentation',
|
||||
'build_dir' => __DIR__.'/api/output/%version%',
|
||||
'cache_dir' => __DIR__.'/api/cache/%version%',
|
||||
'default_opened_level' => 2,
|
||||
// Do not use JsonStore. See https://github.com/fabpot/Sami/issues/79
|
||||
'store' => new PhpbbArrayStore,
|
||||
);
|
||||
|
||||
return new Sami\Sami($iterator, $config);
|
54
build/update_stylesheet_querystrings.php
Normal file
54
build/update_stylesheet_querystrings.php
Normal file
@@ -0,0 +1,54 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
if (php_sapi_name() !== 'cli')
|
||||
{
|
||||
die("This program must be run from the command line.\n");
|
||||
}
|
||||
|
||||
if (version_compare(PHP_VERSION, '7.1.3', '<'))
|
||||
{
|
||||
die('update_stylesheet_querystrings.php requires at least PHP 7.1.3');
|
||||
}
|
||||
|
||||
// Usage: "$ php build/update_stylesheet_querystrings.php"
|
||||
$targets = [dirname(dirname(__FILE__)) . '/phpBB/styles/prosilver/theme/stylesheet.css'];
|
||||
|
||||
array_map('patch_glob', $targets);
|
||||
|
||||
function patch_glob($glob): void
|
||||
{
|
||||
array_map('patch_file', glob($glob));
|
||||
}
|
||||
|
||||
function patch_file(string $filepath): void
|
||||
{
|
||||
$file = file_get_contents($filepath);
|
||||
$old = $file;
|
||||
$new = preg_replace_callback(
|
||||
'(^@import\\s+url\\([\'"](?<basename>\\w++\\.css)\\?\\K(?:hash|v)=[^\'"]++)m',
|
||||
function ($match) use ($filepath)
|
||||
{
|
||||
$path = dirname($filepath) . DIRECTORY_SEPARATOR . $match['basename'];
|
||||
$hash = sprintf('%08x', crc32(file_get_contents($path)));
|
||||
|
||||
return 'hash=' . $hash;
|
||||
},
|
||||
$old
|
||||
);
|
||||
|
||||
if ($new !== $old)
|
||||
{
|
||||
file_put_contents($filepath, $new);
|
||||
}
|
||||
}
|
BIN
composer.phar
BIN
composer.phar
Binary file not shown.
BIN
doctum.phar
Executable file
BIN
doctum.phar
Executable file
Binary file not shown.
@@ -24,7 +24,17 @@ COMMIT_MSG_HOOK_FATAL=$(git config --bool phpbb.hooks.commit-msg.fatal 2> /dev/n
|
||||
git config phpbb.hooks.commit-msg.fatal true
|
||||
|
||||
EXIT_STATUS=0
|
||||
for COMMIT_HASH in $(git rev-list --no-merges "$COMMIT_RANGE")
|
||||
|
||||
COMMIT_HASHES=$(git rev-list --no-merges "$COMMIT_RANGE")
|
||||
|
||||
# If any message have been returned instead of commit hashes list
|
||||
# send a non-zero exit status upstream.
|
||||
if ! [[ "$COMMIT_HASHES" =~ ^[0-9a-f]{5,40} ]]
|
||||
then
|
||||
EXIT_STATUS=1
|
||||
fi
|
||||
|
||||
for COMMIT_HASH in $COMMIT_HASHES
|
||||
do
|
||||
echo "Inspecting commit message of commit $COMMIT_HASH"
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# A hook to check syntax of a phpBB3 commit message, per:
|
||||
# * <http://wiki.phpbb.com/display/DEV/Git>
|
||||
# * <https://area51.phpbb.com/docs/dev/master/development/git.html>
|
||||
# * <http://area51.phpbb.com/phpBB/viewtopic.php?p=209919#p209919>
|
||||
#
|
||||
# This is a commit-msg hook.
|
||||
@@ -224,7 +224,7 @@ do
|
||||
"footer")
|
||||
err=$ERR_FOOTER;
|
||||
# Each ticket is on its own line
|
||||
echo "$line" | grep -Eq "^PHPBB3-[0-9]+$";
|
||||
echo "$line" | grep -Eq "^PHPBB3?-[0-9]+$";
|
||||
;;
|
||||
"eof")
|
||||
err=$ERR_EOF;
|
||||
@@ -356,7 +356,7 @@ echo "$expecting" | grep -q "eof" || (
|
||||
# Check the branch ticket is mentioned, doesn't make sense otherwise
|
||||
if [ $ticket -gt 0 ]
|
||||
then
|
||||
echo "$tickets" | grep -Eq "\bPHPBB3-$ticket\b" || (
|
||||
echo "$tickets" | grep -Eq "\bPHPBB3?-$ticket\b" || (
|
||||
complain "Ticket ID [$ticket] of branch missing from list of tickets:" >&2;
|
||||
complain "$tickets" | sed 's/ /\n/g;s/^/* /g' >&2;
|
||||
quit $ERR_FOOTER;
|
||||
|
@@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
#
|
||||
# A hook to add [$branch] to the beginning of a commit message
|
||||
# if certain conditions are met.
|
||||
@@ -31,12 +31,25 @@ branch="$(echo "$branch" | sed "s/refs\/heads\///g")"
|
||||
if [ "$2" = "" ]
|
||||
then
|
||||
tail="";
|
||||
ticket_id=$(sed -E 's/(ticket\/)(security\/)?([0-9]+)(.+$)?/\3/gm;t;d' <<< "$branch");
|
||||
branch_title=$(sed -E 's/(ticket\/)(security\/)?([0-9]+)(.+$)?/\1\2\3/gm;t;d' <<< "$branch");
|
||||
|
||||
# Branch is prefixed with 'ticket/', append ticket ID to message
|
||||
if [ "$branch" != "${branch##ticket/}" ];
|
||||
# Fall back to branch name if no ticket ID
|
||||
if [ -z "$branch_title" ];
|
||||
then
|
||||
tail="$(printf "\n\nPHPBB3-${branch##ticket/}")";
|
||||
branch_title="$branch";
|
||||
fi
|
||||
|
||||
echo "[$branch] $tail$(cat "$1")" > "$1"
|
||||
if [ "security/" = "$(sed -E 's/(ticket\/)(security\/)?([0-9]+)(.+$)?/\2/gm;t;d' <<< "$branch")" ];
|
||||
then
|
||||
tail="$(printf '\n\nSECURITY-%s' "$ticket_id")";
|
||||
else
|
||||
# Branch is prefixed with 'ticket/', append ticket ID to message
|
||||
if [ "$branch" != "${branch##ticket/}" ];
|
||||
then
|
||||
tail="$(printf '\n\nPHPBB-%s' "$ticket_id")";
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "[$branch_title] $tail$(cat "$1")" > "$1"
|
||||
fi
|
||||
|
@@ -61,8 +61,8 @@ $template->set_custom_style(array(
|
||||
),
|
||||
), $phpbb_admin_path . 'style');
|
||||
|
||||
$template->assign_var('T_ASSETS_PATH', $phpbb_root_path . 'assets');
|
||||
$template->assign_var('T_TEMPLATE_PATH', $phpbb_admin_path . 'style');
|
||||
$template->assign_var('T_ASSETS_PATH', $phpbb_path_helper->update_web_root_path($phpbb_root_path . 'assets'));
|
||||
$template->assign_var('T_TEMPLATE_PATH', $phpbb_path_helper->update_web_root_path($phpbb_root_path . 'style'));
|
||||
|
||||
// Instantiate new module
|
||||
$module = new p_master();
|
||||
|
@@ -29,7 +29,7 @@
|
||||
|
||||
<!-- BEGIN upload -->
|
||||
:: {upload.FILE_INFO}<br />
|
||||
<!-- IF upload.S_DENIED --><span class="error">{upload.DENIED}</span><!-- ELSEIF upload.ERROR_MSG --><span class="error">{upload.ERROR_MSG}</span><!-- ELSE --><span class="success">{L_SUCCESSFULLY_UPLOADED}</span><!-- ENDIF -->
|
||||
<!-- IF upload.S_DENIED --><span class="error">{upload.L_DENIED}</span><!-- ELSEIF upload.ERROR_MSG --><span class="error">{upload.ERROR_MSG}</span><!-- ELSE --><span class="success">{L_SUCCESSFULLY_UPLOADED}</span><!-- ENDIF -->
|
||||
<br /><br />
|
||||
<!-- END upload -->
|
||||
|
||||
@@ -50,16 +50,21 @@
|
||||
<dl>
|
||||
<dt><label for="{options.KEY}">{options.TITLE}{L_COLON}</label><!-- IF options.S_EXPLAIN --><br /><span>{options.TITLE_EXPLAIN}</span><!-- ENDIF --></dt>
|
||||
<dd>{options.CONTENT}</dd>
|
||||
{% if (options.KEY == 'allow_attachments' and S_EMPTY_POST_GROUPS) or (options.KEY == 'allow_pm_attach' and S_EMPTY_PM_GROUPS) %}
|
||||
<dd><span class="error">{{ lang(options.KEY == 'allow_attachments' ? 'NO_EXT_GROUP_ALLOWED_POST' : 'NO_EXT_GROUP_ALLOWED_PM', U_EXTENSION_GROUPS) }}</span></dd>
|
||||
{% endif %}
|
||||
</dl>
|
||||
|
||||
<!-- ENDIF -->
|
||||
<!-- END options -->
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="submit-buttons">
|
||||
<legend>{L_SUBMIT}</legend>
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
|
||||
<fieldset>
|
||||
<legend>{{ lang('ACP_SUBMIT_CHANGES') }}</legend>
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
|
||||
</p>
|
||||
</fieldset>
|
||||
|
||||
<!-- IF not S_SECURE_DOWNLOADS -->
|
||||
@@ -204,10 +209,13 @@
|
||||
<dd><select name="allowed_forums[]" multiple="multiple" size="8">{S_FORUM_ID_OPTIONS}</select></dd>
|
||||
</dl>
|
||||
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
|
||||
</p>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{L_ACP_SUBMIT_CHANGES}</legend>
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
|
||||
</p>
|
||||
{S_FORM_TOKEN}
|
||||
</fieldset>
|
||||
|
||||
@@ -308,10 +316,14 @@
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
|
||||
</p>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{L_ACP_SUBMIT_CHANGES}</legend>
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
|
||||
</p>
|
||||
|
||||
{S_FORM_TOKEN}
|
||||
</fieldset>
|
||||
</form>
|
||||
@@ -382,10 +394,13 @@
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF .orphan -->
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
|
||||
</p>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{L_ACP_SUBMIT_CHANGES}</legend>
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
|
||||
</p>
|
||||
<!-- ENDIF -->
|
||||
|
||||
{S_FORM_TOKEN}
|
||||
|
@@ -73,12 +73,14 @@
|
||||
<dt><label for="bangivereason">{L_BAN_GIVE_REASON}{L_COLON}</label></dt>
|
||||
<dd><input name="bangivereason" type="text" class="text medium" maxlength="255" id="bangivereason" /></dd>
|
||||
</dl>
|
||||
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="bansubmit" name="bansubmit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="banreset" name="banreset" value="{L_RESET}" />
|
||||
</p>
|
||||
{S_FORM_TOKEN}
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{L_ACP_SUBMIT_CHANGES}</legend>
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="bansubmit" name="bansubmit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="banreset" name="banreset" value="{L_RESET}" />
|
||||
</p>
|
||||
{S_FORM_TOKEN}
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
|
@@ -31,11 +31,11 @@
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{L_BBCODE_HELPLINE}</legend>
|
||||
<p>{L_BBCODE_HELPLINE_EXPLAIN}</p>
|
||||
<legend>{{ lang('BBCODE_HELPLINE') }}</legend>
|
||||
<p>{{ lang('BBCODE_HELPLINE_EXPLAIN') }}</p>
|
||||
<dl>
|
||||
<dt><label for="bbcode_helpline">{L_BBCODE_HELPLINE_TEXT}</label></dt>
|
||||
<dd><input type="text" id="bbcode_helpline" name="bbcode_helpline" size="60" maxlength="255" value="{BBCODE_HELPLINE}" /></dd>
|
||||
<dt><label for="bbcode_helpline">{{ lang('BBCODE_HELPLINE_TEXT') }}</label></dt>
|
||||
<dd><textarea id="bbcode_helpline" name="bbcode_helpline" cols="60" rows="4">{{ BBCODE_HELPLINE }}</textarea></dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
||||
|
@@ -66,9 +66,12 @@
|
||||
</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}" />
|
||||
<fieldset>
|
||||
<legend>{L_ACP_SUBMIT_CHANGES}</legend>
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
|
||||
</p>
|
||||
{S_FORM_TOKEN}
|
||||
</fieldset>
|
||||
</form>
|
||||
|
@@ -58,7 +58,6 @@
|
||||
<dl>
|
||||
<dt><label for="type">{L_BACKUP_TYPE}{L_COLON}</label></dt>
|
||||
<dd><label><input type="radio" class="radio" name="type" value="full" id="type" checked="checked" /> {L_FULL_BACKUP}</label>
|
||||
<label><input type="radio" name="type" class="radio" value="structure" /> {L_STRUCTURE_ONLY}</label>
|
||||
<label><input type="radio" class="radio" name="type" value="data" /> {L_DATA_ONLY}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
@@ -76,12 +75,15 @@
|
||||
</select></dd>
|
||||
<dd><a href="#" onclick="selector(true); return false;">{L_SELECT_ALL}</a> :: <a href="#" onclick="selector(false); return false;">{L_DESELECT_ALL}</a></dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
|
||||
</p>
|
||||
{S_FORM_TOKEN}
|
||||
<fieldset>
|
||||
<legend>{L_ACP_SUBMIT_CHANGES}</legend>
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
|
||||
</p>
|
||||
{S_FORM_TOKEN}
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
|
@@ -1,6 +0,0 @@
|
||||
{% for action in enabled.actions %}
|
||||
<a href="{{ action.U_ACTION }}"{% if action.L_ACTION_EXPLAIN %} title="{{ action.L_ACTION_EXPLAIN }}"{% endif %}{% if action.COLOR %} style="color: {{ action.COLOR }};"{% endif %} data-ajax="{{ action.ACTION_AJAX }}" data-refresh="true">{{ action.L_ACTION }}</a>{% if not action.S_LAST_ROW %} | {% endif %}
|
||||
{% endfor %}
|
||||
{% for action in disabled.actions %}
|
||||
<a href="{{ action.U_ACTION }}"{% if action.L_ACTION_EXPLAIN %} title="{{ action.L_ACTION_EXPLAIN }}"{% endif %}{% if action.COLOR %} style="color: {{ action.COLOR }};"{% endif %} data-ajax="{{ action.ACTION_AJAX }}" data-refresh="true">{{ action.L_ACTION }}</a>{% if not action.S_LAST_ROW %} | {% endif %}
|
||||
{% endfor %}
|
40
phpBB/adm/style/acp_ext_delete_data.html
Normal file
40
phpBB/adm/style/acp_ext_delete_data.html
Normal file
@@ -0,0 +1,40 @@
|
||||
{% INCLUDE 'overall_header.html' %}
|
||||
|
||||
<a id="maincontent"></a>
|
||||
|
||||
<h1>{{ lang('EXTENSIONS_ADMIN') }}</h1>
|
||||
|
||||
<p>{{ lang('EXTENSIONS_EXPLAIN') }}</p>
|
||||
<p>{{ lang('EXTENSION_DELETE_DATA_EXPLAIN') }}</p>
|
||||
|
||||
{% if MIGRATOR_ERROR %}
|
||||
<div class="errorbox">
|
||||
<p><strong>{{ lang('MIGRATION_EXCEPTION_ERROR') }}</strong></p>
|
||||
<p>{{ MIGRATOR_ERROR }}</p>
|
||||
<p><a href="{{ U_RETURN }}">{{ lang('RETURN_TO_EXTENSION_LIST') }}</a></p>
|
||||
</div>
|
||||
{% elseif S_PRE_STEP %}
|
||||
<div class="errorbox">
|
||||
<p>{{ CONFIRM_MESSAGE }}</p>
|
||||
</div>
|
||||
|
||||
<form id="acp_extensions" method="post" action="{{ U_PURGE }}">
|
||||
<fieldset class="submit-buttons">
|
||||
<legend>{{ lang('EXTENSION_DELETE_DATA') }}</legend>
|
||||
<input class="button1" type="submit" name="delete_data" value="{{ lang('EXTENSION_DELETE_DATA') }}">
|
||||
<input class="button2" type="submit" name="cancel" value="{{ lang('CANCEL') }}">
|
||||
</fieldset>
|
||||
</form>
|
||||
{% elseif S_NEXT_STEP %}
|
||||
<div class="errorbox">
|
||||
<p>{{ lang('EXTENSION_DELETE_DATA_IN_PROGRESS') }}</p>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="successbox">
|
||||
<p>{{ lang('EXTENSION_DELETE_DATA_SUCCESS') }}</p>
|
||||
<br>
|
||||
<p><a href="{{ U_RETURN }}">{{ lang('RETURN_TO_EXTENSION_LIST') }}</a></p>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% INCLUDE 'overall_footer.html' %}
|
34
phpBB/adm/style/acp_ext_disable.html
Normal file
34
phpBB/adm/style/acp_ext_disable.html
Normal file
@@ -0,0 +1,34 @@
|
||||
{% INCLUDE 'overall_header.html' %}
|
||||
|
||||
<a id="maincontent"></a>
|
||||
|
||||
<h1>{{ lang('EXTENSIONS_ADMIN') }}</h1>
|
||||
|
||||
<p>{{ lang('EXTENSIONS_EXPLAIN') }}</p>
|
||||
<p>{{ lang('EXTENSION_DISABLE_EXPLAIN') }}</p>
|
||||
|
||||
{% if S_PRE_STEP %}
|
||||
<fieldset>
|
||||
<h2>{{ lang('CONFIRM') }}</h2>
|
||||
<p>{{ CONFIRM_MESSAGE }}</p>
|
||||
</fieldset>
|
||||
|
||||
<form id="acp_extensions" method="post" action="{{ U_DISABLE }}">
|
||||
<fieldset class="submit-buttons">
|
||||
<input class="button1" type="submit" name="disable" value="{{ lang('EXTENSION_DISABLE') }}">
|
||||
<input class="button2" type="submit" name="cancel" value="{{ lang('CANCEL') }}">
|
||||
</fieldset>
|
||||
</form>
|
||||
{% elseif S_NEXT_STEP %}
|
||||
<div class="successbox notice">
|
||||
<p>{{ lang('EXTENSION_DISABLE_IN_PROGRESS') }}</p>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="successbox">
|
||||
<p>{{ lang('EXTENSION_DISABLE_SUCCESS') }}</p>
|
||||
<br>
|
||||
<p><a href="{{ U_RETURN }}">{{ lang('RETURN_TO_EXTENSION_LIST') }}</a></p>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% INCLUDE 'overall_footer.html' %}
|
40
phpBB/adm/style/acp_ext_enable.html
Normal file
40
phpBB/adm/style/acp_ext_enable.html
Normal file
@@ -0,0 +1,40 @@
|
||||
{% INCLUDE 'overall_header.html' %}
|
||||
|
||||
<a id="maincontent"></a>
|
||||
|
||||
<h1>{{ lang('EXTENSIONS_ADMIN') }}</h1>
|
||||
|
||||
<p>{{ lang('EXTENSIONS_EXPLAIN') }}</p>
|
||||
<p>{{ lang('EXTENSION_ENABLE_EXPLAIN') }}</p>
|
||||
|
||||
{% if MIGRATOR_ERROR %}
|
||||
<div class="errorbox">
|
||||
<p><strong>{{ lang('MIGRATION_EXCEPTION_ERROR') }}</strong></p>
|
||||
<p>{{ MIGRATOR_ERROR }}</p>
|
||||
<p><a href="{{ U_RETURN }}">{{ lang('RETURN_TO_EXTENSION_LIST') }}</a></p>
|
||||
</div>
|
||||
{% elseif S_PRE_STEP %}
|
||||
<fieldset>
|
||||
<h2>{{ lang('CONFIRM') }}</h2>
|
||||
<p>{{ CONFIRM_MESSAGE }}</p>
|
||||
</fieldset>
|
||||
|
||||
<form id="acp_extensions" method="post" action="{{ U_ENABLE }}">
|
||||
<fieldset class="submit-buttons">
|
||||
<input class="button1" type="submit" name="enable" value="{{ lang('EXTENSION_ENABLE') }}">
|
||||
<input class="button2" type="submit" name="cancel" value="{{ lang('CANCEL') }}">
|
||||
</fieldset>
|
||||
</form>
|
||||
{% elseif S_NEXT_STEP %}
|
||||
<div class="successbox notice">
|
||||
<p>{{ lang('EXTENSION_ENABLE_IN_PROGRESS') }}</p>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="successbox">
|
||||
<p>{{ lang('EXTENSION_ENABLE_SUCCESS') }}</p>
|
||||
<br>
|
||||
<p><a href="{{ U_RETURN }}">{{ lang('RETURN_TO_EXTENSION_LIST') }}</a></p>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% INCLUDE 'overall_footer.html' %}
|
@@ -42,50 +42,52 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
<tr id="ext_enabled_header"<!-- IF not .enabled --> class="hidden"<!-- ENDIF -->>
|
||||
<td class="row3" colspan="4"><strong>{L_EXTENSIONS_ENABLED}</strong><!-- EVENT acp_ext_list_enabled_title_after --></td>
|
||||
</tr>
|
||||
<!-- BEGIN enabled -->
|
||||
<tr class="ext_enabled row-highlight">
|
||||
<td><strong title="{enabled.NAME}">{enabled.META_DISPLAY_NAME}</strong><!-- EVENT acp_ext_list_enabled_name_after --></td>
|
||||
<td style="text-align: center;">
|
||||
<!-- IF enabled.S_VERSIONCHECK -->
|
||||
<strong class="<!-- IF enabled.S_UP_TO_DATE -->current-ext<!-- ELSE -->outdated-ext<!-- ENDIF -->">{enabled.META_VERSION}</strong>
|
||||
<!-- IF not enabled.S_UP_TO_DATE --><i class="fa fa-exclamation-circle outdated-ext" aria-hidden="true"></i><!-- ENDIF -->
|
||||
<!-- ELSE -->
|
||||
{enabled.META_VERSION}
|
||||
<!-- ENDIF -->
|
||||
</td>
|
||||
<td style="text-align: center;"><a href="{enabled.U_DETAILS}">{L_DETAILS}</a></td>
|
||||
<td style="text-align: center;">
|
||||
<!-- INCLUDE acp_ext_actions.html -->
|
||||
</td>
|
||||
</tr>
|
||||
<!-- END enabled -->
|
||||
|
||||
<tr id="ext_disabled_header"<!-- IF not .disabled --> class="hidden"<!-- ENDIF -->>
|
||||
<td class="row3" colspan="4"><strong>{L_EXTENSIONS_DISABLED}</strong><!-- EVENT acp_ext_list_disabled_title_after --></td>
|
||||
</tr>
|
||||
<!-- BEGIN disabled -->
|
||||
<tr class="ext_disabled row-highlight">
|
||||
<td><strong title="{disabled.NAME}">{disabled.META_DISPLAY_NAME}</strong><!-- EVENT acp_ext_list_disabled_name_after --></td>
|
||||
<td style="text-align: center;">
|
||||
<!-- IF disabled.S_VERSIONCHECK -->
|
||||
<strong class="<!-- IF disabled.S_UP_TO_DATE -->current-ext<!-- ELSE -->outdated-ext<!-- ENDIF -->">{disabled.META_VERSION}</strong>
|
||||
<!-- IF not disabled.S_UP_TO_DATE --><i class="fa fa-exclamation-circle outdated-ext" aria-hidden="true"></i><!-- ENDIF -->
|
||||
<!-- ELSE -->
|
||||
{disabled.META_VERSION}
|
||||
<!-- ENDIF -->
|
||||
</td>
|
||||
<td style="text-align: center;">
|
||||
<!-- IF disabled.U_DETAILS --><a href="{disabled.U_DETAILS}">{L_DETAILS}</a><!-- ENDIF -->
|
||||
</td>
|
||||
<td style="text-align: center;">
|
||||
<!-- INCLUDE acp_ext_actions.html -->
|
||||
</td>
|
||||
</tr>
|
||||
<!-- END disabled -->
|
||||
{% for list in ['enabled', 'disabled', 'available'] %}
|
||||
{% set blockname = attribute(loops, list) %}
|
||||
{% if blockname|length %}
|
||||
<tr>
|
||||
<td class="row3" colspan="4"><strong>{{ lang('EXTENSIONS_' ~ list|upper) }}</strong>
|
||||
{% if list == 'enabled' %}
|
||||
{% EVENT acp_ext_list_enabled_title_after %}
|
||||
{% elseif list == 'disabled' %}
|
||||
{% EVENT acp_ext_list_disabled_title_after %}
|
||||
{% elseif list == 'available' %}
|
||||
{% EVENT acp_ext_list_available_title_after %}
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% for data in blockname %}
|
||||
<tr class="ext_{{ list }} row-highlight">
|
||||
<td><strong title="{{ data.NAME }}">{{ data.META_DISPLAY_NAME }}</strong>
|
||||
{% if list == 'enabled' %}
|
||||
{% EVENT acp_ext_list_enabled_name_after %}
|
||||
{% elseif list == 'disabled' %}
|
||||
{% EVENT acp_ext_list_disabled_name_after %}
|
||||
{% elseif list == 'available' %}
|
||||
{% EVENT acp_ext_list_available_name_after %}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td style="text-align: center;">
|
||||
{% if data.S_VERSIONCHECK %}
|
||||
<strong class="{% if data.S_UP_TO_DATE %}current-ext{% else %}outdated-ext{% endif %}">{{ data.META_VERSION }}</strong>
|
||||
{% if not data.S_UP_TO_DATE %}<i class="fa fa-exclamation-circle outdated-ext" aria-hidden="true"></i>{% endif %}
|
||||
{% else %}
|
||||
{{ data.META_VERSION }}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td style="text-align: center;">
|
||||
{% if data.U_DETAILS %}<a href="{{ data.U_DETAILS }}">{{ lang ('DETAILS') }}</a>{% endif %}
|
||||
</td>
|
||||
<td style="text-align: center;">
|
||||
{% for actions in data.actions %}
|
||||
<a href="{{ actions.U_ACTION }}"{% if actions.L_ACTION_EXPLAIN %} title="{{ actions.L_ACTION_EXPLAIN }}"{% endif %}>{{ actions.L_ACTION }}</a>
|
||||
{% if not actions.S_LAST_ROW %} | {% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
@@ -225,6 +225,7 @@
|
||||
|
||||
<fieldset>
|
||||
<legend>{L_ADD_USERS}</legend>
|
||||
{% EVENT acp_groups_add_user_options_before %}
|
||||
<dl>
|
||||
<dt><label for="leader">{L_USER_GROUP_LEADER}{L_COLON}</label></dt>
|
||||
<dd><label><input name="leader" type="radio" class="radio" value="1" /> {L_YES}</label>
|
||||
@@ -235,11 +236,13 @@
|
||||
<dd><label><input name="default" type="radio" class="radio" value="1" /> {L_YES}</label>
|
||||
<label><input name="default" type="radio" class="radio" id="default" value="0" checked="checked" /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
{% EVENT acp_groups_add_user_usernames_before %}
|
||||
<dl>
|
||||
<dt><label for="usernames">{L_USERNAME}{L_COLON}</label><br /><span>{L_USERNAMES_EXPLAIN}</span></dt>
|
||||
<dd><textarea id="usernames" name="usernames" cols="40" rows="5"></textarea></dd>
|
||||
<dd><!-- EVENT acp_groups_find_username_prepend -->[ <a href="{U_FIND_USERNAME}" onclick="find_username(this.href); return false;">{L_FIND_USERNAME}</a> ]<!-- EVENT acp_groups_find_username_append --></dd>
|
||||
</dl>
|
||||
{% EVENT acp_groups_add_user_options_after %}
|
||||
|
||||
<p class="quick">
|
||||
<input class="button2" type="submit" name="addusers" value="{L_SUBMIT}" />
|
||||
|
@@ -15,13 +15,15 @@
|
||||
<label><input type="radio" name="legend_sort_groupname" class="radio" value="0"<!-- IF not LEGEND_SORT_GROUPNAME --> checked="checked"<!-- ENDIF --> /> {L_NO}</label>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" name="update" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" name="reset" value="{L_RESET}" />
|
||||
<input type="hidden" name="action" value="set_config_legend" />
|
||||
{S_FORM_TOKEN}
|
||||
</p>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{L_ACP_SUBMIT_CHANGES}</legend>
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" name="update" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" name="reset" value="{L_RESET}" />
|
||||
<input type="hidden" name="action" value="set_config_legend" />
|
||||
{S_FORM_TOKEN}
|
||||
</p>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
|
@@ -38,10 +38,13 @@
|
||||
<dd>{L_SEND_STATISTICS_LONG}</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<script>
|
||||
var statsData = {{ S_STATS_DATA }};
|
||||
</script>
|
||||
<!-- EVENT acp_help_phpbb_stats_after -->
|
||||
<fieldset>
|
||||
<legend>{L_ACP_SUBMIT_CHANGES}</legend>
|
||||
<p class="submit-buttons">
|
||||
<input type="hidden" name="systemdata" value="{RAW_DATA}" />
|
||||
<input type="hidden" name="help_send_statistics_time" value="{COLLECT_STATS_TIME}" />
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
</p>
|
||||
@@ -51,8 +54,13 @@
|
||||
</form>
|
||||
<form action="{U_COLLECT_STATS}" method="post" target="questionaire_result" id="questionnaire-form">
|
||||
<fieldset>
|
||||
<legend>{L_ACP_SUBMIT_CHANGES}</legend>
|
||||
<p class="submit-buttons">
|
||||
<input type="hidden" name="systemdata" value="{RAW_DATA}" />
|
||||
{% for providers in providers %}
|
||||
{% for values in providers.values %}
|
||||
<input type="hidden" name="{{ providers.NAME }}[{{ values.KEY }}]" value="{{ values.VALUE }}" />
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
<input class="button1" type="submit" id="submit_stats" name="submit" value="{L_SEND_STATISTICS}" />
|
||||
</p>
|
||||
</fieldset>
|
||||
|
@@ -105,7 +105,7 @@
|
||||
<!-- BEGIN items -->
|
||||
<tr>
|
||||
|
||||
<td style="text-align: center;"><img src="{items.IMG_SRC}" alt="{items.TEXT_ALT}" title="{items.TEXT_ALT}" /><input type="hidden" name="image[{items.IMG}]" value="1" /></td>
|
||||
<td style="text-align: center;"><img src="{items.IMG_SRC}" alt="{items.TEXT_ALT}" title="{items.TEXT_ALT}" style="max-width: 160px;"><input type="hidden" name="image[{items.IMG}]" value="1" /></td>
|
||||
<td style="vertical-align: top;">[{items.IMG}]</td>
|
||||
<!-- IF S_SMILIES -->
|
||||
<td><input class="text post" type="text" name="code[{items.IMG}]" value="{items.CODE}" size="10" maxlength="50" /></td>
|
||||
|
@@ -45,7 +45,7 @@
|
||||
</tr>
|
||||
<!-- BEGINELSE -->
|
||||
<tr>
|
||||
<td colspan="6" style="text-align: center;">{L_NO_INACTIVE_USERS}</td>
|
||||
<td colspan="7" style="text-align: center;">{L_NO_INACTIVE_USERS}</td>
|
||||
</tr>
|
||||
<!-- END inactive -->
|
||||
</tbody>
|
||||
|
@@ -70,9 +70,12 @@
|
||||
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
|
||||
<fieldset>
|
||||
<legend>{L_ACP_SUBMIT_CHANGES}</legend>
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
|
||||
</p>
|
||||
{S_FORM_TOKEN}
|
||||
</fieldset>
|
||||
</form>
|
||||
|
@@ -14,27 +14,31 @@
|
||||
|
||||
<p>{L_ADMIN_INTRO}</p>
|
||||
|
||||
<!-- IF S_UPDATE_INCOMPLETE -->
|
||||
{% if S_UPDATE_INCOMPLETE %}
|
||||
<div class="errorbox">
|
||||
<p>{L_UPDATE_INCOMPLETE} <a href="{U_VERSIONCHECK}">{L_MORE_INFORMATION}</a></p>
|
||||
<p>{{ lang('UPDATE_INCOMPLETE') }} <a href="{{ U_VERSIONCHECK }}">{{ lang('MORE_INFORMATION') }}</a></p>
|
||||
</div>
|
||||
<!-- ELSEIF S_VERSIONCHECK_FAIL -->
|
||||
{% elseif S_VERSIONCHECK_FAIL %}
|
||||
<div class="errorbox notice">
|
||||
<p>{L_VERSIONCHECK_FAIL}</p>
|
||||
<p>{VERSIONCHECK_FAIL_REASON}</p>
|
||||
<p><a href="{U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a> · <a href="{U_VERSIONCHECK}">{L_MORE_INFORMATION}</a></p>
|
||||
<p>{{ lang('VERSIONCHECK_FAIL') }}</p>
|
||||
<p>{{ VERSIONCHECK_FAIL_REASON }}</p>
|
||||
<p><a href="{{ U_VERSIONCHECK_FORCE }}">{{ lang('VERSIONCHECK_FORCE_UPDATE') }}</a> · <a href="{{ U_VERSIONCHECK }}">{{ lang('MORE_INFORMATION') }}</a></p>
|
||||
</div>
|
||||
<!-- ELSEIF not S_VERSION_UP_TO_DATE -->
|
||||
{% elseif not S_VERSION_UP_TO_DATE %}
|
||||
<div class="errorbox">
|
||||
<p>{L_VERSION_NOT_UP_TO_DATE_TITLE}</p>
|
||||
<p><a href="{U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a> · <a href="{U_VERSIONCHECK}">{L_MORE_INFORMATION}</a></p>
|
||||
<p>{{ lang('VERSION_NOT_UP_TO_DATE_TITLE') }}</p>
|
||||
<p><a href="{{ U_VERSIONCHECK_FORCE }}">{{ lang('VERSIONCHECK_FORCE_UPDATE') }}</a> · <a href="{{ U_VERSIONCHECK }}">{{ lang('MORE_INFORMATION') }}</a></p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
<!-- IF S_VERSION_UPGRADEABLE -->
|
||||
{% elseif S_VERSION_UP_TO_DATE && S_VERSIONCHECK_FORCE %}
|
||||
<div class="successbox">
|
||||
<p>{{ lang('VERSION_UP_TO_DATE_ACP') }}</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if S_VERSION_UPGRADEABLE %}
|
||||
<div class="errorbox notice">
|
||||
<p>{UPGRADE_INSTRUCTIONS}</p>
|
||||
<p>{{ UPGRADE_INSTRUCTIONS }}</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
{% endif %}
|
||||
|
||||
<!-- IF S_SEARCH_INDEX_MISSING -->
|
||||
<div class="errorbox">
|
||||
@@ -78,6 +82,13 @@
|
||||
<p>{L_ERROR_MBSTRING_HTTP_OUTPUT_EXPLAIN}</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
|
||||
{% if S_DEFAULT_CHARSET_FAIL %}
|
||||
<div class="errorbox">
|
||||
<h3>{{ lang('ERROR_DEFAULT_CHARSET') }}</h3>
|
||||
<p>{{ lang('ERROR_DEFAULT_CHARSET_EXPLAIN') }}</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF S_WRITABLE_CONFIG -->
|
||||
@@ -95,112 +106,115 @@
|
||||
<!-- EVENT acp_main_notice_after -->
|
||||
|
||||
<div class="lside">
|
||||
<table class="table1 zebra-table no-header" data-no-responsive-header="true">
|
||||
<table class="table2 zebra-table no-header" data-no-responsive-header="true">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{L_STATISTIC}</th>
|
||||
<th>{L_VALUE}</th>
|
||||
<th>{{ lang('STATISTIC') }}</th>
|
||||
<th>{{ lang('VALUE') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="tabled">{L_NUMBER_POSTS}{L_COLON}</td>
|
||||
<td class="tabled"><strong>{TOTAL_POSTS}</strong></td>
|
||||
<td class="tabled">{{ lang('BOARD_STARTED') ~ lang('COLON') }}</td>
|
||||
<td class="tabled"><strong>{{ START_DATE }}</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tabled">{L_POSTS_PER_DAY}{L_COLON}</td>
|
||||
<td class="tabled"><strong>{POSTS_PER_DAY}</strong></td>
|
||||
<td class="tabled">{{ lang('AVATAR_DIR_SIZE') ~ lang('COLON') }}</td>
|
||||
<td class="tabled"><strong>{{ AVATAR_DIR_SIZE }}</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tabled">{L_NUMBER_TOPICS}{L_COLON}</td>
|
||||
<td class="tabled"><strong>{TOTAL_TOPICS}</strong></td>
|
||||
<td class="tabled">{{ lang('DATABASE_SIZE') ~ lang('COLON') }}</td>
|
||||
<td class="tabled"><strong>{{ DBSIZE }}</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tabled">{L_TOPICS_PER_DAY}{L_COLON}</td>
|
||||
<td class="tabled"><strong>{TOPICS_PER_DAY}</strong></td>
|
||||
<td class="tabled">{{ lang('UPLOAD_DIR_SIZE') ~ lang('COLON') }}</td>
|
||||
<td class="tabled"><strong>{{ UPLOAD_DIR_SIZE }}</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tabled">{L_NUMBER_USERS}{L_COLON}</td>
|
||||
<td class="tabled"><strong>{TOTAL_USERS}</strong></td>
|
||||
<td class="tabled">{{ lang('DATABASE_SERVER_INFO') ~ lang('COLON') }}</td>
|
||||
<td class="tabled"><strong>{{ DATABASE_INFO }}</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tabled">{L_USERS_PER_DAY}{L_COLON}</td>
|
||||
<td class="tabled"><strong>{USERS_PER_DAY}</strong></td>
|
||||
<td class="tabled">{{ lang('GZIP_COMPRESSION') ~ lang('COLON') }}</td>
|
||||
<td class="tabled"><strong>{{ GZIP_COMPRESSION }}</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tabled">{L_NUMBER_FILES}{L_COLON}</td>
|
||||
<td class="tabled"><strong>{TOTAL_FILES}</strong></td>
|
||||
<td class="tabled">{{ lang('PHP_VERSION') ~ lang('COLON') }}</td>
|
||||
<td class="tabled"><strong>{{ PHP_VERSION_INFO }}</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tabled">{L_FILES_PER_DAY}{L_COLON}</td>
|
||||
<td class="tabled"><strong>{FILES_PER_DAY}</strong></td>
|
||||
<td class="tabled">{{ lang('NUMBER_ORPHAN') ~ lang('COLON') }}</td>
|
||||
<td class="tabled">
|
||||
{% if TOTAL_ORPHAN > 0 %}
|
||||
<a href="{{ U_ATTACH_ORPHAN }}" title="{{ lang('MORE_INFORMATION') }}"><strong>{{ TOTAL_ORPHAN }}</strong></a>
|
||||
{% else %}
|
||||
<strong>{{ TOTAL_ORPHAN }}</strong>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% if S_VERSIONCHECK %}
|
||||
<tr>
|
||||
<td class="tabled"> </td>
|
||||
<td class="tabled"> </td>
|
||||
<td class="tabled">{{ lang('BOARD_VERSION') ~ lang('COLON') }}</td>
|
||||
<td class="tabled">
|
||||
<strong><a href="{{ U_VERSIONCHECK }}" {% if S_VERSION_UP_TO_DATE %}style="color: #228822;" {% elseif not S_VERSIONCHECK_FAIL %}style="color: #BC2A4D;" {% endif %}title="{{ lang('MORE_INFORMATION') }}">{{ BOARD_VERSION }}</a></strong> [ <a href="{{ U_VERSIONCHECK_FORCE }}">{{ lang('VERSIONCHECK_FORCE_UPDATE') }}</a> ]
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
</tbody>
|
||||
</table>
|
||||
<table class="table1 zebra-table no-header" data-no-responsive-header="true">
|
||||
|
||||
<table class="table2 zebra-table no-header" data-no-responsive-header="true">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{L_STATISTIC}</th>
|
||||
<th>{L_VALUE}</th>
|
||||
<th>{{ lang('STATISTIC') }}</th>
|
||||
<th>{{ lang('VALUE') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="tabled">{L_BOARD_STARTED}{L_COLON}</td>
|
||||
<td class="tabled"><strong>{START_DATE}</strong></td>
|
||||
<td class="tabled">{{ lang('NUMBER_POSTS') ~ lang('COLON') }}</td>
|
||||
<td class="tabled"><strong>{{ TOTAL_POSTS }}</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tabled">{L_AVATAR_DIR_SIZE}{L_COLON}</td>
|
||||
<td class="tabled"><strong>{AVATAR_DIR_SIZE}</strong></td>
|
||||
<td class="tabled">{{ lang('POSTS_PER_DAY') ~ lang('COLON') }}</td>
|
||||
<td class="tabled"><strong>{{ POSTS_PER_DAY }}</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tabled">{L_DATABASE_SIZE}{L_COLON}</td>
|
||||
<td class="tabled"><strong>{DBSIZE}</strong></td>
|
||||
<td class="tabled">{{ lang('NUMBER_TOPICS') ~ lang('COLON') }}</td>
|
||||
<td class="tabled"><strong>{{ TOTAL_TOPICS }}</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tabled">{L_UPLOAD_DIR_SIZE}{L_COLON}</td>
|
||||
<td class="tabled"><strong>{UPLOAD_DIR_SIZE}</strong></td>
|
||||
<td class="tabled">{{ lang('TOPICS_PER_DAY') ~ lang('COLON') }}</td>
|
||||
<td class="tabled"><strong>{{ TOPICS_PER_DAY }}</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tabled">{L_DATABASE_SERVER_INFO}{L_COLON}</td>
|
||||
<td class="tabled"><strong>{DATABASE_INFO}</strong></td>
|
||||
<td class="tabled">{{ lang('NUMBER_USERS') ~ lang('COLON') }}</td>
|
||||
<td class="tabled"><strong>{{ TOTAL_USERS }}</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tabled">{L_GZIP_COMPRESSION}{L_COLON}</td>
|
||||
<td class="tabled"><strong>{GZIP_COMPRESSION}</strong></td>
|
||||
<td class="tabled">{{ lang('USERS_PER_DAY') ~ lang('COLON') }}</td>
|
||||
<td class="tabled"><strong>{{ USERS_PER_DAY }}</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tabled">{L_PHP_VERSION}{L_COLON}</td>
|
||||
<td class="tabled"><strong>{PHP_VERSION_INFO}</strong></td>
|
||||
<td class="tabled">{{ lang('NUMBER_FILES') ~ lang('COLON') }}</td>
|
||||
<td class="tabled"><strong>{{ TOTAL_FILES }}</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<!-- IF S_TOTAL_ORPHAN -->
|
||||
<td class="tabled">{L_NUMBER_ORPHAN}{L_COLON}</td>
|
||||
<td class="tabled">
|
||||
<!-- IF TOTAL_ORPHAN > 0 -->
|
||||
<a href="{U_ATTACH_ORPHAN}" title="{L_MORE_INFORMATION}"><strong>{TOTAL_ORPHAN}</strong></a>
|
||||
<!-- ELSE -->
|
||||
<strong>{TOTAL_ORPHAN}</strong>
|
||||
<!-- ENDIF -->
|
||||
</td>
|
||||
<!-- ELSE -->
|
||||
<!-- ENDIF -->
|
||||
<td class="tabled">{{ lang('FILES_PER_DAY') ~ lang('COLON') }}</td>
|
||||
<td class="tabled"><strong>{{ FILES_PER_DAY }}</strong></td>
|
||||
</tr>
|
||||
<!-- IF S_VERSIONCHECK -->
|
||||
{% if S_VERSIONCHECK %}
|
||||
<tr>
|
||||
<td class="tabled">{L_BOARD_VERSION}{L_COLON}</td>
|
||||
<td class="tabled">
|
||||
<strong><a href="{U_VERSIONCHECK}" <!-- IF S_VERSION_UP_TO_DATE -->style="color: #228822;" <!-- ELSEIF not S_VERSIONCHECK_FAIL -->style="color: #BC2A4D;" <!-- ENDIF -->title="{L_MORE_INFORMATION}">{BOARD_VERSION}</a></strong> [ <a href="{U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a> ]
|
||||
</td>
|
||||
<td class="tabled"> </td>
|
||||
<td class="tabled"> </td>
|
||||
</tr>
|
||||
<!-- ENDIF -->
|
||||
{% endif %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<!-- IF S_ACTION_OPTIONS -->
|
||||
<fieldset>
|
||||
<legend>{L_STATISTIC_RESYNC_OPTIONS}</legend>
|
||||
|
@@ -340,9 +340,12 @@
|
||||
<br class="responsive-hide" /><br class="responsive-hide" />
|
||||
|
||||
<fieldset class="quick" style="float: {S_CONTENT_FLOW_END};">
|
||||
<input class="button1" type="submit" name="action[apply_all_permissions]" value="{L_APPLY_ALL_PERMISSIONS}" />
|
||||
<input class="button2" type="button" name="cancel" value="{L_RESET}" onclick="document.forms['set-permissions'].reset(); init_colours(active_pmask + active_fmask);" />
|
||||
{S_FORM_TOKEN}
|
||||
<legend>{L_ACP_SUBMIT_CHANGES}</legend>
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="action[apply_all_permissions]" value="{L_APPLY_ALL_PERMISSIONS}" />
|
||||
<input class="button2" type="button" id="reset" name="cancel" value="{L_RESET}" onclick="document.forms['set-permissions'].reset(); init_colours(active_pmask + active_fmask);" />
|
||||
{S_FORM_TOKEN}
|
||||
</p>
|
||||
</fieldset>
|
||||
|
||||
<br class="responsive-hide" /><br class="responsive-hide" />
|
||||
|
@@ -44,7 +44,7 @@
|
||||
</select>
|
||||
<!-- EVENT acp_posting_buttons_custom_tags_before -->
|
||||
<!-- BEGIN custom_tags -->
|
||||
<input type="button" class="button2" name="addbbcode{custom_tags.BBCODE_ID}" value="{custom_tags.BBCODE_TAG}" onclick="bbstyle({custom_tags.BBCODE_ID})" title="{{ custom_tags.BBCODE_HELPLINE|e('html_attr') }}" />
|
||||
<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 -->
|
||||
|
@@ -21,8 +21,11 @@
|
||||
|
||||
<!-- IF S_STEP_ONE -->
|
||||
|
||||
{% EVENT acp_profile_options_before %}
|
||||
|
||||
<fieldset>
|
||||
<legend>{L_TITLE}</legend>
|
||||
{% EVENT acp_profile_basic_options_before %}
|
||||
<dl>
|
||||
<dt><label>{L_FIELD_TYPE}{L_COLON}</label><br /><span>{L_FIELD_TYPE_EXPLAIN}</span></dt>
|
||||
<dd><strong>{FIELD_TYPE}</strong></dd>
|
||||
@@ -43,8 +46,11 @@
|
||||
<dd><label><input type="radio" class="radio" id="field_no_view" name="field_no_view" value="0"<!-- IF not S_FIELD_NO_VIEW --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="field_no_view" value="1"<!-- IF S_FIELD_NO_VIEW --> checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
{% EVENT acp_profile_basic_options_after %}
|
||||
</fieldset>
|
||||
|
||||
{% EVENT acp_profile_visibility_options_before %}
|
||||
|
||||
<fieldset>
|
||||
<legend>{L_VISIBILITY_OPTION}</legend>
|
||||
<dl>
|
||||
@@ -87,8 +93,11 @@
|
||||
<dd><input class="text medium" type="text" name="field_contact_url" id="field_contact_url" value="{FIELD_CONTACT_URL}" /> <label for="field_contact_url">{L_FIELD_CONTACT_URL}</label></dd>
|
||||
<!-- EVENT acp_profile_contact_last -->
|
||||
</dl>
|
||||
{% EVENT acp_profile_contact_after %}
|
||||
</fieldset>
|
||||
|
||||
{% EVENT acp_profile_visibility_options_after %}
|
||||
|
||||
<!-- IF S_EDIT_MODE -->
|
||||
<fieldset class="quick">
|
||||
<input class="button1" type="submit" name="save" value="{L_SAVE}" />
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<p>{L_ACP_PRUNE_USERS_EXPLAIN}</p>
|
||||
|
||||
<form id="acp_prune" method="post" action="{U_ACTION}">
|
||||
|
||||
|
||||
<fieldset>
|
||||
<legend>{L_CRITERIA}</legend>
|
||||
<dl>
|
||||
@@ -66,15 +66,19 @@
|
||||
<dd><label><input type="radio" class="radio" name="action" value="delete" /> {L_DELETE_USERS}</label>
|
||||
<label><input type="radio" class="radio" id="deactivate" name="action" value="deactivate" checked="checked" /> {L_DEACTIVATE}</label></dd>
|
||||
</dl>
|
||||
|
||||
<p class="submit-buttons">
|
||||
<input type="hidden" name="prune" value="1" />
|
||||
|
||||
<input class="button1" type="submit" id="update" name="update" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
|
||||
{S_FORM_TOKEN}
|
||||
</p>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{L_ACP_SUBMIT_CHANGES}</legend>
|
||||
<p class="submit-buttons">
|
||||
<input type="hidden" name="prune" value="1" />
|
||||
|
||||
<input class="button1" type="submit" id="update" name="update" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
|
||||
{S_FORM_TOKEN}
|
||||
</p>
|
||||
</fieldset>
|
||||
|
||||
</form>
|
||||
|
||||
<!-- INCLUDE overall_footer.html -->
|
||||
|
@@ -85,7 +85,7 @@
|
||||
<!-- BEGIN ranks -->
|
||||
<tr>
|
||||
<!-- EVENT acp_ranks_list_column_before -->
|
||||
<td style="text-align: center;"><!-- IF ranks.S_RANK_IMAGE --><img src="{ranks.RANK_IMAGE}" alt="{ranks.RANK_TITLE}" title="{ranks.RANK_TITLE}" /><!-- ELSE --> - <!-- ENDIF --></td>
|
||||
<td style="text-align: center;"><!-- IF ranks.S_RANK_IMAGE --><img src="{ranks.RANK_IMAGE}" alt="{ranks.RANK_TITLE}" title="{ranks.RANK_TITLE}" style="max-width: 160px;"><!-- ELSE --> - <!-- ENDIF --></td>
|
||||
<td style="text-align: center;">{ranks.RANK_TITLE}</td>
|
||||
<td style="text-align: center;"><!-- IF ranks.S_SPECIAL_RANK --> - <!-- ELSE -->{ranks.MIN_POSTS}<!-- ENDIF --></td>
|
||||
<!-- EVENT acp_ranks_list_column_after -->
|
||||
|
@@ -36,6 +36,13 @@
|
||||
<dt><label for="max_num_search_keywords">{L_MAX_NUM_SEARCH_KEYWORDS}{L_COLON}</label><br /><span>{L_MAX_NUM_SEARCH_KEYWORDS_EXPLAIN}</span></dt>
|
||||
<dd><input id="max_num_search_keywords" type="number" min="0" max="9999" name="config[max_num_search_keywords]" value="{MAX_NUM_SEARCH_KEYWORDS}" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>
|
||||
<label for="default_search_return_chars">{{ lang('DEFAULT_SEARCH_RETURN_CHARS') ~ lang('COLON') }}</label>
|
||||
<br><span>{{ lang('DEFAULT_SEARCH_RETURN_CHARS_EXPLAIN') }}</span>
|
||||
</dt>
|
||||
<dd><input id="default_search_return_chars" name="config[default_search_return_chars]" type="number" value="{{ DEFAULT_SEARCH_RETURN_CHARS }}" min="0" max="9999"></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="search_store_results">{L_SEARCH_STORE_RESULTS}{L_COLON}</label><br /><span>{L_SEARCH_STORE_RESULTS_EXPLAIN}</span></dt>
|
||||
<dd><input id="search_store_results" type="number" min="0" max="999999" name="config[search_store_results]" value="{SEARCH_STORE_RESULTS}" /> {L_SECONDS}</dd>
|
||||
@@ -59,40 +66,47 @@
|
||||
|
||||
<!-- END backend -->
|
||||
|
||||
<fieldset class="submit-buttons">
|
||||
<legend>{L_SUBMIT}</legend>
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
|
||||
<fieldset>
|
||||
<legend>{L_ACP_SUBMIT_CHANGES}</legend>
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
|
||||
</p>
|
||||
{S_FORM_TOKEN}
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
<!-- ELSEIF S_INDEX -->
|
||||
|
||||
<script>
|
||||
// <![CDATA[
|
||||
/**
|
||||
* Popup search progress bar
|
||||
*/
|
||||
function popup_progress_bar(progress_type)
|
||||
{
|
||||
close_waitscreen = 0;
|
||||
// no scrollbars
|
||||
popup('{UA_PROGRESS_BAR}&type=' + progress_type, 400, 240, '_index');
|
||||
}
|
||||
// ]]>
|
||||
</script>
|
||||
|
||||
<h1>{L_ACP_SEARCH_INDEX}</h1>
|
||||
|
||||
<!-- IF S_CONTINUE_INDEXING -->
|
||||
<p>{L_CONTINUE_EXPLAIN}</p>
|
||||
<p>
|
||||
{% if S_CONTINUE_INDEXING == 'create' %}
|
||||
{{ lang('CONTINUE_INDEXING_EXPLAIN') }}
|
||||
{% else %}
|
||||
{{ lang('CONTINUE_DELETING_INDEX_EXPLAIN') }}
|
||||
{% endif %}
|
||||
</p>
|
||||
|
||||
<form id="acp_search_continue" method="post" action="{U_CONTINUE_INDEXING}">
|
||||
<fieldset class="submit-buttons">
|
||||
<legend>{L_SUBMIT}</legend>
|
||||
<input class="button1" type="submit" id="continue" name="continue" value="{L_CONTINUE}" onclick="popup_progress_bar('{S_CONTINUE_INDEXING}');" />
|
||||
<input class="button2" type="submit" id="cancel" name="cancel" value="{L_CANCEL}" />
|
||||
<fieldset>
|
||||
<legend>{{ lang('CONTINUE_INDEXING') }}</legend>
|
||||
{% if CONTINUE_PROGRESS %}
|
||||
<div class="centered-text">
|
||||
<br>
|
||||
<progress
|
||||
value="{{ CONTINUE_PROGRESS.VALUE }}"
|
||||
max="{{ CONTINUE_PROGRESS.TOTAL }}"
|
||||
style="height: 2em; width: 20em;"></progress><br>
|
||||
{{ CONTINUE_PROGRESS.PERCENTAGE|number_format(2) ~ ' %' }}<br>
|
||||
{{ lang('SEARCH_INDEX_PROGRESS', CONTINUE_PROGRESS.VALUE, CONTINUE_PROGRESS.REMAINING, CONTINUE_PROGRESS.TOTAL) }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="submit" id="cancel" name="cancel" value="{L_CANCEL}" />
|
||||
</p>
|
||||
{S_FORM_TOKEN}
|
||||
</fieldset>
|
||||
</form>
|
||||
@@ -140,10 +154,10 @@
|
||||
<p class="quick">
|
||||
<!-- IF backend.S_INDEXED -->
|
||||
<input type="hidden" name="action" value="delete" />
|
||||
<input class="button2" type="submit" value="{L_DELETE_INDEX}" onclick="popup_progress_bar('delete');" />
|
||||
<input class="button2" type="submit" name="submit" value="{{ lang('DELETE_INDEX') }}" />
|
||||
<!-- ELSE -->
|
||||
<input type="hidden" name="action" value="create" />
|
||||
<input class="button2" type="submit" value="{L_CREATE_INDEX}" onclick="popup_progress_bar('create');" />
|
||||
<input class="button2" type="submit" name="submit" value="{{ lang('CREATE_INDEX') }}" />
|
||||
<!-- ENDIF -->
|
||||
</p>
|
||||
{S_FORM_TOKEN}
|
||||
@@ -154,6 +168,24 @@
|
||||
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- ELSEIF S_INDEX_PROGRESS -->
|
||||
<div class="successbox">
|
||||
<h3>{{ INDEXING_TITLE }}</h3>
|
||||
<p>
|
||||
{{ INDEXING_EXPLAIN }}
|
||||
{% if INDEXING_PROGRESS %}<br>{{ INDEXING_PROGRESS }}{% endif %}
|
||||
{% if INDEXING_RATE %}<br>{{ INDEXING_RATE }}{% endif %}
|
||||
{% if INDEXING_PROGRESS_BAR %}
|
||||
<br>
|
||||
<progress
|
||||
value="{{ INDEXING_PROGRESS_BAR.VALUE }}"
|
||||
max="{{ INDEXING_PROGRESS_BAR.TOTAL }}"
|
||||
style="height: 2em; width: 20em;"></progress><br>
|
||||
{{ INDEXING_PROGRESS_BAR.PERCENTAGE|number_format(2) ~ ' %' }}<br>
|
||||
{{ lang('SEARCH_INDEX_PROGRESS', INDEXING_PROGRESS_BAR.VALUE, INDEXING_PROGRESS_BAR.REMAINING, INDEXING_PROGRESS_BAR.TOTAL) }}
|
||||
{% endif %}
|
||||
</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- INCLUDE overall_footer.html -->
|
||||
|
@@ -96,9 +96,10 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{L_STYLE_NAME}</th>
|
||||
<th width="10%" style="white-space: nowrap; text-align: center;">{L_STYLE_PHPBB_VERSION}</th>
|
||||
<!-- IF not STYLES_LIST_HIDE_COUNT --><th width="10%" style="white-space: nowrap; text-align: center;">{L_STYLE_USED_BY}</th><!-- ENDIF -->
|
||||
<th width="25%" style="white-space: nowrap; text-align: center;">{L_ACTIONS}</th>
|
||||
<th style="width: 10%; white-space: nowrap; text-align: center;">{{ lang('STYLE_VERSION') }}</th>
|
||||
<th style="width: 10%; white-space: nowrap; text-align: center;">{L_STYLE_PHPBB_VERSION}</th>
|
||||
<!-- IF not STYLES_LIST_HIDE_COUNT --><th style="width: 10%; white-space: nowrap; text-align: center;">{L_STYLE_USED_BY}</th><!-- ENDIF -->
|
||||
<th style="width: 25%; white-space: nowrap; text-align: center;">{L_ACTIONS}</th>
|
||||
{STYLES_LIST_EXTRA}
|
||||
<th> </th>
|
||||
</tr>
|
||||
@@ -130,6 +131,7 @@
|
||||
<span class="style-path"><br />{L_STYLE_PATH}{L_COLON} {styles_list.STYLE_PATH_FULL}</span>
|
||||
<!-- ENDIF -->
|
||||
</td>
|
||||
<td class="{$ROW_CLASS} users">{{ styles_list.STYLE_VERSION }}</td>
|
||||
<td class="{$ROW_CLASS} users">{styles_list.STYLE_PHPBB_VERSION}</td>
|
||||
<!-- IF not STYLES_LIST_HIDE_COUNT -->
|
||||
<td class="{$ROW_CLASS} users">{styles_list.USERS}</td>
|
||||
@@ -144,7 +146,7 @@
|
||||
<!-- END actions -->
|
||||
</td>
|
||||
{styles_list.EXTRA}
|
||||
<td class="{$ROW_CLASS} mark" width="20">
|
||||
<td class="{$ROW_CLASS} mark" style="width: 20px;">
|
||||
<!-- IF styles_list.STYLE_ID -->
|
||||
{% if styles_list.STYLE_NAME !== 'prosilver' %}
|
||||
<input class="checkbox" type="checkbox" name="ids[]" value="{styles_list.STYLE_ID}" />
|
||||
|
@@ -137,9 +137,13 @@
|
||||
<td><a href="{group.U_EDIT_GROUP}">{group.GROUP_NAME}</a></td>
|
||||
<td><!-- IF group.S_IS_MEMBER --><!-- IF group.S_NO_DEFAULT --><a href="{group.U_DEFAULT}">{L_GROUP_DEFAULT}</a><!-- ELSE --><strong>{L_GROUP_DEFAULT}</strong><!-- ENDIF --><!-- ELSEIF not group.S_IS_MEMBER and group.U_APPROVE --><a href="{group.U_APPROVE}">{L_GROUP_APPROVE}</a><!-- ELSE --> <!-- ENDIF --></td>
|
||||
<td><!-- IF group.S_IS_MEMBER and not group.S_SPECIAL_GROUP --><a href="{group.U_DEMOTE_PROMOTE}">{group.L_DEMOTE_PROMOTE}</a><!-- ELSE --> <!-- ENDIF --></td>
|
||||
<td><a href="{group.U_DELETE}">{L_GROUP_DELETE}</a></td>
|
||||
<td>{% if group.U_DELETE %}<a href="{{ group.U_DELETE }}">{{ lang('GROUP_DELETE') }}</a>{% endif %}</td>
|
||||
</tr>
|
||||
<!-- ENDIF -->
|
||||
<!-- BEGINELSE -->
|
||||
<tr>
|
||||
<td class="row3 centered-text" colspan="4">{{ lang('NO_GROUP') }}</td>
|
||||
</tr>
|
||||
<!-- END group -->
|
||||
</tbody>
|
||||
</table>
|
||||
|
@@ -14,7 +14,7 @@
|
||||
<!-- BEGIN warn -->
|
||||
<tr>
|
||||
<td>{warn.USERNAME}</td>
|
||||
<td style="text-align: center; nowrap: nowrap;">{warn.DATE}</td>
|
||||
<td style="text-align: center; white-space: nowrap;">{warn.DATE}</td>
|
||||
<td>{warn.ACTION}</td>
|
||||
<td style="text-align: center;"><input type="checkbox" class="radio" name="mark[]" value="{warn.ID}" /></td>
|
||||
</tr>
|
||||
|
@@ -728,8 +728,20 @@ td {
|
||||
border-collapse: separate;
|
||||
}
|
||||
|
||||
.table2 {
|
||||
display: inline-block;
|
||||
border-spacing: 1px;
|
||||
border-collapse: separate;
|
||||
}
|
||||
|
||||
.lside {
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.tabled {
|
||||
width: 25%;
|
||||
width: 1%;
|
||||
}
|
||||
|
||||
dt#color_palette_placeholder table {
|
||||
@@ -2053,6 +2065,8 @@ fieldset.permissions .padding {
|
||||
}
|
||||
|
||||
.permissions-category ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
@@ -2106,7 +2120,6 @@ fieldset.permissions .padding {
|
||||
|
||||
.permissions-category .activetab a span.tabbg {
|
||||
background-position: 100% 0;
|
||||
padding-bottom: 7px;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
@@ -2301,6 +2314,10 @@ fieldset.permissions .padding {
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
.permissions-category ul {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.permissions-category a, .permissions-category a span.tabbg {
|
||||
display: block;
|
||||
float: none !important;
|
||||
@@ -2627,7 +2644,7 @@ fieldset.permissions .padding {
|
||||
.send-stats-tile h2 {
|
||||
margin-top: 0;
|
||||
text-align: center;
|
||||
padding-bottom: 1em;
|
||||
padding-bottom: 1em;
|
||||
}
|
||||
|
||||
.send-stats-tile i {
|
||||
@@ -2721,4 +2738,29 @@ fieldset.permissions .padding {
|
||||
height: 1em;
|
||||
width: 1em;
|
||||
}
|
||||
|
||||
.acp-icon {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
/* stylelint-enable declaration-property-unit-whitelist */
|
||||
|
||||
.acp-icon-move-up,
|
||||
.acp-icon-move-down {
|
||||
color: #4ba5de;
|
||||
}
|
||||
|
||||
.acp-icon-settings {
|
||||
color: #62c046;
|
||||
}
|
||||
|
||||
.acp-icon-delete {
|
||||
color: #d74558;
|
||||
}
|
||||
|
||||
.acp-icon-resync {
|
||||
color: #f69934;
|
||||
}
|
||||
|
||||
.acp-icon-disabled {
|
||||
color: #d0d0d0;
|
||||
}
|
||||
|
@@ -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="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'),
|
||||
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></div><ul class="dropdown-contents" /></div></li>').find('li.responsive-tab'),
|
||||
menu = item.find('.dropdown-contents'),
|
||||
maxHeight = 0,
|
||||
lastWidth = false,
|
||||
@@ -228,64 +228,6 @@ function parse_document(container)
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Extension actions helper functions
|
||||
*/
|
||||
function move_to_enabled(element)
|
||||
{
|
||||
var disabled_header = document.querySelector('#ext_disabled_header');
|
||||
disabled_header.parentNode.insertBefore(element, disabled_header);
|
||||
element.classList.remove('ext_disabled');
|
||||
element.classList.add('ext_enabled');
|
||||
}
|
||||
function move_to_disabled(element)
|
||||
{
|
||||
var table_body = document.querySelector('#ext_disabled_header').parentNode;
|
||||
table_body.appendChild(element);
|
||||
element.classList.remove('ext_enabled');
|
||||
element.classList.add('ext_disabled');
|
||||
}
|
||||
function set_actions(container, actions) {
|
||||
container.innerHTML = '';
|
||||
for (var i = 0; i < actions.length; i++) {
|
||||
var a = document.createElement('a');
|
||||
a.href = actions[i].U_ACTION.split('&').join('&'); // replace all occurances
|
||||
a.title = actions[i].L_ACTION_EXPLAIN;
|
||||
if (actions[i].COLOR) {
|
||||
a.style = actions[i].COLOR;
|
||||
}
|
||||
a.innerHTML = actions[i].L_ACTION;
|
||||
// ajaxify this action as well
|
||||
phpbb.ajaxify({
|
||||
selector: a,
|
||||
refresh: true,
|
||||
callback: actions[i].ACTION_AJAX
|
||||
});
|
||||
|
||||
container.appendChild(a);
|
||||
|
||||
if (i < actions.length - 1) {
|
||||
container.innerHTML += ' | ';
|
||||
}
|
||||
}
|
||||
}
|
||||
function show_enabled_header() {
|
||||
document.querySelector('#ext_enabled_header').classList.remove('hidden');
|
||||
}
|
||||
function show_disabled_header() {
|
||||
document.querySelector('#ext_disabled_header').classList.remove('hidden');
|
||||
}
|
||||
function hide_disabled_header_if_empty() {
|
||||
if (!document.querySelector('.ext_disabled')) {
|
||||
document.querySelector('#ext_disabled_header').classList.add('hidden');
|
||||
}
|
||||
}
|
||||
function hide_enabled_header_if_empty() {
|
||||
if (!document.querySelector('.ext_enabled')) {
|
||||
document.querySelector('#ext_enabled_header').classList.add('hidden');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Run onload functions
|
||||
*/
|
||||
@@ -312,5 +254,10 @@ function hide_enabled_header_if_empty() {
|
||||
});
|
||||
|
||||
$('#configlist').closest('.send-stats-data-row').addClass('send-stats-data-hidden');
|
||||
|
||||
// Do not underline actions icons on hover (could not be done via CSS)
|
||||
$('.actions a:has(i.acp-icon)').mouseover(function () {
|
||||
$(this).css("text-decoration", "none");
|
||||
});
|
||||
});
|
||||
})(jQuery);
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* global phpbb */
|
||||
/* global phpbb, statsData */
|
||||
|
||||
(function($) { // Avoid conflicts with other libraries
|
||||
|
||||
@@ -74,7 +74,7 @@ phpbb.prepareSendStats = function () {
|
||||
var $sendStatisticsSuccess = $('<input />', {
|
||||
type: 'hidden',
|
||||
name: 'send_statistics_response',
|
||||
value: res
|
||||
value: JSON.stringify(res)
|
||||
});
|
||||
$sendStatisticsSuccess.appendTo('p.submit-buttons');
|
||||
|
||||
@@ -87,7 +87,7 @@ phpbb.prepareSendStats = function () {
|
||||
$.ajax({
|
||||
url: $this.attr('data-ajax-action').replace('&', '&'),
|
||||
type: 'POST',
|
||||
data: 'systemdata=' + encodeURIComponent($this.find('input[name=systemdata]').val()),
|
||||
data: statsData,
|
||||
success: returnHandler,
|
||||
error: errorHandler,
|
||||
cache: false
|
||||
@@ -157,34 +157,6 @@ phpbb.addAjaxCallback('row_delete', function(res) {
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Callbacks for extension actions
|
||||
*/
|
||||
phpbb.addAjaxCallback('ext_enable', function(res) {
|
||||
if (res.EXT_ENABLE_SUCCESS) {
|
||||
move_to_enabled(this.parentNode.parentNode);
|
||||
set_actions(this.parentNode, res.ACTIONS);
|
||||
show_enabled_header();
|
||||
hide_disabled_header_if_empty();
|
||||
}
|
||||
});
|
||||
phpbb.addAjaxCallback('ext_delete_data', function(res) {
|
||||
if (res.EXT_DELETE_DATA_SUCCESS) {
|
||||
move_to_disabled(this.parentNode.parentNode);
|
||||
set_actions(this.parentNode, res.ACTIONS);
|
||||
show_disabled_header();
|
||||
hide_enabled_header_if_empty();
|
||||
}
|
||||
});
|
||||
phpbb.addAjaxCallback('ext_disable', function(res) {
|
||||
if (res.EXT_DISABLE_SUCCESS) {
|
||||
move_to_disabled(this.parentNode.parentNode);
|
||||
set_actions(this.parentNode, res.ACTIONS);
|
||||
show_disabled_header();
|
||||
hide_enabled_header_if_empty();
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Handler for submitting permissions form in chunks
|
||||
* This call will submit permissions forms in chunks of 5 fieldsets.
|
||||
@@ -201,7 +173,9 @@ function submitPermissions() {
|
||||
var permissionSubmitSize = 0,
|
||||
permissionRequestCount = 0,
|
||||
forumIds = [],
|
||||
permissionSubmitFailed = false;
|
||||
permissionSubmitFailed = false,
|
||||
clearIndicator = true,
|
||||
$loadingIndicator;
|
||||
|
||||
if ($submitAllButton !== $submitButton) {
|
||||
fieldsetList = $form.find('fieldset#' + $submitButton.closest('fieldset.permissions').id);
|
||||
@@ -235,6 +209,8 @@ function submitPermissions() {
|
||||
}
|
||||
});
|
||||
|
||||
$loadingIndicator = phpbb.loadingIndicator();
|
||||
|
||||
/**
|
||||
* Handler for submitted permissions form chunk
|
||||
*
|
||||
@@ -250,6 +226,8 @@ function submitPermissions() {
|
||||
} else if (!permissionSubmitFailed && res.S_USER_NOTICE) {
|
||||
// Display success message at the end of submitting the form
|
||||
if (permissionRequestCount >= permissionSubmitSize) {
|
||||
clearIndicator = true;
|
||||
|
||||
var $alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT);
|
||||
var $alertBoxLink = $alert.find('p.alert_text > a');
|
||||
|
||||
@@ -299,6 +277,17 @@ function submitPermissions() {
|
||||
$form.submit();
|
||||
}, res.REFRESH_DATA.time * 1000); // Server specifies time in seconds
|
||||
}
|
||||
} else {
|
||||
// Still more forms to submit, so do not clear indicator
|
||||
clearIndicator = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (clearIndicator) {
|
||||
phpbb.clearLoadingTimeout();
|
||||
|
||||
if ($loadingIndicator) {
|
||||
$loadingIndicator.fadeOut(phpbb.alertTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -2,7 +2,6 @@
|
||||
|
||||
<a id="maincontent"></a>
|
||||
|
||||
|
||||
<a href="<!-- IF U_LIST -->{U_LIST}<!-- ELSE -->{U_ACTION}<!-- ENDIF -->" style="float: {S_CONTENT_FLOW_END};">« {L_BACK}</a>
|
||||
|
||||
<h1>{L_QUESTIONS}</h1>
|
||||
@@ -25,15 +24,18 @@
|
||||
<td style="vertical-align: top; width: 50px; text-align: center; white-space: nowrap;">{L_ACTION}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<!-- BEGIN questions -->
|
||||
<tr>
|
||||
<td style="text-align: left;">{questions.QUESTION_TEXT}</td>
|
||||
<td style="text-align: center;">{questions.QUESTION_LANG}</td>
|
||||
<td style="text-align: center;"><a href="{questions.U_EDIT}">{ICON_EDIT}</a> <a href="{questions.U_DELETE}">{ICON_DELETE}</a></td>
|
||||
</tr>
|
||||
<!-- END questions -->
|
||||
{% for question in questions %}
|
||||
<tr>
|
||||
{# RTL is already managed by CSS #}
|
||||
<td>{{ question.QUESTION_TEXT }}</td>
|
||||
<td style="text-align: center;">{{ question.QUESTION_LANG }}</td>
|
||||
<td style="text-align: center;"><a href="{{ question.U_EDIT }}">{{ ICON_EDIT }}</a> <a href="{{ question.U_DELETE }}">{{ ICON_DELETE }}</a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
<fieldset class="quick">
|
||||
<input class="button1" type="submit" name="add" value="{L_ADD}" />
|
||||
|
@@ -21,6 +21,20 @@
|
||||
<dd><input id="recaptcha_privkey" name="recaptcha_privkey" value="{RECAPTCHA_PRIVKEY}" size="50" type="text" /></dd>
|
||||
</dl>
|
||||
|
||||
<dl>
|
||||
<dt>
|
||||
<label>{{ lang('RECAPTCHA_V3_DOMAIN') ~ lang('COLON') }}</label>
|
||||
<br><span>{{ lang('RECAPTCHA_V3_DOMAIN_EXPLAIN') }}</span>
|
||||
</dt>
|
||||
<dd>
|
||||
{% for domain in RECAPTCHA_V2_DOMAINS %}
|
||||
<label>
|
||||
<input class="radio" name="recaptcha_v2_domain" type="radio" value="{{ domain }}"{{ domain == RECAPTCHA_V2_DOMAIN ? ' checked' }}>
|
||||
<span>{{ domain }}</span>
|
||||
</label>
|
||||
{% endfor %}
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
|
15
phpBB/adm/style/captcha_recaptcha_v3.html
Normal file
15
phpBB/adm/style/captcha_recaptcha_v3.html
Normal file
@@ -0,0 +1,15 @@
|
||||
{% if S_RECAPTCHA_AVAILABLE %}
|
||||
<dl>
|
||||
<dt> </dt>
|
||||
<dd>
|
||||
<noscript>
|
||||
<div class="warningbox">{{ lang('RECAPTCHA_NOSCRIPT') }}</div>
|
||||
</noscript>
|
||||
|
||||
{{ lang('RECAPTCHA_INVISIBLE') }}
|
||||
<script src="{{ U_RECAPTCHA_SCRIPT }}" async defer></script>
|
||||
</dd>
|
||||
</dl>
|
||||
{% else %}
|
||||
{{ lang('RECAPTCHA_NOT_AVAILABLE') }}
|
||||
{% endif %}
|
108
phpBB/adm/style/captcha_recaptcha_v3_acp.html
Normal file
108
phpBB/adm/style/captcha_recaptcha_v3_acp.html
Normal file
@@ -0,0 +1,108 @@
|
||||
{% include 'overall_header.html' %}
|
||||
|
||||
<a id="maincontent"></a>
|
||||
|
||||
<h1>{{ lang('ACP_VC_SETTINGS') }}</h1>
|
||||
<p>{{ lang('ACP_VC_SETTINGS_EXPLAIN') }}</p>
|
||||
|
||||
<form id="acp_captcha" method="post" action="{{ U_ACTION }}">
|
||||
<fieldset>
|
||||
<legend>{{ lang('GENERAL_OPTIONS') }}</legend>
|
||||
|
||||
<dl>
|
||||
<dt>
|
||||
<label for="recaptcha_v3_key">{{ lang('RECAPTCHA_PUBLIC') ~ lang('COLON') }}</label>
|
||||
<br><span>{{ lang('RECAPTCHA_V3_PUBLIC_EXPLAIN') }}</span>
|
||||
</dt>
|
||||
<dd>
|
||||
<input id="recaptcha_v3_key" name="recaptcha_v3_key" type="text" value="{{ RECAPTCHA_V3_KEY }}" size="50">
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>
|
||||
<label for="recaptcha_v3_secret">{{ lang('RECAPTCHA_PRIVATE') ~ lang('COLON') }}</label>
|
||||
<br><span>{{ lang('RECAPTCHA_V3_PRIVATE_EXPLAIN') }}</span>
|
||||
</dt>
|
||||
<dd>
|
||||
<input id="recaptcha_v3_secret" name="recaptcha_v3_secret" type="text" value="{{ RECAPTCHA_V3_SECRET }}" size="50">
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<dl>
|
||||
<dt>
|
||||
<label>{{ lang('RECAPTCHA_V3_DOMAIN') ~ lang('COLON') }}</label>
|
||||
<br><span>{{ lang('RECAPTCHA_V3_DOMAIN_EXPLAIN') }}</span>
|
||||
</dt>
|
||||
<dd>
|
||||
{% for domain in RECAPTCHA_V3_DOMAINS %}
|
||||
<label>
|
||||
<input class="radio" name="recaptcha_v3_domain" type="radio" value="{{ domain }}"{{ domain == RECAPTCHA_V3_DOMAIN ? ' checked' }}>
|
||||
<span>{{ domain }}</span>
|
||||
</label>
|
||||
{% endfor %}
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>
|
||||
<label>{{ lang('RECAPTCHA_V3_METHOD') ~ lang('COLON') }}</label>
|
||||
<br><span>{{ lang('RECAPTCHA_V3_METHOD_EXPLAIN') }}</span>
|
||||
</dt>
|
||||
<dd>
|
||||
{% for method, available in RECAPTCHA_V3_METHODS %}
|
||||
<label>
|
||||
{% set checked = method == RECAPTCHA_V3_METHOD ? ' checked' %}
|
||||
{% set disabled = not available ? ' disabled' %}
|
||||
|
||||
<input class="radio" name="recaptcha_v3_method" type="radio" value="{{ method }}"{{ checked ~ disabled }}>
|
||||
<span>{{ lang('RECAPTCHA_V3_METHOD_' ~ method|upper) }}</span>
|
||||
</label>
|
||||
{% endfor %}
|
||||
</dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{ lang('RECAPTCHA_V3_THRESHOLDS') }}</legend>
|
||||
<p>{{ lang('RECAPTCHA_V3_THRESHOLDS_EXPLAIN') }}</p>
|
||||
|
||||
{% for threshold in thresholds %}
|
||||
<dl>
|
||||
<dt>
|
||||
<label for="{{ threshold.key }}">{{ lang(threshold.key|upper) ~ lang('COLON') }}</label>
|
||||
{% if lang_defined(threshold.key|upper ~ '_EXPLAIN') %}
|
||||
<br><span>{{ lang(threshold.key|upper ~ '_EXPLAIN') }}</span>
|
||||
{% endif %}
|
||||
</dt>
|
||||
<dd><input id="{{ threshold.key }}" name="{{ threshold.key }}" type="number" value="{{ threshold.value }}" min="0" max="1" step="0.1"></dd>
|
||||
</dl>
|
||||
{% endfor %}
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{ lang('PREVIEW') }}</legend>
|
||||
|
||||
{% if PREVIEW %}
|
||||
<div class="successbox">
|
||||
<h3>{{ lang('WARNING') }}</h3>
|
||||
<p>{{ lang('CAPTCHA_PREVIEW_MSG') }}</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% include CAPTCHA_PREVIEW %}
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{ lang('ACP_SUBMIT_CHANGES') }}</legend>
|
||||
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" id="submit" name="submit" type="submit" value="{{ lang('SUBMIT') }}">
|
||||
<input class="button2" id="reset" name="reset" type="reset" value="{{ lang('RESET') }}">
|
||||
|
||||
<input name="select_captcha" type="hidden" value="{{ CAPTCHA_NAME }}">
|
||||
<input name="configure" type="hidden" value="1">
|
||||
{{ S_FORM_TOKEN }}
|
||||
</p>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
{% include 'overall_footer.html' %}
|
@@ -23,7 +23,7 @@ installLang = {
|
||||
</script>
|
||||
|
||||
<script src="{T_JQUERY_LINK}"></script>
|
||||
<!-- IF S_ALLOW_CDN --><script>window.jQuery || document.write('\x3Cscript src="{T_ASSETS_PATH}/javascript/jquery-3.4.1.min.js">\x3C/script>');</script><!-- ENDIF -->
|
||||
<!-- IF S_ALLOW_CDN --><script>window.jQuery || document.write('\x3Cscript src="{T_ASSETS_PATH}/javascript/jquery-3.7.1.min.js">\x3C/script>');</script><!-- ENDIF -->
|
||||
<script src="{T_ASSETS_PATH}/javascript/core.js?assets_version={T_ASSETS_VERSION}"></script>
|
||||
<!-- INCLUDEJS admin.js -->
|
||||
{$SCRIPTS}
|
||||
|
@@ -24,7 +24,7 @@
|
||||
|
||||
<div id="phpbb_alert" class="phpbb_alert" data-l-err="{L_ERROR}" data-l-timeout-processing-req="{L_TIMEOUT_PROCESSING_REQ}">
|
||||
<a href="#" class="alert_close"></a>
|
||||
<h3 class="alert_title"></h3><p class="alert_text"></p>
|
||||
<h3 class="alert_title"> </h3><p class="alert_text"></p>
|
||||
</div>
|
||||
<div id="phpbb_confirm" class="phpbb_alert">
|
||||
<a href="#" class="alert_close"></a>
|
||||
@@ -34,7 +34,7 @@
|
||||
</div>
|
||||
|
||||
<script src="{T_JQUERY_LINK}"></script>
|
||||
<!-- IF S_ALLOW_CDN --><script>window.jQuery || document.write('\x3Cscript src="{T_ASSETS_PATH}/javascript/jquery-3.4.1.min.js?assets_version={T_ASSETS_VERSION}">\x3C/script>');</script><!-- ENDIF -->
|
||||
<!-- IF S_ALLOW_CDN --><script>window.jQuery || document.write('\x3Cscript src="{T_ASSETS_PATH}/javascript/jquery-3.7.1.min.js?assets_version={T_ASSETS_VERSION}">\x3C/script>');</script><!-- ENDIF -->
|
||||
<script src="{T_ASSETS_PATH}/javascript/core.js?assets_version={T_ASSETS_VERSION}"></script>
|
||||
<!-- INCLUDEJS ajax.js -->
|
||||
<!-- INCLUDEJS admin.js -->
|
||||
@@ -42,5 +42,7 @@
|
||||
<!-- EVENT acp_overall_footer_after -->
|
||||
{$SCRIPTS}
|
||||
|
||||
{% EVENT acp_overall_footer_body_after %}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -12,10 +12,10 @@
|
||||
|
||||
<script>
|
||||
// <![CDATA[
|
||||
var jump_page = '{LA_JUMP_PAGE}{L_COLON}';
|
||||
var on_page = '{CURRENT_PAGE}';
|
||||
var per_page = '{PER_PAGE}';
|
||||
var base_url = '{BASE_URL|e('js')}';
|
||||
var jump_page = "{{ lang_js('JUMP_PAGE') ~ lang_js('COLON') }}";
|
||||
var on_page = '{{ CURRENT_PAGE }}';
|
||||
var per_page = '{{ PER_PAGE }}';
|
||||
var base_url = "{{ BASE_URL|e('js') }}";
|
||||
|
||||
/**
|
||||
* Jump to page
|
||||
|
@@ -269,8 +269,14 @@ function mark_one_option(id, field_name, s) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset role dropdown field to Select role... if an option gets changed
|
||||
*/
|
||||
* (Re)set the permission role dropdown.
|
||||
*
|
||||
* Try and match the set permissions to an existing role.
|
||||
* Otherwise reset the dropdown to "Select a role.."
|
||||
*
|
||||
* @param {string} id The fieldset identifier
|
||||
* @returns {void}
|
||||
*/
|
||||
function reset_role(id) {
|
||||
var t = document.getElementById(id);
|
||||
|
||||
@@ -278,18 +284,37 @@ function reset_role(id) {
|
||||
return;
|
||||
}
|
||||
|
||||
t.options[0].selected = true;
|
||||
// Before resetting the role dropdown, try and match any permission role
|
||||
var parent = t.parentNode,
|
||||
roleId = match_role_settings(id.replace('role', 'perm')),
|
||||
text = no_role_assigned,
|
||||
index = 0;
|
||||
|
||||
var parent = t.parentNode;
|
||||
parent.querySelector('span.dropdown-trigger').innerText = no_role_assigned;
|
||||
parent.querySelector('input[data-name^=role]').value = '0';
|
||||
// If a role permissions was matched, grab that option's value and index
|
||||
if (roleId) {
|
||||
for (var i = 0; i < t.options.length; i++) {
|
||||
if (parseInt(t.options[i].value, 10) === roleId) {
|
||||
text = t.options[i].text;
|
||||
index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Update the select's value and selected index
|
||||
t.value = roleId;
|
||||
t.options[index].selected = true;
|
||||
|
||||
// Update the dropdown trigger to show the new value
|
||||
parent.querySelector('span.dropdown-trigger').innerText = text;
|
||||
parent.querySelector('input[data-name^=role]').value = roleId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load role and set options accordingly
|
||||
*/
|
||||
function set_role_settings(role_id, target_id) {
|
||||
settings = role_options[role_id];
|
||||
var settings = role_options[role_id];
|
||||
|
||||
if (!settings) {
|
||||
return;
|
||||
@@ -302,3 +327,51 @@ function set_role_settings(role_id, target_id) {
|
||||
mark_one_option(target_id, r, (settings[r] === 1) ? 'y' : 'n');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Match the set permissions against the available roles.
|
||||
*
|
||||
* @param {string} id The parent fieldset identifier
|
||||
* @return {number} The permission role identifier
|
||||
*/
|
||||
function match_role_settings(id) {
|
||||
var fieldset = document.getElementById(id),
|
||||
radios = fieldset.getElementsByTagName('input'),
|
||||
set = {};
|
||||
|
||||
// Iterate over all the radio buttons
|
||||
for (var i = 0; i < radios.length; i++) {
|
||||
var matches = radios[i].id.match(/setting\[\d+]\[\d+]\[([a-z_]+)]/);
|
||||
|
||||
// Make sure the name attribute matches, the radio is checked and it is not the "No" (-1) value.
|
||||
if (matches !== null && radios[i].checked && radios[i].value !== '-1') {
|
||||
set[matches[1]] = parseInt(radios[i].value, 10);
|
||||
}
|
||||
}
|
||||
|
||||
// Sort and stringify the 'set permissions' object
|
||||
set = sort_and_stringify(set);
|
||||
|
||||
// Iterate over the available role options and return the first match
|
||||
for (var r in role_options)
|
||||
{
|
||||
if (sort_and_stringify(role_options[r]) === set) {
|
||||
return parseInt(r, 10);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort and stringify an Object so it can be easily compared against another object.
|
||||
*
|
||||
* @param {object} obj The object to sort (by key) and stringify
|
||||
* @return {string} The sorted object as a string
|
||||
*/
|
||||
function sort_and_stringify(obj) {
|
||||
return JSON.stringify(Object.keys(obj).sort().reduce(function (result, key) {
|
||||
result[key] = obj[key];
|
||||
return result;
|
||||
}, {}));
|
||||
}
|
||||
|
@@ -17,11 +17,13 @@
|
||||
</div>
|
||||
|
||||
<script src="{T_JQUERY_LINK}"></script>
|
||||
<!-- IF S_ALLOW_CDN --><script>window.jQuery || document.write('\x3Cscript src="{T_ASSETS_PATH}/javascript/jquery-3.4.1.min.js?assets_version={T_ASSETS_VERSION}">\x3C/script>');</script><!-- ENDIF -->
|
||||
<!-- IF S_ALLOW_CDN --><script>window.jQuery || document.write('\x3Cscript src="{T_ASSETS_PATH}/javascript/jquery-3.7.1.min.js?assets_version={T_ASSETS_VERSION}">\x3C/script>');</script><!-- ENDIF -->
|
||||
<script src="{T_ASSETS_PATH}/javascript/core.js?assets_version={T_ASSETS_VERSION}"></script>
|
||||
|
||||
<!-- EVENT acp_simple_footer_after -->
|
||||
{$SCRIPTS}
|
||||
|
||||
{% EVENT acp_simple_footer_body_after %}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -218,23 +218,6 @@ $(function() {
|
||||
|
||||
// Prepare dropdown
|
||||
phpbb.prepareRolesDropdown();
|
||||
|
||||
// Reset role drop-down on modifying permissions in advanced tab
|
||||
$('div.permissions-switch > a').on('click', function () {
|
||||
$.each($('input[type=radio][name^="setting["]'), function () {
|
||||
var $this = $(this);
|
||||
$this.on('click', function () {
|
||||
var $rolesOptions = $this.closest('fieldset.permissions').find('.roles-options'),
|
||||
rolesSelect = $rolesOptions.find('select > option')[0];
|
||||
|
||||
// Set selected setting
|
||||
$rolesOptions.children('span')
|
||||
.text(rolesSelect.text);
|
||||
$rolesOptions.children('input[type=hidden]')
|
||||
.val(rolesSelect.value);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
})(jQuery); // Avoid conflicts with other libraries
|
||||
|
@@ -948,7 +948,10 @@ phpbb.timezonePreselectSelect = function(forceSelector) {
|
||||
var minutes = offset % 60;
|
||||
var hours = (offset - minutes) / 60;
|
||||
|
||||
if (hours < 10) {
|
||||
if (hours === 0) {
|
||||
hours = '00';
|
||||
sign = '+';
|
||||
} else if (hours < 10) {
|
||||
hours = '0' + hours.toString();
|
||||
} else {
|
||||
hours = hours.toString();
|
||||
@@ -1745,49 +1748,81 @@ phpbb.lazyLoadAvatars = function loadAvatars() {
|
||||
});
|
||||
};
|
||||
|
||||
var recaptchaForm = $('.g-recaptcha').parents('form');
|
||||
var submitButton = null;
|
||||
var programaticallySubmitted = false;
|
||||
phpbb.recaptcha = {
|
||||
button: null,
|
||||
ready: false,
|
||||
|
||||
phpbb.recaptchaOnLoad = function () {
|
||||
// Listen to submit buttons in order to know which one was pressed
|
||||
$('input[type="submit"]').each(function () {
|
||||
$(this).on('click', function () {
|
||||
submitButton = this;
|
||||
token: $('input[name="recaptcha_token"]'),
|
||||
form: $('.g-recaptcha').parents('form'),
|
||||
v3: $('[data-recaptcha-v3]'),
|
||||
|
||||
load: function() {
|
||||
phpbb.recaptcha.bindButton();
|
||||
phpbb.recaptcha.bindForm();
|
||||
},
|
||||
bindButton: function() {
|
||||
phpbb.recaptcha.form.find('input[type="submit"]').on('click', function() {
|
||||
// Listen to all the submit buttons for the form that has reCAPTCHA protection,
|
||||
// and store it so we can click the exact same button later on when we are ready.
|
||||
phpbb.recaptcha.button = this;
|
||||
});
|
||||
});
|
||||
},
|
||||
bindForm: function() {
|
||||
phpbb.recaptcha.form.on('submit', function(e) {
|
||||
// If ready is false, it means the user pressed a submit button.
|
||||
// And the form was not submitted by us, after the token was loaded.
|
||||
if (!phpbb.recaptcha.ready) {
|
||||
// If version 3 is used, we need to make a different execution,
|
||||
// including the action and the site key.
|
||||
if (phpbb.recaptcha.v3.length) {
|
||||
grecaptcha.execute(
|
||||
phpbb.recaptcha.v3.data('recaptcha-v3'),
|
||||
{action: phpbb.recaptcha.v3.val()}
|
||||
).then(function(token) {
|
||||
// Place the token inside the form
|
||||
phpbb.recaptcha.token.val(token);
|
||||
|
||||
recaptchaForm.on('submit', function (e) {
|
||||
if (!programaticallySubmitted) {
|
||||
grecaptcha.execute();
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
}
|
||||
// And now we submit the form.
|
||||
phpbb.recaptcha.submitForm();
|
||||
});
|
||||
} else {
|
||||
// Regular version 2 execution
|
||||
grecaptcha.execute();
|
||||
}
|
||||
|
||||
phpbb.recaptchaOnSubmit = function () {
|
||||
programaticallySubmitted = true;
|
||||
// If concrete button was clicked (e.g. preview instead of submit),
|
||||
// let's trigger the same action
|
||||
if (submitButton) {
|
||||
submitButton.click();
|
||||
} else {
|
||||
// Rename input[name="submit"] so that we can submit the form
|
||||
if (typeof recaptchaForm.submit !== 'function') {
|
||||
recaptchaForm.submit.name = 'submit_btn';
|
||||
// Do not submit the form
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
},
|
||||
submitForm: function() {
|
||||
// Now we are ready, so set it to true.
|
||||
// so the 'submit' event doesn't run multiple times.
|
||||
phpbb.recaptcha.ready = true;
|
||||
|
||||
if (phpbb.recaptcha.button) {
|
||||
// If there was a specific button pressed initially, trigger the same button
|
||||
phpbb.recaptcha.button.click();
|
||||
} else {
|
||||
if (typeof phpbb.recaptcha.form.submit !== 'function') {
|
||||
// Rename input[name="submit"] so that we can submit the form
|
||||
phpbb.recaptcha.form.submit.name = 'submit_btn';
|
||||
}
|
||||
|
||||
phpbb.recaptcha.form.submit();
|
||||
}
|
||||
recaptchaForm.submit();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// reCAPTCHA doesn't accept callback functions nested inside objects
|
||||
// reCAPTCHA v2 doesn't accept callback functions nested inside objects
|
||||
// so we need to make this helper functions here
|
||||
window.phpbbRecaptchaOnLoad = function() {
|
||||
phpbb.recaptchaOnLoad();
|
||||
}
|
||||
phpbb.recaptcha.load();
|
||||
};
|
||||
|
||||
window.phpbbRecaptchaOnSubmit = function() {
|
||||
phpbb.recaptchaOnSubmit();
|
||||
}
|
||||
phpbb.recaptcha.submitForm();
|
||||
};
|
||||
|
||||
$(window).on('load', phpbb.lazyLoadAvatars);
|
||||
|
||||
@@ -1795,6 +1830,11 @@ $(window).on('load', phpbb.lazyLoadAvatars);
|
||||
* Apply code editor to all textarea elements with data-bbcode attribute
|
||||
*/
|
||||
$(function() {
|
||||
// reCAPTCHA v3 needs to be initialized
|
||||
if (phpbb.recaptcha.v3.length) {
|
||||
phpbb.recaptcha.load();
|
||||
}
|
||||
|
||||
$('textarea[data-bbcode]').each(function() {
|
||||
phpbb.applyCodeEditor(this);
|
||||
});
|
||||
|
2
phpBB/assets/javascript/jquery-3.4.1.min.js
vendored
2
phpBB/assets/javascript/jquery-3.4.1.min.js
vendored
File diff suppressed because one or more lines are too long
2
phpBB/assets/javascript/jquery-3.7.1.min.js
vendored
Normal file
2
phpBB/assets/javascript/jquery-3.7.1.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
4
phpBB/assets/plupload/plupload.full.min.js
vendored
4
phpBB/assets/plupload/plupload.full.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -84,7 +84,7 @@ $user = $phpbb_container->get('user');
|
||||
$user->data['user_id'] = ANONYMOUS;
|
||||
$user->ip = '127.0.0.1';
|
||||
|
||||
$application = new \phpbb\console\application('phpBB Console', PHPBB_VERSION, $language);
|
||||
$application = new \phpbb\console\application('phpBB Console', PHPBB_VERSION, $language, $config);
|
||||
$application->setDispatcher($phpbb_container->get('dispatcher'));
|
||||
$application->register_container_commands($phpbb_container->get('console.command_collection'));
|
||||
$application->run($input);
|
||||
|
29
phpBB/cache/.htaccess
vendored
29
phpBB/cache/.htaccess
vendored
@@ -1,4 +1,25 @@
|
||||
<Files *>
|
||||
Order Allow,Deny
|
||||
Deny from All
|
||||
</Files>
|
||||
# With Apache 2.4 the "Order, Deny" syntax has been deprecated and moved from
|
||||
# module mod_authz_host to a new module called mod_access_compat (which may be
|
||||
# disabled) and a new "Require" syntax has been introduced to mod_authz_core.
|
||||
# We could just conditionally provide both versions, but unfortunately Apache
|
||||
# does not explicitly tell us its version if the module mod_version is not
|
||||
# available. In this case, we check for the availability of module
|
||||
# mod_authz_core (which should be on 2.4 or higher only) as a best guess.
|
||||
<IfModule mod_version.c>
|
||||
<IfVersion < 2.4>
|
||||
Order Allow,Deny
|
||||
Deny from All
|
||||
</IfVersion>
|
||||
<IfVersion >= 2.4>
|
||||
Require all denied
|
||||
</IfVersion>
|
||||
</IfModule>
|
||||
<IfModule !mod_version.c>
|
||||
<IfModule !mod_authz_core.c>
|
||||
Order Allow,Deny
|
||||
Deny from All
|
||||
</IfModule>
|
||||
<IfModule mod_authz_core.c>
|
||||
Require all denied
|
||||
</IfModule>
|
||||
</IfModule>
|
||||
|
@@ -12,7 +12,7 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* Minimum Requirement: PHP 7.1.0
|
||||
* Minimum Requirement: PHP 7.2.0
|
||||
*/
|
||||
|
||||
if (!defined('IN_PHPBB'))
|
||||
@@ -51,20 +51,10 @@ if (!defined('PHPBB_INSTALLED'))
|
||||
$server_port = 443;
|
||||
}
|
||||
|
||||
$script_name = (!empty($_SERVER['PHP_SELF'])) ? $_SERVER['PHP_SELF'] : getenv('PHP_SELF');
|
||||
if (!$script_name)
|
||||
{
|
||||
$script_name = (!empty($_SERVER['REQUEST_URI'])) ? $_SERVER['REQUEST_URI'] : getenv('REQUEST_URI');
|
||||
}
|
||||
|
||||
// $phpbb_root_path accounts for redirects from e.g. /adm
|
||||
$script_path = trim(dirname($script_name)) . '/' . $phpbb_root_path . 'install/app.' . $phpEx;
|
||||
// Replace any number of consecutive backslashes and/or slashes with a single slash
|
||||
// (could happen on some proxy setups and/or Windows servers)
|
||||
$script_path = preg_replace('#[\\\\/]{2,}#', '/', $script_path);
|
||||
$script_path = phpbb_get_install_redirect($phpbb_root_path, $phpEx);
|
||||
|
||||
// Eliminate . and .. from the path
|
||||
require($phpbb_root_path . 'phpbb/filesystem.' . $phpEx);
|
||||
require($phpbb_root_path . 'phpbb/filesystem/filesystem.' . $phpEx);
|
||||
$phpbb_filesystem = new phpbb\filesystem\filesystem();
|
||||
$script_path = $phpbb_filesystem->clean_path($script_path);
|
||||
|
||||
@@ -96,6 +86,8 @@ include($phpbb_root_path . 'includes/functions_compatibility.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/constants.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx);
|
||||
|
||||
// Registered before building the container so the development environment stay capable of intercepting
|
||||
// the container builder exceptions.
|
||||
if (PHPBB_ENVIRONMENT === 'development')
|
||||
{
|
||||
\phpbb\debug\debug::enable();
|
||||
@@ -112,6 +104,14 @@ $phpbb_class_loader_ext->register();
|
||||
try
|
||||
{
|
||||
$phpbb_container_builder = new \phpbb\di\container_builder($phpbb_root_path, $phpEx);
|
||||
|
||||
// Check that cache directory is writable before trying to build container
|
||||
$cache_dir = $phpbb_container_builder->get_cache_dir();
|
||||
if (file_exists($cache_dir) && !is_writable($phpbb_container_builder->get_cache_dir()))
|
||||
{
|
||||
die('Unable to write to the cache directory path "' . $cache_dir . '". Ensure that the web server user can write to the cache folder.');
|
||||
}
|
||||
|
||||
$phpbb_container = $phpbb_container_builder->with_config($phpbb_config_php_file)->get_container();
|
||||
}
|
||||
catch (InvalidArgumentException $e)
|
||||
@@ -129,6 +129,11 @@ catch (InvalidArgumentException $e)
|
||||
}
|
||||
}
|
||||
|
||||
if ($phpbb_container->getParameter('debug.error_handler'))
|
||||
{
|
||||
\phpbb\debug\debug::enable();
|
||||
}
|
||||
|
||||
$phpbb_class_loader->set_cache($phpbb_container->get('cache.driver'));
|
||||
$phpbb_class_loader_ext->set_cache($phpbb_container->get('cache.driver'));
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user