mirror of
https://github.com/phpbb/phpbb.git
synced 2025-09-18 03:52:10 +02:00
Compare commits
856 Commits
release-3.
...
release-3.
Author | SHA1 | Date | |
---|---|---|---|
|
a5d83e12ec | ||
|
08c146ee34 | ||
|
dc49a8a199 | ||
|
d811743303 | ||
|
65f7137825 | ||
|
04ef19595c | ||
|
71f9c6ebe5 | ||
|
cc556122f3 | ||
|
8938a0ce98 | ||
|
689ebd3bb6 | ||
|
ea8334b693 | ||
|
e50e5dbcae | ||
|
127f5a3ffa | ||
|
9402339af9 | ||
|
ca5243810f | ||
|
840cb510e4 | ||
|
c1fa252fc1 | ||
|
fd822ade20 | ||
|
c255e1fae8 | ||
|
1c4f49249f | ||
|
65c6bae91d | ||
|
2a49420124 | ||
|
ecdc05a13e | ||
|
05a8baffdb | ||
|
3f6119c42b | ||
|
f0dbfc56d5 | ||
|
acf9cdba01 | ||
|
a6939fcb8e | ||
|
fb29d79bc1 | ||
|
b357f78546 | ||
|
58bd7a90a9 | ||
|
170613848a | ||
|
0914123391 | ||
|
e754a51acc | ||
|
e3ec1440ef | ||
|
635f73bc06 | ||
|
3f58b5f9ab | ||
|
7a3e55bdb3 | ||
|
03c30d4bc6 | ||
|
1a1def5339 | ||
|
fbc8a4a275 | ||
|
b63b83a920 | ||
|
0984dbb3f8 | ||
|
18b29ca074 | ||
|
7034986427 | ||
|
18fe3b2833 | ||
|
ca9e3eb528 | ||
|
e84459ba67 | ||
|
5808c9fae1 | ||
|
bc404a3701 | ||
|
0082dd8039 | ||
|
90a80b7b31 | ||
|
e6b7defd38 | ||
|
7254980753 | ||
|
33a62648d1 | ||
|
f5d49b61bb | ||
|
e53343857a | ||
|
994c1d79b1 | ||
|
4c58dfc19a | ||
|
a233f98bbf | ||
|
e72f6d4236 | ||
|
ff22d54eae | ||
|
5bd497ae54 | ||
|
8ae7d2495c | ||
|
8d8886e7ba | ||
|
d550f925ab | ||
|
f178c06b4f | ||
|
d0486964ce | ||
|
67995e1e09 | ||
|
2d33b6adc6 | ||
|
771be9310d | ||
|
3c8bdc8fb4 | ||
|
3dd1f9e707 | ||
|
8303058ac6 | ||
|
f645865333 | ||
|
4efcfc2477 | ||
|
8a624c4dcc | ||
|
1cbc6dedab | ||
|
82e1b8fd72 | ||
|
f9a596c544 | ||
|
3bf133c96c | ||
|
d0540eea52 | ||
|
601ffba0cf | ||
|
eadd5851d0 | ||
|
d44dde390a | ||
|
450402ea42 | ||
|
43731202fd | ||
|
4147c38838 | ||
|
2f277b6f67 | ||
|
32f3ddca70 | ||
|
d4ecb910d8 | ||
|
80b72e3d0b | ||
|
5bf3e4b3c6 | ||
|
e6a0e4caed | ||
|
2edf7056f0 | ||
|
f991a99a14 | ||
|
71a3f12d2a | ||
|
827ded82b8 | ||
|
74054317d2 | ||
|
afddb81acf | ||
|
91ab27ecc9 | ||
|
45c3cb52e4 | ||
|
927220c873 | ||
|
dcdb0dcd23 | ||
|
6abcfe41e0 | ||
|
c8670d5324 | ||
|
0b2369901a | ||
|
d114a3d415 | ||
|
948ce2d84f | ||
|
59396771e6 | ||
|
051644d663 | ||
|
22b8632426 | ||
|
0f95e607ff | ||
|
4cf998e9df | ||
|
716cff0c97 | ||
|
2cc9b6a857 | ||
|
ac87784a11 | ||
|
d10a5b67a1 | ||
|
877e15a6e6 | ||
|
4826f7c1d3 | ||
|
d7c417de69 | ||
|
376e85c1d6 | ||
|
18eaf10e5a | ||
|
63f7fb1ea6 | ||
|
9267235f30 | ||
|
4c3ddea09f | ||
|
bc86210db8 | ||
|
191a776ce6 | ||
|
896249f0e8 | ||
|
bac6dbda5e | ||
|
1b46435734 | ||
|
cdca848018 | ||
|
481a592b8d | ||
|
7f69580df3 | ||
|
7646280d51 | ||
|
b567c6e241 | ||
|
45199adebd | ||
|
fc50fd272b | ||
|
09f6637597 | ||
|
7b2ffaf78c | ||
|
7313eb54b4 | ||
|
abd6bd8154 | ||
|
e0e59bc6c0 | ||
|
0ea839e595 | ||
|
1470985ff2 | ||
|
c3896c8b5d | ||
|
c006479274 | ||
|
35b7e95098 | ||
|
5cf1fc62db | ||
|
849fd9df7d | ||
|
d81df55963 | ||
|
9f2f541b4a | ||
|
d1df78604b | ||
|
15f6d66a61 | ||
|
1d38abdd7e | ||
|
927c211d41 | ||
|
779758f219 | ||
|
fb481f96d3 | ||
|
085a839963 | ||
|
dcadfe092c | ||
|
59027c94f2 | ||
|
612abf391f | ||
|
fbff3b77bd | ||
|
38d0f2892e | ||
|
20a4d095de | ||
|
a620ce0713 | ||
|
0572d6e33a | ||
|
6c09910c10 | ||
|
3567f45e3d | ||
|
02a35baf70 | ||
|
bad8f0b9bc | ||
|
0d17b32e25 | ||
|
0f640ab7af | ||
|
766839a60a | ||
|
a0bd23b747 | ||
|
cb44dbc8cb | ||
|
c3b7332ea8 | ||
|
b9189ec325 | ||
|
8af6df3946 | ||
|
366e8583c8 | ||
|
74f723e4ec | ||
|
d2ad751851 | ||
|
20c03cccdd | ||
|
76b3fbc006 | ||
|
c40642b827 | ||
|
9d7acd1897 | ||
|
77b3f36992 | ||
|
a0abb1e10e | ||
|
2f6993fa81 | ||
|
49c19a267f | ||
|
3d93fd40ed | ||
|
f2c4bf176d | ||
|
dd89a369f3 | ||
|
c0882c1d34 | ||
|
7cad25e4cb | ||
|
ff411ee81b | ||
|
14fd750b08 | ||
|
bc96a9f1f6 | ||
|
7df7cfff33 | ||
|
45ea013b11 | ||
|
3e5e8fd0e3 | ||
|
9658ecae8b | ||
|
d6771d6a7f | ||
|
c656bd60ef | ||
|
4139e4f2b5 | ||
|
3489780faa | ||
|
40bc4ac484 | ||
|
3ccaac488b | ||
|
19b018ece0 | ||
|
54e31efcbc | ||
|
cff57f9076 | ||
|
d9991bdaf1 | ||
|
0fc1de279e | ||
|
87f82c404e | ||
|
efc2b46303 | ||
|
fbcbd79d79 | ||
|
97a0f49be4 | ||
|
21803dc99b | ||
|
c127591d25 | ||
|
9e6207add3 | ||
|
aa84ea8e5d | ||
|
2d742beb92 | ||
|
84d2d767b9 | ||
|
5f6fa321ef | ||
|
cc42c09a95 | ||
|
ea51dc25c1 | ||
|
0f000aff0d | ||
|
445a8be895 | ||
|
956c7186ec | ||
|
47e7cd7194 | ||
|
48659c2ce1 | ||
|
aa6c2fae5c | ||
|
0e68c35cfd | ||
|
71f82f2615 | ||
|
573507e6a5 | ||
|
853362ddad | ||
|
ea73920261 | ||
|
b6ea338309 | ||
|
b20d98a229 | ||
|
a03cec5b8d | ||
|
fadec0d2b9 | ||
|
3c223b3a5d | ||
|
daee389e53 | ||
|
aad13389ce | ||
|
620d033e06 | ||
|
fe79705e99 | ||
|
90b7d1fbda | ||
|
df96351244 | ||
|
5235e6de53 | ||
|
7e2d544016 | ||
|
aae6341989 | ||
|
8eda17f430 | ||
|
230e737790 | ||
|
08d169c109 | ||
|
e40afd8cd1 | ||
|
ad3b7830b4 | ||
|
3a4f1bc061 | ||
|
96adf7f0d6 | ||
|
7d5d5b0f06 | ||
|
daae2147c8 | ||
|
c084990a68 | ||
|
41b3450f2f | ||
|
959e5fb79d | ||
|
76ffd288fe | ||
|
800411e514 | ||
|
3322117c38 | ||
|
591eff9e78 | ||
|
47e418e50e | ||
|
839987fa19 | ||
|
533d2b90b8 | ||
|
99a99c5412 | ||
|
5505f98aad | ||
|
fbe5193359 | ||
|
b51247e1da | ||
|
c60caace5d | ||
|
8f84119743 | ||
|
1ee9cc91d4 | ||
|
e1d2c4c900 | ||
|
0e53442fd4 | ||
|
365489a317 | ||
|
10753454bf | ||
|
78ff392b64 | ||
|
a3faf1fefc | ||
|
642bfe9a39 | ||
|
5e36dd3d0b | ||
|
0f46d35f75 | ||
|
b01b3b8b94 | ||
|
997bdc7778 | ||
|
30b3fbb2cf | ||
|
ff76a3e433 | ||
|
6c98e3b12f | ||
|
390a37492d | ||
|
16620ea3d2 | ||
|
e9d8425f15 | ||
|
4dcd2351ea | ||
|
255368843c | ||
|
619d323dd1 | ||
|
8e3a38e80d | ||
|
34cfa5f885 | ||
|
2f1d2e847e | ||
|
2df3703b2a | ||
|
a1a3daaca8 | ||
|
c2836725f9 | ||
|
dbd9c1f242 | ||
|
d98fd7868b | ||
|
6d58c4a4b5 | ||
|
0d15a95f97 | ||
|
6bbc18fa40 | ||
|
16c3b40b4e | ||
|
ad4889be4b | ||
|
34ebbbc7c3 | ||
|
1ff01d722a | ||
|
ba5243ba76 | ||
|
8323de331e | ||
|
b80b624551 | ||
|
6e6a2c5df8 | ||
|
df0388ccc5 | ||
|
114cfe2c27 | ||
|
36d4169768 | ||
|
260dc5ed7c | ||
|
f8fb3e0f9f | ||
|
372324cead | ||
|
39f5b82bc3 | ||
|
55f7438187 | ||
|
c77798b1a3 | ||
|
221cd3eb68 | ||
|
bc4c82bae5 | ||
|
577d669ba7 | ||
|
a298ed1a66 | ||
|
43ea7168d1 | ||
|
c9ea560c63 | ||
|
0fd04f2e6f | ||
|
74285b4308 | ||
|
cdf6464382 | ||
|
4533dd9fa0 | ||
|
9b1e2e523c | ||
|
0e114f91f4 | ||
|
9be9062df3 | ||
|
dc32b900c5 | ||
|
ac36cc25eb | ||
|
af2bf4ef36 | ||
|
87209fdd06 | ||
|
c259a9b387 | ||
|
ad4fe1799f | ||
|
6984f17f62 | ||
|
2f6a258175 | ||
|
552691efbf | ||
|
85898d3d2c | ||
|
466bdee8e6 | ||
|
10f430f393 | ||
|
ffc6623dd4 | ||
|
e3a85ff0a7 | ||
|
163292bc11 | ||
|
a41b16d06a | ||
|
cac8ac8242 | ||
|
6f8c0df1c6 | ||
|
c891277996 | ||
|
cefbd39b82 | ||
|
77f1bac64b | ||
|
849cd74700 | ||
|
51ef1ae346 | ||
|
a02b124dd0 | ||
|
3cb09358fe | ||
|
9f2867b115 | ||
|
2059d57c04 | ||
|
0cc0920734 | ||
|
8b8f693d00 | ||
|
8afa9fdf28 | ||
|
244ff0f969 | ||
|
eca10dc08f | ||
|
8e54c9ef8b | ||
|
832a87b924 | ||
|
05d0879795 | ||
|
f02afe58bc | ||
|
d98a1c4bc4 | ||
|
868d55913d | ||
|
20148e4d06 | ||
|
fce30d1d91 | ||
|
2406fe2e5e | ||
|
1f0c616974 | ||
|
4dfadfc97f | ||
|
1dd0ceabf6 | ||
|
98a6133c1e | ||
|
1ad64f89b8 | ||
|
bf8ee698f9 | ||
|
59b52d6312 | ||
|
40354f1f90 | ||
|
71e632b9f0 | ||
|
cb226f83be | ||
|
85e4566223 | ||
|
55a0570567 | ||
|
b4e673acc1 | ||
|
cd4190a72d | ||
|
6b798d02fb | ||
|
cdaed8dabf | ||
|
165e0edb2a | ||
|
5a6933fee7 | ||
|
047c7375a5 | ||
|
f1eda6868f | ||
|
4e5f29a21b | ||
|
88d7c4fe57 | ||
|
32d569c594 | ||
|
c6383d3f89 | ||
|
1d25c80a9c | ||
|
0b3951cb81 | ||
|
ae76bfc99e | ||
|
cc62b68243 | ||
|
6972d06f59 | ||
|
2fd2fb94cf | ||
|
06c980f1ec | ||
|
f66ca6a9cc | ||
|
ec24f739e8 | ||
|
c588332aa5 | ||
|
51d830a6d3 | ||
|
32d9efff47 | ||
|
7d73d1ff83 | ||
|
c958ba13e8 | ||
|
2f17757f4e | ||
|
b8bbf9db03 | ||
|
4267cc3a43 | ||
|
90e9d5c462 | ||
|
cdd56c0505 | ||
|
18f9c9f6e2 | ||
|
97040dc6ff | ||
|
931582aad9 | ||
|
3910387ee5 | ||
|
d2f95ef875 | ||
|
537dca0892 | ||
|
2436af94e3 | ||
|
75f57fa407 | ||
|
a078336cb1 | ||
|
4da479d47f | ||
|
bc08813866 | ||
|
6b435cbf13 | ||
|
72f6241aa2 | ||
|
585a3ed863 | ||
|
abb01946bd | ||
|
27e33f39f7 | ||
|
c3578bc3e3 | ||
|
0d3ca3883e | ||
|
a084b07495 | ||
|
bf397cb985 | ||
|
73b9327631 | ||
|
bd59241110 | ||
|
33584f12f0 | ||
|
2ae08dc3ba | ||
|
32ba128ea5 | ||
|
70aa4407d3 | ||
|
5503c09cd5 | ||
|
6d589a8bb9 | ||
|
43c52b073b | ||
|
4b8e8df55c | ||
|
dccb5564d2 | ||
|
857a085496 | ||
|
ce48b4de57 | ||
|
2efdaaa0e2 | ||
|
64178b40b8 | ||
|
65921a7891 | ||
|
f008708d5c | ||
|
d737430a03 | ||
|
b3e8eb9feb | ||
|
bd0244180b | ||
|
3ee5472a8c | ||
|
557f85e7fc | ||
|
a019a86bfc | ||
|
71a70500ea | ||
|
863d65112b | ||
|
429ecb938c | ||
|
a36f96aefa | ||
|
b14043b276 | ||
|
6bcc372af5 | ||
|
eccb3d6602 | ||
|
773f6d08a5 | ||
|
463e8e4b13 | ||
|
7c99fcf782 | ||
|
775d1c855a | ||
|
e050cf5c11 | ||
|
bb11294b96 | ||
|
488fd8f54c | ||
|
f68e98c064 | ||
|
c016e09ca4 | ||
|
48696b5148 | ||
|
263fbe54fc | ||
|
4a92a8efb5 | ||
|
c12d67cd90 | ||
|
52afa74f4e | ||
|
b00a39b9ad | ||
|
6078bae7f8 | ||
|
317f3e848f | ||
|
2ee8bd0c4a | ||
|
a277f9cf07 | ||
|
8e1461ca61 | ||
|
9fb649793d | ||
|
b74e811496 | ||
|
7e1e3e1a5e | ||
|
0771eaa732 | ||
|
1455be2260 | ||
|
3bf64de247 | ||
|
2dae36e3fb | ||
|
6fd507f60d | ||
|
5330ea0f09 | ||
|
3038bf5eaf | ||
|
ba13832085 | ||
|
2081a78095 | ||
|
f68820762b | ||
|
f222f8a84a | ||
|
d51c67440e | ||
|
0cc41be3c0 | ||
|
4ac2547d62 | ||
|
ef132e1531 | ||
|
55223e6840 | ||
|
29d2c66922 | ||
|
941be83395 | ||
|
8e8e25cc1f | ||
|
e7289fa019 | ||
|
5b501e594c | ||
|
4eecc95a42 | ||
|
5eb493fa86 | ||
|
43e0283fb1 | ||
|
8cf2790d55 | ||
|
eaafb758ce | ||
|
33cd613406 | ||
|
20e08aa2a0 | ||
|
da7c41f167 | ||
|
ef91c6abed | ||
|
f3fe610a5e | ||
|
0026ed02ae | ||
|
befacabf7e | ||
|
775df0eb8a | ||
|
3df9b2c8f8 | ||
|
e8454e018d | ||
|
78a0d10a5a | ||
|
960dc08946 | ||
|
d0a5f87a44 | ||
|
a1ecb6db69 | ||
|
63db42522b | ||
|
a840d70bbf | ||
|
51952005eb | ||
|
b54aa81cdd | ||
|
6f109dd1ef | ||
|
38082c41e3 | ||
|
652e3da28d | ||
|
927cc2ebad | ||
|
2ec4855cba | ||
|
55b854906d | ||
|
1c52968df6 | ||
|
cddb884be6 | ||
|
53b9216c78 | ||
|
a3c10f575b | ||
|
2f53761eaf | ||
|
c4b93c9c1c | ||
|
65a4f0d631 | ||
|
9170261885 | ||
|
f75a01182f | ||
|
7f1c4cd205 | ||
|
e4336de68d | ||
|
4653951673 | ||
|
a19bf11f73 | ||
|
9595946508 | ||
|
773a701d62 | ||
|
c60dbede3e | ||
|
aaa99b4719 | ||
|
804236bce4 | ||
|
cf8c13b04c | ||
|
83f737a30a | ||
|
6764bea40c | ||
|
3708770eb9 | ||
|
8d3716ab91 | ||
|
cff2895599 | ||
|
516670225d | ||
|
256730c76a | ||
|
e9cbb45435 | ||
|
2a53831124 | ||
|
7dc1af25bc | ||
|
d316927225 | ||
|
cf2b96def7 | ||
|
9d88238f89 | ||
|
b2141fd1a8 | ||
|
4cf666f0bc | ||
|
ff8b5058e0 | ||
|
08acf2acba | ||
|
b63c61d099 | ||
|
72248cab45 | ||
|
73073ac8c3 | ||
|
9961aefa38 | ||
|
6350798e97 | ||
|
0a512b2695 | ||
|
e30518461c | ||
|
10d96d4f33 | ||
|
191b80a750 | ||
|
c103c42857 | ||
|
dcf90a8d8b | ||
|
a8fb33218c | ||
|
e6e4c0e62d | ||
|
7e6371ea8e | ||
|
c3fd07a5f0 | ||
|
559325fbd6 | ||
|
0d7625c534 | ||
|
06507f9fa6 | ||
|
9ca3cd519a | ||
|
e7262e2d39 | ||
|
734972cc3d | ||
|
03348087d8 | ||
|
f57f09f814 | ||
|
3572f4c92e | ||
|
c7bbcd7b84 | ||
|
c0f3463819 | ||
|
c3b30144e3 | ||
|
aa3c5286cd | ||
|
8e1102b1da | ||
|
269e253524 | ||
|
23bdb2eede | ||
|
4cdec74e94 | ||
|
1b01667c7b | ||
|
fdcedb262f | ||
|
ed378a2ec3 | ||
|
96bdcedacd | ||
|
c938077172 | ||
|
58dfff38fa | ||
|
c4ef83e4d2 | ||
|
e7043dc044 | ||
|
5ee6c216e5 | ||
|
15e22af266 | ||
|
2ae17d6caf | ||
|
ebbedf29e0 | ||
|
9ad5c577f5 | ||
|
12f5c0405e | ||
|
e80f79fc9a | ||
|
920219dc56 | ||
|
04f320cb01 | ||
|
68eba86309 | ||
|
d0f5b39f11 | ||
|
a2f517fb38 | ||
|
ccdf8e7ee1 | ||
|
0a9c049f76 | ||
|
5b61ac06cb | ||
|
621b958b1c | ||
|
48283d7c62 | ||
|
3f5a873e4c | ||
|
bfc09e2b39 | ||
|
7a1cf2a280 | ||
|
b22fbc91d1 | ||
|
00dcbb3992 | ||
|
0647eea742 | ||
|
0b1ed8dbbb | ||
|
1a5fbd4bd0 | ||
|
39de59e65f | ||
|
b8dd3ef43a | ||
|
4fa47d301f | ||
|
28705b54a5 | ||
|
478c90cb00 | ||
|
9a5f420ce8 | ||
|
0ca32c41b5 | ||
|
2bfbc07b7d | ||
|
5442a25967 | ||
|
50737da051 | ||
|
5e96738ca1 | ||
|
fac6e5206f | ||
|
9ef5b126ec | ||
|
640070e133 | ||
|
ebe5eb8342 | ||
|
18a4505b23 | ||
|
9f3ee58595 | ||
|
7f9ba9849b | ||
|
6774c5077d | ||
|
9b94eaa0e4 | ||
|
2168cb7f8e | ||
|
53a9131db6 | ||
|
826b338275 | ||
|
3a23068d89 | ||
|
dcb6154be7 | ||
|
1721965c38 | ||
|
244d171cb0 | ||
|
a5790597ca | ||
|
a4fac6da2a | ||
|
78bf53587a | ||
|
1bb4e3621e | ||
|
c36892f2fa | ||
|
d9ad14e4c5 | ||
|
c003611f05 | ||
|
8f396673fe | ||
|
a18c59317f | ||
|
10d4093561 | ||
|
8a8428d002 | ||
|
f77142c0b6 | ||
|
4dc8841e33 | ||
|
0194c78d19 | ||
|
e610b23916 | ||
|
f1874ec416 | ||
|
681836a84d | ||
|
48bdab88de | ||
|
3e278bcf0a | ||
|
215fad420f | ||
|
d142bebdd6 | ||
|
2337d9dd27 | ||
|
4c5c289f75 | ||
|
9288a50bcf | ||
|
1f25f710ea | ||
|
f22bd4e511 | ||
|
795ce6ccf1 | ||
|
8058967e7f | ||
|
9bcf8df5d0 | ||
|
61e0247f22 | ||
|
5e84d47a03 | ||
|
7c45ed0733 | ||
|
a0fa396901 | ||
|
05ccbc512d | ||
|
dd115d1896 | ||
|
10004c4032 | ||
|
9fcd0b116b | ||
|
d461ee4f5c | ||
|
f55a61d067 | ||
|
62a2619300 | ||
|
b77856a903 | ||
|
3d7d0c40b8 | ||
|
f1772ce7e5 | ||
|
1e10664739 | ||
|
ad23b2330c | ||
|
83fd8e88d6 | ||
|
65ce507dda | ||
|
a4040e53b7 | ||
|
40bd4c8b72 | ||
|
5d579631d7 | ||
|
276d48ed4f | ||
|
747a70964e | ||
|
ee7cba5df7 | ||
|
34389df1ae | ||
|
3a6e6b997a | ||
|
8e6a21955a | ||
|
cd3b93b9e2 | ||
|
2076280947 | ||
|
673acc7313 | ||
|
ec70ec96e7 | ||
|
db1b73a3f4 | ||
|
b6cf2d7284 | ||
|
c5c2f7f7d0 | ||
|
43e87e3e63 | ||
|
6e4ab6509b | ||
|
bd12427fd4 | ||
|
fc66f00236 | ||
|
9745d8d80e | ||
|
6fc7fc1c75 | ||
|
6eb6c000c2 | ||
|
4b4584bcd4 | ||
|
4364629919 | ||
|
9eedf29021 | ||
|
accf8f8625 | ||
|
17e21d5140 | ||
|
c2ea2a3e18 | ||
|
cafd165bd0 | ||
|
9590ff3c18 | ||
|
4f07a0bafb | ||
|
1bd4895d7a | ||
|
6d57136264 | ||
|
e63493115a | ||
|
a1a84c9930 | ||
|
3e8a62f309 | ||
|
ad5d4f6bc3 | ||
|
147f929713 | ||
|
663ee34f66 | ||
|
3479f95090 | ||
|
a705405717 | ||
|
8a2f564f3d | ||
|
408ba75321 | ||
|
b39b3da5af | ||
|
f2f9ce544f | ||
|
366a92c36a | ||
|
a35314c6ea | ||
|
fdd5a18763 | ||
|
89a34ff033 | ||
|
68abcb9058 | ||
|
3c4f150859 | ||
|
4250bfee29 | ||
|
9940775550 | ||
|
610048cc6d | ||
|
3566bb9e44 | ||
|
9059864dac | ||
|
39538ecb85 | ||
|
b74dc1fa95 | ||
|
91fbdd9ff8 | ||
|
57b226ec76 | ||
|
5832698f4f | ||
|
3af3c391a7 | ||
|
0c34641abd | ||
|
12a10de0d1 | ||
|
f34df97f8b | ||
|
9b51fe2dd5 | ||
|
fef03a1946 | ||
|
295a424fc7 | ||
|
15157eed61 | ||
|
d045822cd8 | ||
|
b34dbc2e84 | ||
|
f979d2c7b2 | ||
|
fff6907a22 | ||
|
826d6aac74 | ||
|
ad34b87824 | ||
|
0cc41b94b1 | ||
|
469b975f94 | ||
|
fd5e66cbf1 | ||
|
d64680983a | ||
|
3f40a89864 | ||
|
1f16421782 | ||
|
45d64c4486 | ||
|
a7648b0eaa | ||
|
9fe8d05d5b | ||
|
2ab7b12419 | ||
|
ae18f8b27c | ||
|
2f7517a0fe | ||
|
575468931f | ||
|
5f052ec8dc | ||
|
e030f0ca09 | ||
|
8e8fac17ff | ||
|
a339b9e84f | ||
|
678ca5dcdc | ||
|
a7058d968f | ||
|
cf1fc20297 | ||
|
e75c04f02a | ||
|
11b79fec4d | ||
|
b340e45907 | ||
|
a021956644 | ||
|
73ca420029 | ||
|
b3d64b3b59 | ||
|
917c864bbf | ||
|
06f4b6926b | ||
|
14dc274e9e | ||
|
c9541e0795 | ||
|
f3c2c497d8 | ||
|
805b084607 | ||
|
74ec6f4e9a | ||
|
296243f34f | ||
|
bb5a171674 | ||
|
84ed888cb9 | ||
|
a7ca311d6c | ||
|
1654caf34b | ||
|
9af2dc0b6b | ||
|
33db45edac | ||
|
fb78fc7ae0 | ||
|
561344da53 | ||
|
7ebbc69dbd | ||
|
67f3017274 | ||
|
1de3ede399 | ||
|
c5a7643b72 | ||
|
627488da5b | ||
|
7705017f63 | ||
|
7c736d527d | ||
|
c99386e155 | ||
|
685449bfe3 | ||
|
be5a40f6a9 | ||
|
aca6e64669 | ||
|
7799bffc65 | ||
|
49f8192ba2 | ||
|
30279347ac | ||
|
9a5de3fc1e | ||
|
054da80114 | ||
|
56f47c1344 | ||
|
86945bdf84 |
2
CONTRIBUTING.md → .github/CONTRIBUTING.md
vendored
2
CONTRIBUTING.md → .github/CONTRIBUTING.md
vendored
@@ -2,5 +2,5 @@
|
||||
|
||||
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)
|
||||
3. Read our [Coding guidelines](https://wiki.phpbb.com/Coding_guidelines) and [Git Contribution Guidelines](http://wiki.phpbb.com/Git); if you're new to git, also read [the introduction guide](http://wiki.phpbb.com/display/DEV/Working+with+Git)
|
||||
3. Read our [Coding guidelines](https://wiki.phpbb.com/Coding_guidelines) and [Git Contribution Guidelines](http://wiki.phpbb.com/Git)
|
||||
4. Send us a pull request
|
10
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
10
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
Checklist:
|
||||
|
||||
- [ ] Correct branch: master for new features; 3.2.x, 3.1.x for fixes
|
||||
- [ ] Tests pass
|
||||
- [ ] Code follows coding guidelines: [master / 3.2.x](https://area51.phpbb.com/docs/master/coding-guidelines.html), [3.1.x](https://area51.phpbb.com/docs/31x/coding-guidelines.html)
|
||||
- [ ] Commit follows commit message [format](https://wiki.phpbb.com/Git#Commit_Messages)
|
||||
|
||||
Tracker ticket (set the ticket ID to **your ticket ID**):
|
||||
|
||||
https://tracker.phpbb.com/browse/PHPBB3-12345
|
@@ -19,6 +19,7 @@
|
||||
"jquery": true,
|
||||
|
||||
"globals": {
|
||||
"JSON": true
|
||||
"JSON": true,
|
||||
"phpbb": true
|
||||
}
|
||||
}
|
||||
|
@@ -22,12 +22,9 @@ matrix:
|
||||
env: DB=mysqli
|
||||
- php: 5.6
|
||||
env: DB=mysqli
|
||||
- php: 7.0
|
||||
env: DB=mysqli
|
||||
- php: hhvm
|
||||
env: DB=mysqli
|
||||
allow_failures:
|
||||
- php: 7.0
|
||||
- php: hhvm
|
||||
fast_finish: true
|
||||
|
||||
|
12
README.md
12
README.md
@@ -2,34 +2,34 @@
|
||||
|
||||
## ABOUT
|
||||
|
||||
phpBB is a free bulletin board written in PHP.
|
||||
phpBB is a free open-source bulletin board written in PHP.
|
||||
|
||||
## COMMUNITY
|
||||
|
||||
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](http://www.phpbb.com)! Discuss the development on [area51](http://area51.phpbb.com/phpBB/index.php).
|
||||
|
||||
## INSTALLING DEPENDENCIES
|
||||
|
||||
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 --dev
|
||||
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)
|
||||
3. [Read our Git Contribution Guidelines](http://wiki.phpbb.com/Git); if you're new to git, also read [the introduction guide](http://wiki.phpbb.com/display/DEV/Working+with+Git)
|
||||
3. Read our [Coding guidelines](https://wiki.phpbb.com/Coding_guidelines) and [Git Contribution Guidelines](http://wiki.phpbb.com/Git)
|
||||
4. Send us a pull request
|
||||
|
||||
## AUTOMATED TESTING
|
||||
|
||||
We have unit and functional tests in order to prevent regressions. You can view the bamboo continuous integration [here](http://bamboo.phpbb.com) or check our travis build below:
|
||||
We have unit and functional tests in order to prevent regressions. You can view the bamboo continuous integration [here](http://bamboo.phpbb.com) or check our travis builds below:
|
||||
|
||||
* [](http://travis-ci.org/phpbb/phpbb) **master** - Latest development version
|
||||
* [](http://travis-ci.org/phpbb/phpbb) **3.2.x** - Development of version 3.2.x
|
||||
* [](http://travis-ci.org/phpbb/phpbb) **3.1.x** - Development of version 3.1.x
|
||||
* [](http://travis-ci.org/phpbb/phpbb) **3.0.x** - Development of version 3.0.x
|
||||
|
||||
## LICENSE
|
||||
|
||||
|
@@ -2,9 +2,9 @@
|
||||
|
||||
<project name="phpBB" description="The phpBB forum software" default="all" basedir="../">
|
||||
<!-- a few settings for the build -->
|
||||
<property name="newversion" value="3.1.7-pl1" />
|
||||
<property name="prevversion" value="3.1.6" />
|
||||
<property name="olderversions" value="3.0.14, 3.1.0, 3.1.1, 3.1.2, 3.1.3, 3.1.4, 3.1.5, 3.1.7-RC1, 3.1.7" />
|
||||
<property name="newversion" value="3.1.11-RC1" />
|
||||
<property name="prevversion" value="3.1.10" />
|
||||
<property name="olderversions" value="3.0.14, 3.1.0, 3.1.1, 3.1.2, 3.1.3, 3.1.4, 3.1.5, 3.1.6, 3.1.7, 3.1.7-pl1, 3.1.8, 3.1.9" />
|
||||
<!-- no configuration should be needed beyond this point -->
|
||||
|
||||
<property name="oldversions" value="${olderversions}, ${prevversion}" />
|
||||
@@ -49,7 +49,7 @@
|
||||
-->
|
||||
<target name="composer">
|
||||
<exec dir="phpBB"
|
||||
command="php ../composer.phar install --dev"
|
||||
command="php ../composer.phar install --ignore-platform-reqs"
|
||||
checkreturn="true"
|
||||
passthru="true" />
|
||||
</target>
|
||||
@@ -143,6 +143,7 @@
|
||||
<phingcall target="export">
|
||||
<property name="revision" value="release-${version}" />
|
||||
<property name="dir" value="build/old_versions/release-${version}" />
|
||||
<property name="skip-composer" value="true" />
|
||||
</phingcall>
|
||||
|
||||
<phingcall target="clean-diff-dir">
|
||||
@@ -251,26 +252,35 @@
|
||||
<equals arg1="${composer-has-dependencies}" arg2="1" trim="true" />
|
||||
<then>
|
||||
<!-- We have non-dev composer dependencies -->
|
||||
<exec dir="."
|
||||
command="git ls-tree ${revision} composer.phar"
|
||||
checkreturn="true"
|
||||
outputProperty='composer-ls-tree-output' />
|
||||
<if>
|
||||
<equals arg1="${composer-ls-tree-output}" arg2="" trim="true" />
|
||||
<not><isset property="skip-composer" /></not>
|
||||
<then>
|
||||
<fail message="There are composer dependencies, but composer.phar is missing." />
|
||||
</then>
|
||||
<else>
|
||||
<!-- Export the phar, install dependencies, delete phar. -->
|
||||
<exec dir="."
|
||||
command="git archive ${revision} composer.phar | tar -xf - -C ${dir}"
|
||||
checkreturn="true" />
|
||||
<exec dir="${dir}"
|
||||
command="php composer.phar install --no-dev --optimize-autoloader"
|
||||
command="git ls-tree ${revision} composer.phar"
|
||||
checkreturn="true"
|
||||
passthru="true" />
|
||||
<delete file="${dir}/composer.phar" />
|
||||
</else>
|
||||
outputProperty='composer-ls-tree-output' />
|
||||
<if>
|
||||
<equals arg1="${composer-ls-tree-output}" arg2="" trim="true" />
|
||||
<then>
|
||||
<fail message="There are composer dependencies, but composer.phar is missing." />
|
||||
</then>
|
||||
<else>
|
||||
<!-- Export the phar, install dependencies, delete phar. -->
|
||||
<exec dir="."
|
||||
command="git archive ${revision} composer.phar | tar -xf - -C ${dir}"
|
||||
checkreturn="true" />
|
||||
<exec dir="${dir}"
|
||||
command="php composer.phar install --no-dev --optimize-autoloader --ignore-platform-reqs"
|
||||
checkreturn="true"
|
||||
passthru="true" />
|
||||
<delete file="${dir}/composer.phar" />
|
||||
|
||||
<phingcall target="clean-vendor-dir">
|
||||
<property name="dir" value="${dir}" />
|
||||
</phingcall>
|
||||
</else>
|
||||
</if>
|
||||
</then>
|
||||
</if>
|
||||
</then>
|
||||
<else>
|
||||
@@ -287,10 +297,6 @@
|
||||
<delete dir="${dir}/develop" />
|
||||
<delete dir="${dir}/install/data" />
|
||||
|
||||
<phingcall target="clean-vendor-dir">
|
||||
<property name="dir" value="${dir}" />
|
||||
</phingcall>
|
||||
|
||||
<echo msg="Setting permissions for checkout of ${revision} in ${dir}" />
|
||||
<!-- set permissions of all files to 644, directories to 755 -->
|
||||
<exec dir="${dir}" command="find . -type f|xargs chmod 644" escape="false" />
|
||||
@@ -307,6 +313,7 @@
|
||||
<delete dir="${dir}/vendor/lusitanian/oauth/examples" />
|
||||
<delete dir="${dir}/vendor/lusitanian/oauth/tests" />
|
||||
<delete file="${dir}/vendor/lusitanian/oauth/.gitignore" />
|
||||
<delete file="${dir}/vendor/lusitanian/oauth/.scrutinizer.yml" />
|
||||
<delete file="${dir}/vendor/lusitanian/oauth/.travis.yml" />
|
||||
<delete file="${dir}/vendor/lusitanian/oauth/phpunit.xml.dist" />
|
||||
<delete file="${dir}/vendor/lusitanian/oauth/README.md" />
|
||||
@@ -381,10 +388,9 @@
|
||||
<delete file="${dir}/vendor/twig/twig/.editorconfig" />
|
||||
<delete file="${dir}/vendor/twig/twig/.gitignore" />
|
||||
<delete file="${dir}/vendor/twig/twig/.travis.yml" />
|
||||
<delete file="${dir}/vendor/twig/twig/AUTHORS" />
|
||||
<delete file="${dir}/vendor/twig/twig/CHANGELOG" />
|
||||
<delete file="${dir}/vendor/twig/twig/phpunit.xml.dist" />
|
||||
<delete file="${dir}/vendor/twig/twig/README.markdown" />
|
||||
<delete file="${dir}/vendor/twig/twig/README.rst" />
|
||||
</target>
|
||||
|
||||
<target name="clean-diff-dir">
|
||||
|
@@ -129,53 +129,19 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements PHP_CodeSniffer_Sniff
|
||||
}
|
||||
}
|
||||
|
||||
$old_docblock = $stackPtr;
|
||||
while (($docblock = $phpcsFile->findNext(T_DOC_COMMENT_CLOSE_TAG, ($old_docblock + 1))) !== false)
|
||||
{
|
||||
$old_docblock = $docblock;
|
||||
$ok = $this->checkDocblock($phpcsFile, $docblock, $tokens, $class_name_full, $class_name_short) ? true : $ok;
|
||||
}
|
||||
|
||||
// Checks in type hinting
|
||||
$old_function_declaration = $stackPtr;
|
||||
while (($function_declaration = $phpcsFile->findNext(T_FUNCTION, ($old_function_declaration + 1))) !== false)
|
||||
{
|
||||
$old_function_declaration = $function_declaration;
|
||||
|
||||
// Check docblocks
|
||||
$find = array(
|
||||
T_COMMENT,
|
||||
T_DOC_COMMENT_CLOSE_TAG,
|
||||
T_DOC_COMMENT,
|
||||
T_CLASS,
|
||||
T_FUNCTION,
|
||||
T_OPEN_TAG,
|
||||
);
|
||||
|
||||
$comment_end = $phpcsFile->findPrevious($find, ($function_declaration - 1));
|
||||
if ($comment_end !== false)
|
||||
{
|
||||
if ($tokens[$comment_end]['code'] === T_DOC_COMMENT_CLOSE_TAG)
|
||||
{
|
||||
$comment_start = $tokens[$comment_end]['comment_opener'];
|
||||
foreach ($tokens[$comment_start]['comment_tags'] as $tag) {
|
||||
if ($tokens[$tag]['content'] !== '@param' && $tokens[$tag]['content'] !== '@return' && $tokens[$tag]['content'] !== '@throws') {
|
||||
continue;
|
||||
}
|
||||
|
||||
$classes = $tokens[($tag + 2)]['content'];
|
||||
$space = strpos($classes, ' ');
|
||||
if ($space !== false) {
|
||||
$classes = substr($classes, 0, $space);
|
||||
}
|
||||
|
||||
$tab = strpos($classes, "\t");
|
||||
if ($tab !== false) {
|
||||
$classes = substr($classes, 0, $tab);
|
||||
}
|
||||
|
||||
$classes = explode('|', str_replace('[]', '', $classes));
|
||||
foreach ($classes as $class)
|
||||
{
|
||||
$ok = $this->check($phpcsFile, $class, $class_name_full, $class_name_short, $tokens[$tag + 2]['line']) ? true : $ok;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check type hint
|
||||
$params = $phpcsFile->getMethodParameters($function_declaration);
|
||||
foreach ($params as $param)
|
||||
@@ -234,4 +200,49 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements PHP_CodeSniffer_Sniff
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param PHP_CodeSniffer_File $phpcsFile
|
||||
* @param int $field
|
||||
* @param array $tokens
|
||||
* @param string $class_name_full
|
||||
* @param string $class_name_short
|
||||
* @param bool $ok
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function checkDocblock(PHP_CodeSniffer_File $phpcsFile, $comment_end, $tokens, $class_name_full, $class_name_short)
|
||||
{
|
||||
$ok = false;
|
||||
|
||||
$comment_start = $tokens[$comment_end]['comment_opener'];
|
||||
foreach ($tokens[$comment_start]['comment_tags'] as $tag)
|
||||
{
|
||||
if (!in_array($tokens[$tag]['content'], array('@param', '@var', '@return', '@throws'), true))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$classes = $tokens[($tag + 2)]['content'];
|
||||
$space = strpos($classes, ' ');
|
||||
if ($space !== false)
|
||||
{
|
||||
$classes = substr($classes, 0, $space);
|
||||
}
|
||||
|
||||
$tab = strpos($classes, "\t");
|
||||
if ($tab !== false)
|
||||
{
|
||||
$classes = substr($classes, 0, $tab);
|
||||
}
|
||||
|
||||
$classes = explode('|', str_replace('[]', '', $classes));
|
||||
foreach ($classes as $class)
|
||||
{
|
||||
$ok = $this->check($phpcsFile, $class, $class_name_full, $class_name_short, $tokens[$tag + 2]['line']) ? true : $ok;
|
||||
}
|
||||
}
|
||||
|
||||
return $ok;
|
||||
}
|
||||
}
|
||||
|
@@ -25,6 +25,7 @@ $config['versions'] = Sami\Version\GitVersionCollection::create(__DIR__ . '/../'
|
||||
*/
|
||||
->add('3.0.x')
|
||||
->add('3.1.x')
|
||||
->add('3.2.x')
|
||||
->add('master')
|
||||
;
|
||||
|
||||
|
BIN
composer.phar
BIN
composer.phar
Binary file not shown.
@@ -1,292 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
function show_usage()
|
||||
{
|
||||
$filename = basename(__FILE__);
|
||||
|
||||
echo "$filename adds repositories of a github network as remotes to a local git repository.\n";
|
||||
echo "\n";
|
||||
|
||||
echo "Usage: [php] $filename -s collaborators|organisation|contributors|forks [OPTIONS]\n";
|
||||
echo "\n";
|
||||
|
||||
echo "Scopes:\n";
|
||||
echo " collaborators Repositories of people who have push access to the specified repository\n";
|
||||
echo " contributors Repositories of people who have contributed to the specified repository\n";
|
||||
echo " organisation Repositories of members of the organisation at github\n";
|
||||
echo " forks All repositories of the whole github network\n";
|
||||
echo "\n";
|
||||
|
||||
echo "Options:\n";
|
||||
echo " -s scope See description above (mandatory)\n";
|
||||
echo " -u github_username Overwrites the github username (optional)\n";
|
||||
echo " -r repository_name Overwrites the repository name (optional)\n";
|
||||
echo " -m your_github_username Sets up ssh:// instead of git:// for pushable repositories (optional)\n";
|
||||
echo " -d Outputs the commands instead of running them (optional)\n";
|
||||
echo " -h This help text\n";
|
||||
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// Handle arguments
|
||||
$opts = getopt('s:u:r:m:dh');
|
||||
|
||||
if (empty($opts) || isset($opts['h']))
|
||||
{
|
||||
show_usage();
|
||||
}
|
||||
|
||||
$scope = get_arg($opts, 's', '');
|
||||
$username = get_arg($opts, 'u', 'phpbb');
|
||||
$repository = get_arg($opts, 'r', 'phpbb3');
|
||||
$developer = get_arg($opts, 'm', '');
|
||||
$dry_run = !get_arg($opts, 'd', true);
|
||||
run(null, $dry_run);
|
||||
exit(work($scope, $username, $repository, $developer));
|
||||
|
||||
function work($scope, $username, $repository, $developer)
|
||||
{
|
||||
// Get some basic data
|
||||
$forks = get_forks($username, $repository);
|
||||
$collaborators = get_collaborators($username, $repository);
|
||||
|
||||
if ($forks === false || $collaborators === false)
|
||||
{
|
||||
echo "Error: failed to retrieve forks or collaborators\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
switch ($scope)
|
||||
{
|
||||
case 'collaborators':
|
||||
$remotes = array_intersect_key($forks, $collaborators);
|
||||
break;
|
||||
|
||||
case 'organisation':
|
||||
$remotes = array_intersect_key($forks, get_organisation_members($username));
|
||||
break;
|
||||
|
||||
case 'contributors':
|
||||
$remotes = array_intersect_key($forks, get_contributors($username, $repository));
|
||||
break;
|
||||
|
||||
case 'forks':
|
||||
$remotes = $forks;
|
||||
break;
|
||||
|
||||
default:
|
||||
show_usage();
|
||||
}
|
||||
|
||||
if (file_exists('.git'))
|
||||
{
|
||||
add_remote($username, $repository, isset($collaborators[$developer]));
|
||||
}
|
||||
else
|
||||
{
|
||||
clone_repository($username, $repository, isset($collaborators[$developer]));
|
||||
}
|
||||
|
||||
// Add private security repository for developers
|
||||
if ($username == 'phpbb' && $repository == 'phpbb3' && isset($collaborators[$developer]))
|
||||
{
|
||||
run("git remote add $username-security " . get_repository_url($username, "$repository-security", true));
|
||||
}
|
||||
|
||||
// Skip blessed repository.
|
||||
unset($remotes[$username]);
|
||||
|
||||
foreach ($remotes as $remote)
|
||||
{
|
||||
add_remote($remote['username'], $remote['repository'], $remote['username'] == $developer);
|
||||
}
|
||||
|
||||
run('git remote update');
|
||||
}
|
||||
|
||||
function clone_repository($username, $repository, $pushable = false)
|
||||
{
|
||||
$url = get_repository_url($username, $repository, false);
|
||||
run("git clone $url ./ --origin $username");
|
||||
|
||||
if ($pushable)
|
||||
{
|
||||
$ssh_url = get_repository_url($username, $repository, true);
|
||||
run("git remote set-url --push $username $ssh_url");
|
||||
}
|
||||
}
|
||||
|
||||
function add_remote($username, $repository, $pushable = false)
|
||||
{
|
||||
$url = get_repository_url($username, $repository, false);
|
||||
run("git remote add $username $url");
|
||||
|
||||
if ($pushable)
|
||||
{
|
||||
$ssh_url = get_repository_url($username, $repository, true);
|
||||
run("git remote set-url --push $username $ssh_url");
|
||||
}
|
||||
}
|
||||
|
||||
function get_repository_url($username, $repository, $ssh = false)
|
||||
{
|
||||
$url_base = ($ssh) ? 'git@github.com:' : 'git://github.com/';
|
||||
|
||||
return $url_base . $username . '/' . $repository . '.git';
|
||||
}
|
||||
|
||||
function api_request($query)
|
||||
{
|
||||
return api_url_request("https://api.github.com/$query?per_page=100");
|
||||
}
|
||||
|
||||
function api_url_request($url)
|
||||
{
|
||||
$contents = file_get_contents($url, false, stream_context_create(array(
|
||||
'http' => array(
|
||||
'header' => "User-Agent: phpBB/1.0\r\n",
|
||||
),
|
||||
)));
|
||||
|
||||
$sub_request_result = array();
|
||||
// Check headers for pagination links
|
||||
if (!empty($http_response_header))
|
||||
{
|
||||
foreach ($http_response_header as $header_element)
|
||||
{
|
||||
// Find Link Header which gives us a link to the next page
|
||||
if (strpos($header_element, 'Link: ') === 0)
|
||||
{
|
||||
list($head, $header_content) = explode(': ', $header_element);
|
||||
foreach (explode(', ', $header_content) as $links)
|
||||
{
|
||||
list($url, $rel) = explode('; ', $links);
|
||||
if ($rel == 'rel="next"')
|
||||
{
|
||||
// Found a next link, follow it and merge the results
|
||||
$sub_request_result = api_url_request(substr($url, 1, -1));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($contents === false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
$contents = json_decode($contents);
|
||||
|
||||
if (isset($contents->message) && strpos($contents->message, 'API Rate Limit') === 0)
|
||||
{
|
||||
throw new RuntimeException('Reached github API Rate Limit. Please try again later' . "\n", 4);
|
||||
}
|
||||
|
||||
return ($sub_request_result) ? array_merge($sub_request_result, $contents) : $contents;
|
||||
}
|
||||
|
||||
function get_contributors($username, $repository)
|
||||
{
|
||||
$request = api_request("repos/$username/$repository/stats/contributors");
|
||||
if ($request === false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$usernames = array();
|
||||
foreach ($request as $contribution)
|
||||
{
|
||||
$usernames[$contribution->author->login] = $contribution->author->login;
|
||||
}
|
||||
|
||||
return $usernames;
|
||||
}
|
||||
|
||||
function get_organisation_members($username)
|
||||
{
|
||||
$request = api_request("orgs/$username/public_members");
|
||||
if ($request === false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$usernames = array();
|
||||
foreach ($request as $member)
|
||||
{
|
||||
$usernames[$member->login] = $member->login;
|
||||
}
|
||||
|
||||
return $usernames;
|
||||
}
|
||||
|
||||
function get_collaborators($username, $repository)
|
||||
{
|
||||
$request = api_request("repos/$username/$repository/collaborators");
|
||||
if ($request === false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$usernames = array();
|
||||
foreach ($request as $collaborator)
|
||||
{
|
||||
$usernames[$collaborator->login] = $collaborator->login;
|
||||
}
|
||||
|
||||
return $usernames;
|
||||
}
|
||||
|
||||
function get_forks($username, $repository)
|
||||
{
|
||||
$request = api_request("repos/$username/$repository/forks");
|
||||
if ($request === false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$usernames = array();
|
||||
foreach ($request as $fork)
|
||||
{
|
||||
$usernames[$fork->owner->login] = array(
|
||||
'username' => $fork->owner->login,
|
||||
'repository' => $fork->name,
|
||||
);
|
||||
}
|
||||
|
||||
return $usernames;
|
||||
}
|
||||
|
||||
function get_arg($array, $index, $default)
|
||||
{
|
||||
return isset($array[$index]) ? $array[$index] : $default;
|
||||
}
|
||||
|
||||
function run($cmd, $dry = false)
|
||||
{
|
||||
static $dry_run;
|
||||
|
||||
if (is_null($cmd))
|
||||
{
|
||||
$dry_run = $dry;
|
||||
}
|
||||
else if (!empty($dry_run))
|
||||
{
|
||||
echo "$cmd\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
passthru(escapeshellcmd($cmd));
|
||||
}
|
||||
}
|
@@ -1,6 +1,16 @@
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine on
|
||||
|
||||
#
|
||||
# Uncomment the statement below if URL rewriting doesn't
|
||||
# work properly. If you installed phpBB in a subdirectory
|
||||
# of your site, properly set the argument for the statement.
|
||||
# e.g.: if your domain is test.com and you installed phpBB
|
||||
# in http://www.test.com/phpBB/index.php you have to set
|
||||
# the statement RewriteBase /phpBB/
|
||||
#
|
||||
#RewriteBase /
|
||||
|
||||
#
|
||||
# Uncomment the statement below if you want to make use of
|
||||
# HTTP authentication and it does not already work.
|
||||
|
@@ -196,7 +196,7 @@
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="extgroup_filesize">{L_MAX_EXTGROUP_FILESIZE}{L_COLON}</label></dt>
|
||||
<dd><input type="number" id="extgroup_filesize" size="3" maxlength="15" name="max_filesize" value="{EXTGROUP_FILESIZE}" /> <select name="size_select">{S_EXT_GROUP_SIZE_OPTIONS}</select></dd>
|
||||
<dd><input type="number" id="extgroup_filesize" min="0" max="999999999999999" step="any" name="max_filesize" value="{EXTGROUP_FILESIZE}" /> <select name="size_select">{S_EXT_GROUP_SIZE_OPTIONS}</select></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="assigned_extensions">{L_ASSIGNED_EXTENSIONS}{L_COLON}</label></dt>
|
||||
@@ -346,7 +346,7 @@
|
||||
<td><a href="{orphan.U_FILE}">{orphan.REAL_FILENAME}</a></td>
|
||||
<td>{orphan.FILETIME}</td>
|
||||
<td>{orphan.FILESIZE}</td>
|
||||
<td><strong>{L_ATTACH_ID}{L_COLON} </strong><input type="number" name="post_id[{orphan.ATTACH_ID}]" maxlength="10" value="{orphan.POST_ID}" style="width: 75%;" /></td>
|
||||
<td><strong>{L_ATTACH_ID}{L_COLON} </strong><input type="number" min="0" max="9999999999" name="post_id[{orphan.ATTACH_ID}]" value="{orphan.POST_ID}" style="width: 75%;" /></td>
|
||||
<td><input type="checkbox" class="radio" name="add[{orphan.ATTACH_ID}]" /></td>
|
||||
<td><input type="checkbox" class="radio" name="delete[{orphan.ATTACH_ID}]" /></td>
|
||||
</tr>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
<dl>
|
||||
<dt><label for="avatar_gravatar_width">{L_GRAVATAR_AVATAR_SIZE}{L_COLON}</label><br /><span>{L_GRAVATAR_AVATAR_SIZE_EXPLAIN}</span></dt>
|
||||
<dd>
|
||||
<input type="number" name="avatar_gravatar_width" id="avatar_gravatar_width" size="3" value="{AVATAR_GRAVATAR_WIDTH}" class="inputbox autowidth" /> {L_PIXEL} ×
|
||||
<input type="number" name="avatar_gravatar_height" id="avatar_gravatar_height" size="3" value="{AVATAR_GRAVATAR_HEIGHT}" class="inputbox autowidth" /> {L_PIXEL}
|
||||
<input type="number" name="avatar_gravatar_width" id="avatar_gravatar_width" min="{AVATAR_MIN_WIDTH}" max="{AVATAR_MAX_WIDTH}" value="{AVATAR_GRAVATAR_WIDTH}" class="inputbox autowidth" /> {L_PIXEL} ×
|
||||
<input type="number" name="avatar_gravatar_height" id="avatar_gravatar_height" min="{AVATAR_MIN_HEIGHT}" max="{AVATAR_MAX_HEIGHT}" value="{AVATAR_GRAVATAR_HEIGHT}" class="inputbox autowidth" /> {L_PIXEL}
|
||||
</dd>
|
||||
</dl>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
<dl>
|
||||
<dt><label for="avatar_remote_width">{L_LINK_REMOTE_SIZE}{L_COLON}</label><br /><span>{L_LINK_REMOTE_SIZE_EXPLAIN}</span></dt>
|
||||
<dd>
|
||||
<input type="number" name="avatar_remote_width" id="avatar_remote_width" size="3" value="{AVATAR_REMOTE_WIDTH}" class="inputbox autowidth" /> {L_PIXEL} ×
|
||||
<input type="number" name="avatar_remote_height" id="avatar_remote_height" size="3" value="{AVATAR_REMOTE_HEIGHT}" class="inputbox autowidth" /> {L_PIXEL}
|
||||
<input type="number" name="avatar_remote_width" id="avatar_remote_width" min="{AVATAR_MIN_WIDTH}" max="{AVATAR_MAX_WIDTH}" value="{AVATAR_REMOTE_WIDTH}" class="inputbox autowidth" /> {L_PIXEL} ×
|
||||
<input type="number" name="avatar_remote_height" id="avatar_remote_height" min="{AVATAR_MIN_HEIGHT}" max="{AVATAR_MAX_HEIGHT}" value="{AVATAR_REMOTE_HEIGHT}" class="inputbox autowidth" /> {L_PIXEL}
|
||||
</dd>
|
||||
</dl>
|
||||
|
@@ -27,11 +27,11 @@
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="max_reg_attempts">{L_REG_LIMIT}{L_COLON}</label><br /><span>{L_REG_LIMIT_EXPLAIN}</span></dt>
|
||||
<dd><input id="max_reg_attempts" type="number" size="4" maxlength="4" min="0" max="9999" name="max_reg_attempts" value="{REG_LIMIT}" /></dd>
|
||||
<dd><input id="max_reg_attempts" type="number" min="0" max="9999" name="max_reg_attempts" value="{REG_LIMIT}" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="max_login_attempts">{L_MAX_LOGIN_ATTEMPTS}{L_COLON}</label><br /><span>{L_MAX_LOGIN_ATTEMPTS_EXPLAIN}</span></dt>
|
||||
<dd><input id="max_login_attempts" type="number" size="4" maxlength="4" min="0" max="9999" name="max_login_attempts" value="{MAX_LOGIN_ATTEMPTS}" /></dd>
|
||||
<dd><input id="max_login_attempts" type="number" min="0" max="9999" name="max_login_attempts" value="{MAX_LOGIN_ATTEMPTS}" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="enable_post_confirm">{L_VISUAL_CONFIRM_POST}{L_COLON}</label><br /><span>{L_VISUAL_CONFIRM_POST_EXPLAIN}</span></dt>
|
||||
|
@@ -14,7 +14,7 @@
|
||||
<legend>{L_RESTORE_OPTIONS}</legend>
|
||||
<dl>
|
||||
<dt><label for="file">{L_SELECT_FILE}{L_COLON}</label></dt>
|
||||
<dd><select id="file" name="file" size="10"><!-- BEGIN files --><option value="{files.FILE}"<!-- IF files.S_LAST_ROW --> selected="selected"<!-- ENDIF -->>{files.NAME}</option><!-- END files --></select></dd>
|
||||
<dd><select id="file" name="file" size="10"><!-- BEGIN files --><option value="{files.FILE}"<!-- IF files.S_FIRST_ROW --> selected="selected"<!-- ENDIF -->>{files.NAME}</option><!-- END files --></select></dd>
|
||||
</dl>
|
||||
|
||||
<p class="submit-buttons">
|
||||
|
@@ -21,6 +21,7 @@
|
||||
<p>{VERSIONCHECK_FAIL_REASON}</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
<!-- EVENT acp_ext_details_notice -->
|
||||
|
||||
<fieldset>
|
||||
<legend>{L_EXT_DETAILS}</legend>
|
||||
@@ -136,4 +137,5 @@
|
||||
<!-- END meta_authors -->
|
||||
</fieldset>
|
||||
|
||||
<!-- EVENT acp_ext_details_end -->
|
||||
<!-- INCLUDE overall_footer.html -->
|
||||
|
@@ -44,11 +44,11 @@
|
||||
<tbody>
|
||||
<!-- IF .enabled -->
|
||||
<tr>
|
||||
<td class="row3" colspan="4"><strong>{L_EXTENSIONS_ENABLED}</strong></td>
|
||||
<td class="row3" colspan="4"><strong>{L_EXTENSIONS_ENABLED}</strong><!-- EVENT acp_ext_list_enabled_title_after --></td>
|
||||
</tr>
|
||||
<!-- BEGIN enabled -->
|
||||
<tr class="ext_enabled row-highlight">
|
||||
<td><strong title="{enabled.NAME}">{enabled.META_DISPLAY_NAME}</strong></td>
|
||||
<td><strong title="{enabled.NAME}">{enabled.META_DISPLAY_NAME}</strong><!-- EVENT acp_ext_list_enabled_name_after --></td>
|
||||
<td style="text-align: center;">
|
||||
<!-- IF enabled.S_VERSIONCHECK -->
|
||||
<strong <!-- IF enabled.S_UP_TO_DATE -->style="color: #228822;"<!-- ELSE -->style="color: #BC2A4D;"<!-- ENDIF -->>{enabled.META_VERSION}</strong>
|
||||
@@ -69,11 +69,11 @@
|
||||
|
||||
<!-- IF .disabled -->
|
||||
<tr>
|
||||
<td class="row3" colspan="4"><strong>{L_EXTENSIONS_DISABLED}</strong></td>
|
||||
<td class="row3" colspan="4"><strong>{L_EXTENSIONS_DISABLED}</strong><!-- EVENT acp_ext_list_disabled_title_after --></td>
|
||||
</tr>
|
||||
<!-- BEGIN disabled -->
|
||||
<tr class="ext_disabled row-highlight">
|
||||
<td><strong title="{disabled.NAME}">{disabled.META_DISPLAY_NAME}</strong></td>
|
||||
<td><strong title="{disabled.NAME}">{disabled.META_DISPLAY_NAME}</strong><!-- EVENT acp_ext_list_disabled_name_after --></td>
|
||||
<td style="text-align: center;">
|
||||
<!-- IF disabled.S_VERSIONCHECK -->
|
||||
<strong <!-- IF disabled.S_UP_TO_DATE -->style="color: #228822;"<!-- ELSE -->style="color: #BC2A4D;"<!-- ENDIF -->>{disabled.META_VERSION}</strong>
|
||||
|
@@ -242,7 +242,7 @@
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="topics_per_page">{L_FORUM_TOPICS_PAGE}{L_COLON}</label><br /><span>{L_FORUM_TOPICS_PAGE_EXPLAIN}</span></dt>
|
||||
<dd><input type="number" id="topics_per_page" name="topics_per_page" value="{TOPICS_PER_PAGE}" size="4" maxlength="4" min="0" max="9999" /></dd>
|
||||
<dd><input type="number" id="topics_per_page" name="topics_per_page" value="{TOPICS_PER_PAGE}" min="0" max="9999" /></dd>
|
||||
</dl>
|
||||
<!-- EVENT acp_forums_normal_settings_append -->
|
||||
</fieldset>
|
||||
@@ -257,15 +257,15 @@
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="prune_freq">{L_AUTO_PRUNE_FREQ}{L_COLON}</label><br /><span>{L_AUTO_PRUNE_FREQ_EXPLAIN}</span></dt>
|
||||
<dd><input type="number" id="prune_freq" name="prune_freq" value="{PRUNE_FREQ}" maxlength="4" size="4" min="0" max="9999" /> {L_DAYS}</dd>
|
||||
<dd><input type="number" id="prune_freq" name="prune_freq" value="{PRUNE_FREQ}" min="0" max="9999" /> {L_DAYS}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="prune_days">{L_AUTO_PRUNE_DAYS}{L_COLON}</label><br /><span>{L_AUTO_PRUNE_DAYS_EXPLAIN}</span></dt>
|
||||
<dd><input type="number" id="prune_days" name="prune_days" value="{PRUNE_DAYS}" maxlength="4" size="4" min="0" max="9999" /> {L_DAYS}</dd>
|
||||
<dd><input type="number" id="prune_days" name="prune_days" value="{PRUNE_DAYS}" min="0" max="9999" /> {L_DAYS}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="prune_viewed">{L_AUTO_PRUNE_VIEWED}{L_COLON}</label><br /><span>{L_AUTO_PRUNE_VIEWED_EXPLAIN}</span></dt>
|
||||
<dd><input type="number" id="prune_viewed" name="prune_viewed" value="{PRUNE_VIEWED}" maxlength="4" size="4" min="0" max="9999" /> {L_DAYS}</dd>
|
||||
<dd><input type="number" id="prune_viewed" name="prune_viewed" value="{PRUNE_VIEWED}" min="0" max="9999" /> {L_DAYS}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="prune_old_polls">{L_PRUNE_OLD_POLLS}{L_COLON}</label><br /><span>{L_PRUNE_OLD_POLLS_EXPLAIN}</span></dt>
|
||||
@@ -289,11 +289,11 @@
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="prune_shadow_freq">{L_AUTO_PRUNE_SHADOW_FREQ}{L_COLON}</label><br /><span>{L_AUTO_PRUNE_SHADOW_FREQ_EXPLAIN}</span></dt>
|
||||
<dd><input type="number" id="prune_shadow_freq" name="prune_shadow_freq" value="{PRUNE_SHADOW_FREQ}" maxlength="4" size="4" min="0" max="9999" /> {L_DAYS}</dd>
|
||||
<dd><input type="number" id="prune_shadow_freq" name="prune_shadow_freq" value="{PRUNE_SHADOW_FREQ}" min="0" max="9999" /> {L_DAYS}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="prune_shadow_days">{L_AUTO_PRUNE_SHADOW_DAYS}{L_COLON}</label><br /><span>{L_AUTO_PRUNE_SHADOW_DAYS_EXPLAIN}</span></dt>
|
||||
<dd><input type="number" id="prune_shadow_days" name="prune_shadow_days" value="{PRUNE_SHADOW_DAYS}" maxlength="4" size="4" min="0" max="9999" /> {L_DAYS}</dd>
|
||||
<dd><input type="number" id="prune_shadow_days" name="prune_shadow_days" value="{PRUNE_SHADOW_DAYS}" min="0" max="9999" /> {L_DAYS}</dd>
|
||||
</dl>
|
||||
<!-- EVENT acp_forums_prune_settings_append -->
|
||||
</fieldset>
|
||||
|
@@ -86,11 +86,11 @@
|
||||
<legend>{L_GROUP_SETTINGS_SAVE}</legend>
|
||||
<dl>
|
||||
<dt><label for="group_message_limit">{L_GROUP_MESSAGE_LIMIT}{L_COLON}</label><br /><span>{L_GROUP_MESSAGE_LIMIT_EXPLAIN}</span></dt>
|
||||
<dd><input name="group_message_limit" type="number" id="group_message_limit" maxlength="4" size="4" min="0" max="9999" value="{GROUP_MESSAGE_LIMIT}" /></dd>
|
||||
<dd><input name="group_message_limit" type="number" id="group_message_limit" min="0" max="9999" value="{GROUP_MESSAGE_LIMIT}" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="group_max_recipients">{L_GROUP_MAX_RECIPIENTS}{L_COLON}</label><br /><span>{L_GROUP_MAX_RECIPIENTS_EXPLAIN}</span></dt>
|
||||
<dd><input name="group_max_recipients" type="number" id="group_max_recipients" maxlength="10" size="4" value="{GROUP_MAX_RECIPIENTS}" /></dd>
|
||||
<dd><input name="group_max_recipients" type="number" id="group_max_recipients" min="0" max="9999" value="{GROUP_MAX_RECIPIENTS}" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="group_colour">{L_GROUP_COLOR}{L_COLON}</label><br /><span>{L_GROUP_COLOR_EXPLAIN}</span></dt>
|
||||
|
@@ -108,8 +108,8 @@
|
||||
<td><input class="text post" type="text" name="code[{items.IMG}]" value="{items.CODE}" size="10" maxlength="50" /></td>
|
||||
<td><input class="text post" type="text" name="emotion[{items.IMG}]" value="{items.EMOTION}" size="10" maxlength="50" /></td>
|
||||
<!-- ENDIF -->
|
||||
<td><input class="text post" type="number" size="3" name="width[{items.IMG}]" value="{items.WIDTH}" /></td>
|
||||
<td><input class="text post" type="number" size="3" name="height[{items.IMG}]" value="{items.HEIGHT}" /></td>
|
||||
<td><input class="text post" type="number" min="0" max="999" name="width[{items.IMG}]" value="{items.WIDTH}" /></td>
|
||||
<td><input class="text post" type="number" min="0" max="999" name="height[{items.IMG}]" value="{items.HEIGHT}" /></td>
|
||||
<td>
|
||||
<input type="checkbox" class="radio" name="display_on_posting[{items.IMG}]"{items.POSTING_CHECKED} onclick="toggle_select('{items.A_IMG}', this.checked, '{items.S_ROW_COUNT}');"/>
|
||||
<!-- IF items.S_ID -->
|
||||
@@ -136,8 +136,8 @@
|
||||
<td style="vertical-align: top;"><img src="{IMG_SRC}" id="add_image_src" alt="" title="" /></td>
|
||||
<td><input class="text post" type="text" name="add_code" id="add_code" value="{CODE}" size="10" maxlength="50" /></td>
|
||||
<td><input class="text post" type="text" name="add_emotion" id="add_emotion" value="{EMOTION}" size="10" maxlength="50" /></td>
|
||||
<td><input class="text post" type="number" size="3" name="add_width" id="add_width" value="{WIDTH}" /></td>
|
||||
<td><input class="text post" type="number" size="3" name="add_height" id="add_height" value="{HEIGHT}" /></td>
|
||||
<td><input class="text post" type="number" min="0" max="999" name="add_width" id="add_width" value="{WIDTH}" /></td>
|
||||
<td><input class="text post" type="number" min="0" max="999" name="add_height" id="add_height" value="{HEIGHT}" /></td>
|
||||
<td><input type="checkbox" class="radio" name="add_display_on_posting" checked="checked" onclick="toggle_select('add', this.checked, 'add_order');"/></td>
|
||||
<td><select id="order_add_order" name="add_order">
|
||||
<optgroup id="order_disp_add_order" label="{L_DISPLAY_POSTING}">{S_ADD_ORDER_LIST_DISPLAY}</optgroup>
|
||||
|
@@ -52,7 +52,7 @@
|
||||
</table>
|
||||
|
||||
<fieldset class="display-options">
|
||||
{L_DISPLAY_LOG}{L_COLON} {S_LIMIT_DAYS} {L_SORT_BY}{L_COLON} {S_SORT_KEY} {S_SORT_DIR}<!-- IF .pagination --> {L_USERS_PER_PAGE}{L_COLON} <input class="inputbox autowidth" type="number" name="users_per_page" id="users_per_page" size="3" value="{USERS_PER_PAGE}" /><!-- ENDIF -->
|
||||
{L_DISPLAY_LOG}{L_COLON} {S_LIMIT_DAYS} {L_SORT_BY}{L_COLON} {S_SORT_KEY} {S_SORT_DIR}<!-- IF .pagination --> {L_USERS_PER_PAGE}{L_COLON} <input class="inputbox autowidth" type="number" name="users_per_page" id="users_per_page" min="0" max="999" value="{USERS_PER_PAGE}" /><!-- ENDIF -->
|
||||
<input class="button2" type="submit" value="{L_GO}" name="sort" />
|
||||
</fieldset>
|
||||
|
||||
|
@@ -31,7 +31,7 @@
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="jab_port">{L_JAB_PORT}{L_COLON}</label><br /><span>{L_JAB_PORT_EXPLAIN}</span></dt>
|
||||
<dd><input type="number" id="jab_port" name="jab_port" value="{JAB_PORT}" maxlength="5" size="5" /></dd>
|
||||
<dd><input type="number" id="jab_port" name="jab_port" value="{JAB_PORT}" min="0" max="99999" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="jab_username">{L_JAB_USERNAME}{L_COLON}</label><br /><span>{L_JAB_USERNAME_EXPLAIN}</span></dt>
|
||||
@@ -47,10 +47,25 @@
|
||||
<dd><label><input type="radio" class="radio" id="jab_use_ssl" name="jab_use_ssl" value="1"<!-- IF JAB_USE_SSL --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="jab_use_ssl" value="0"<!-- IF not JAB_USE_SSL --> checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="jab_verify_peer">{L_JAB_VERIFY_PEER}{L_COLON}</label><br /><span>{L_JAB_VERIFY_PEER_EXPLAIN}</span></dt>
|
||||
<dd><label><input type="radio" class="radio" id="jab_verify_peer" name="jab_verify_peer" value="1"<!-- IF JAB_VERIFY_PEER --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="jab_verify_peer" value="0"<!-- IF not JAB_VERIFY_PEER --> checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="jab_verify_peer_name">{L_JAB_VERIFY_PEER_NAME}{L_COLON}</label><br /><span>{L_JAB_VERIFY_PEER_NAME_EXPLAIN}</span></dt>
|
||||
<dd><label><input type="radio" class="radio" id="jab_verify_peer_name" name="jab_verify_peer_name" value="1"<!-- IF JAB_VERIFY_PEER_NAME --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="jab_verify_peer_name" value="0"<!-- IF not JAB_VERIFY_PEER_NAME --> checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="jab_allow_self_signed">{L_JAB_ALLOW_SELF_SIGNED}{L_COLON}</label><br /><span>{L_JAB_ALLOW_SELF_SIGNED_EXPLAIN}</span></dt>
|
||||
<dd><label><input type="radio" class="radio" id="jab_allow_self_signed" name="jab_allow_self_signed" value="1"<!-- IF JAB_ALLOW_SELF_SIGNED --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="jab_allow_self_signed" value="0"<!-- IF not JAB_ALLOW_SELF_SIGNED --> checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<!-- ENDIF -->
|
||||
<dl>
|
||||
<dt><label for="jab_package_size">{L_JAB_PACKAGE_SIZE}{L_COLON}</label><br /><span>{L_JAB_PACKAGE_SIZE_EXPLAIN}</span></dt>
|
||||
<dd><input type="number" id="jab_package_size" name="jab_package_size" value="{JAB_PACKAGE_SIZE}" maxlength="5" size="5" min="0" max="99999" /></dd>
|
||||
<dd><input type="number" id="jab_package_size" name="jab_package_size" value="{JAB_PACKAGE_SIZE}" min="0" max="99999" /></dd>
|
||||
</dl>
|
||||
|
||||
</fieldset>
|
||||
|
@@ -14,7 +14,11 @@
|
||||
|
||||
<p>{L_ADMIN_INTRO}</p>
|
||||
|
||||
<!-- IF S_VERSIONCHECK_FAIL -->
|
||||
<!-- IF S_UPDATE_INCOMPLETE -->
|
||||
<div class="errorbox">
|
||||
<p>{L_UPDATE_INCOMPLETE} <a href="{U_VERSIONCHECK}">{L_MORE_INFORMATION}</a></p>
|
||||
</div>
|
||||
<!-- ELSEIF S_VERSIONCHECK_FAIL -->
|
||||
<div class="errorbox notice">
|
||||
<p>{L_VERSIONCHECK_FAIL}</p>
|
||||
<p>{VERSIONCHECK_FAIL_REASON}</p>
|
||||
@@ -26,6 +30,11 @@
|
||||
<p><a href="{U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a> · <a href="{U_VERSIONCHECK}">{L_MORE_INFORMATION}</a></p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
<!-- IF S_VERSION_UPGRADEABLE -->
|
||||
<div class="errorbox notice">
|
||||
<p>{UPGRADE_INSTRUCTIONS}</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF S_SEARCH_INDEX_MISSING -->
|
||||
<div class="errorbox">
|
||||
|
@@ -63,6 +63,7 @@
|
||||
<!-- ENDIF -->
|
||||
<!-- ENDIF -->
|
||||
</select>
|
||||
<!-- EVENT acp_posting_buttons_custom_tags_before -->
|
||||
<!-- BEGIN custom_tags -->
|
||||
<input type="button" class="button2" name="addbbcode{custom_tags.BBCODE_ID}" value="{custom_tags.BBCODE_TAG}" onclick="bbstyle({custom_tags.BBCODE_ID})" title="{custom_tags.BBCODE_HELPLINE}" />
|
||||
<!-- END custom_tags -->
|
||||
|
@@ -85,6 +85,7 @@
|
||||
<dd><input type="checkbox" class="radio" id="field_is_contact" name="field_is_contact" value="1"<!-- IF S_FIELD_CONTACT --> checked="checked"<!-- ENDIF --> /></dd>
|
||||
<dd><input class="text medium" type="text" name="field_contact_desc" id="field_contact_desc" value="{FIELD_CONTACT_DESC}" /> <label for="field_contact_desc">{L_FIELD_CONTACT_DESC}</label></dd>
|
||||
<dd><input class="text medium" type="text" name="field_contact_url" id="field_contact_url" value="{FIELD_CONTACT_URL}" /> <label for="field_contact_url">{L_FIELD_CONTACT_URL}</label></dd>
|
||||
<!-- EVENT acp_profile_contact_last -->
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
||||
@@ -127,6 +128,7 @@
|
||||
<!-- ENDIF -->
|
||||
</dl>
|
||||
<!-- ENDIF -->
|
||||
<!-- EVENT acp_profile_step_one_lang_after -->
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="quick">
|
||||
|
@@ -44,7 +44,7 @@
|
||||
<div id="posts"<!-- IF S_SPECIAL_RANK --> style="display: none;"<!-- ENDIF -->>
|
||||
<dl>
|
||||
<dt><label for="min_posts">{L_RANK_MINIMUM}{L_COLON}</label></dt>
|
||||
<dd><input name="min_posts" type="number" id="min_posts" maxlength="10" value="{MIN_POSTS}" /></dd>
|
||||
<dd><input name="min_posts" type="number" id="min_posts" min="0" max="9999999999" value="{MIN_POSTS}" /></dd>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
|
@@ -18,11 +18,11 @@
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="search_interval">{L_SEARCH_INTERVAL}{L_COLON}</label><br /><span>{L_SEARCH_INTERVAL_EXPLAIN}</span></dt>
|
||||
<dd><input id="search_interval" type="number" size="4" maxlength="4" min="0" max="9999" name="config[search_interval]" value="{SEARCH_INTERVAL}" /> {L_SECONDS}</dd>
|
||||
<dd><input id="search_interval" type="number" min="0" max="9999" name="config[search_interval]" value="{SEARCH_INTERVAL}" /> {L_SECONDS}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="search_anonymous_interval">{L_SEARCH_GUEST_INTERVAL}{L_COLON}</label><br /><span>{L_SEARCH_GUEST_INTERVAL_EXPLAIN}</span></dt>
|
||||
<dd><input id="search_anonymous_interval" type="number" size="4" maxlength="4" min="0" max="9999" name="config[search_anonymous_interval]" value="{SEARCH_GUEST_INTERVAL}" /> {L_SECONDS}</dd>
|
||||
<dd><input id="search_anonymous_interval" type="number" min="0" max="9999" name="config[search_anonymous_interval]" value="{SEARCH_GUEST_INTERVAL}" /> {L_SECONDS}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="limit_search_load">{L_LIMIT_SEARCH_LOAD}{L_COLON}</label><br /><span>{L_LIMIT_SEARCH_LOAD_EXPLAIN}</span></dt>
|
||||
@@ -30,15 +30,15 @@
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="min_search_author_chars">{L_MIN_SEARCH_AUTHOR_CHARS}{L_COLON}</label><br /><span>{L_MIN_SEARCH_AUTHOR_CHARS_EXPLAIN}</span></dt>
|
||||
<dd><input id="min_search_author_chars" type="number" size="4" maxlength="4" min="0" max="9999" name="config[min_search_author_chars]" value="{MIN_SEARCH_AUTHOR_CHARS}" /></dd>
|
||||
<dd><input id="min_search_author_chars" type="number" min="0" max="9999" name="config[min_search_author_chars]" value="{MIN_SEARCH_AUTHOR_CHARS}" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<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" size="4" maxlength="4" min="0" max="9999" name="config[max_num_search_keywords]" value="{MAX_NUM_SEARCH_KEYWORDS}" /></dd>
|
||||
<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="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" size="4" maxlength="6" min="0" max="999999" name="config[search_store_results]" value="{SEARCH_STORE_RESULTS}" /> {L_SECONDS}</dd>
|
||||
<dd><input id="search_store_results" type="number" min="0" max="999999" name="config[search_store_results]" value="{SEARCH_STORE_RESULTS}" /> {L_SECONDS}</dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
||||
|
@@ -51,6 +51,10 @@
|
||||
<dt><label>{L_STYLE_PATH}{L_COLON}</label></dt>
|
||||
<dd><strong>{STYLE_PATH}</strong></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label>{L_STYLE_VERSION}{L_COLON}</label></dt>
|
||||
<dd><strong>{STYLE_VERSION}</strong></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="name">{L_COPYRIGHT}{L_COLON}</label></dt>
|
||||
<dd><strong>{STYLE_COPYRIGHT}</strong></dd>
|
||||
|
@@ -6,22 +6,43 @@
|
||||
|
||||
<p>{L_VERSION_CHECK_EXPLAIN}</p>
|
||||
|
||||
<!-- IF S_UPDATE_INCOMPLETE -->
|
||||
<div class="errorbox">
|
||||
<p>{L_UPDATE_INCOMPLETE} {L_UPDATE_INCOMPLETE_MORE}</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
<!-- IF S_UP_TO_DATE -->
|
||||
<div class="successbox">
|
||||
<p>{L_VERSION_UP_TO_DATE_ACP} - <a href="{U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a></p>
|
||||
</div>
|
||||
<!-- ELSE -->
|
||||
<!-- ELSEIF not S_UPDATE_INCOMPLETE -->
|
||||
<div class="errorbox">
|
||||
<p>{L_VERSION_NOT_UP_TO_DATE_ACP} - <a href="{U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a></p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
<!-- IF S_VERSION_UPGRADEABLE -->
|
||||
<div class="errorbox notice">
|
||||
<p>{UPGRADE_INSTRUCTIONS}</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<fieldset>
|
||||
<legend></legend>
|
||||
<!-- IF not S_UPDATE_INCOMPLETE -->
|
||||
<dl>
|
||||
<dt><label>{L_CURRENT_VERSION}</label></dt>
|
||||
<dd><strong>{CURRENT_VERSION}</strong></dd>
|
||||
</dl>
|
||||
<!-- ELSE -->
|
||||
<dl>
|
||||
<dt><label>{L_FILES_VERSION}</label></dt>
|
||||
<dd><strong>{FILES_VERSION}</strong></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label>{L_DATABASE_VERSION}</label></dt>
|
||||
<dd><strong>{CURRENT_VERSION}</strong></dd>
|
||||
</dl>
|
||||
<!-- ENDIF -->
|
||||
</fieldset>
|
||||
|
||||
<!-- BEGIN updates_available -->
|
||||
@@ -38,6 +59,11 @@
|
||||
</fieldset>
|
||||
<!-- END updates_available -->
|
||||
|
||||
<!-- IF S_UPDATE_INCOMPLETE -->
|
||||
{INCOMPLETE_INSTRUCTIONS}
|
||||
<br>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF not S_UP_TO_DATE -->
|
||||
{UPDATE_INSTRUCTIONS}
|
||||
<br /><br />
|
||||
|
@@ -52,7 +52,7 @@
|
||||
<dl>
|
||||
<dt><label for="dateoptions">{L_BOARD_DATE_FORMAT}{L_COLON}</label><br /><span>{L_BOARD_DATE_FORMAT_EXPLAIN}</span></dt>
|
||||
<dd><select name="dateoptions" id="dateoptions" onchange="if(this.value=='custom'){phpbb.toggleDisplay('custom_date',1);}else{phpbb.toggleDisplay('custom_date',-1);} if (this.value == 'custom') { document.getElementById('dateformat').value = default_dateformat; } else { document.getElementById('dateformat').value = this.value; }">{S_DATEFORMAT_OPTIONS}</select></dd>
|
||||
<dd><div id="custom_date"<!-- IF not S_CUSTOM_DATEFORMAT --> style="display:none;"<!-- ENDIF -->><input type="text" name="dateformat" id="dateformat" value="{DATE_FORMAT}" maxlength="30" /></div></dd>
|
||||
<dd><div id="custom_date"<!-- IF not S_CUSTOM_DATEFORMAT --> style="display:none;"<!-- ENDIF -->><input type="text" name="dateformat" id="dateformat" value="{DATE_FORMAT}" maxlength="64" /></div></dd>
|
||||
</dl>
|
||||
<!-- EVENT acp_users_prefs_personal_append -->
|
||||
</fieldset>
|
||||
|
@@ -62,7 +62,127 @@ phpbb.addAjaxCallback('row_delete', function(res) {
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Handler for submitting permissions form in chunks
|
||||
* This call will submit permissions forms in chunks of 5 fieldsets.
|
||||
*/
|
||||
function submitPermissions() {
|
||||
var $form = $('form#set-permissions'),
|
||||
fieldsetList = $form.find('fieldset[id^=perm]'),
|
||||
formDataSets = [],
|
||||
$submitAllButton = $form.find('input[type=submit][name^=action]')[0],
|
||||
$submitButton = $form.find('input[type=submit][data-clicked=true]')[0];
|
||||
|
||||
// Set proper start values for handling refresh of page
|
||||
var permissionSubmitSize = 0,
|
||||
permissionRequestCount = 0,
|
||||
forumIds = [],
|
||||
permissionSubmitFailed = false;
|
||||
|
||||
if ($submitAllButton !== $submitButton) {
|
||||
fieldsetList = $form.find('fieldset#' + $submitButton.closest('fieldset.permissions').id);
|
||||
}
|
||||
|
||||
$.each(fieldsetList, function (key, value) {
|
||||
if (key % 5 === 0) {
|
||||
formDataSets[Math.floor(key / 5)] = $form.find('fieldset#' + value.id).serialize();
|
||||
} else {
|
||||
formDataSets[Math.floor(key / 5)] += '&' + $form.find('fieldset#' + value.id).serialize();
|
||||
}
|
||||
});
|
||||
|
||||
permissionSubmitSize = formDataSets.length;
|
||||
|
||||
// Add each forum ID to forum ID list to preserve selected forums
|
||||
$.each($form.find('input[type=hidden][name^=forum_id]'), function (key, value) {
|
||||
if (value.name.match(/^forum_id\[([0-9]+)\]$/)) {
|
||||
forumIds.push(value.value);
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Handler for submitted permissions form chunk
|
||||
*
|
||||
* @param {object} res Object returned by AJAX call
|
||||
*/
|
||||
function handlePermissionReturn(res) {
|
||||
permissionRequestCount++;
|
||||
var $dark = $('#darkenwrapper');
|
||||
|
||||
if (res.S_USER_WARNING) {
|
||||
phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT);
|
||||
permissionSubmitFailed = true;
|
||||
} else if (!permissionSubmitFailed && res.S_USER_NOTICE) {
|
||||
// Display success message at the end of submitting the form
|
||||
if (permissionRequestCount >= permissionSubmitSize) {
|
||||
var $alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT);
|
||||
var $alertBoxLink = $alert.find('p.alert_text > a');
|
||||
|
||||
// Create form to submit instead of normal "Back to previous page" link
|
||||
if ($alertBoxLink) {
|
||||
// Remove forum_id[] from URL
|
||||
$alertBoxLink.attr('href', $alertBoxLink.attr('href').replace(/(&forum_id\[\]=[0-9]+)/g, ''));
|
||||
var previousPageForm = '<form action="' + $alertBoxLink.attr('href') + '" method="post">';
|
||||
$.each(forumIds, function (key, value) {
|
||||
previousPageForm += '<input type="text" name="forum_id[]" value="' + value + '" />';
|
||||
});
|
||||
previousPageForm += '</form>';
|
||||
|
||||
$alertBoxLink.on('click', function (e) {
|
||||
var $previousPageForm = $(previousPageForm);
|
||||
$('body').append($previousPageForm);
|
||||
e.preventDefault();
|
||||
$previousPageForm.submit();
|
||||
});
|
||||
}
|
||||
|
||||
// Do not allow closing alert
|
||||
$dark.off('click');
|
||||
$alert.find('.alert_close').hide();
|
||||
|
||||
if (typeof res.REFRESH_DATA !== 'undefined') {
|
||||
setTimeout(function () {
|
||||
// Create forum to submit using POST. This will prevent
|
||||
// exceeding the maximum length of URLs
|
||||
var form = '<form action="' + res.REFRESH_DATA.url.replace(/(&forum_id\[\]=[0-9]+)/g, '') + '" method="post">';
|
||||
$.each(forumIds, function (key, value) {
|
||||
form += '<input type="text" name="forum_id[]" value="' + value + '" />';
|
||||
});
|
||||
form += '</form>';
|
||||
$form = $(form);
|
||||
$('body').append($form);
|
||||
|
||||
// Hide the alert even if we refresh the page, in case the user
|
||||
// presses the back button.
|
||||
$dark.fadeOut(phpbb.alertTime, function () {
|
||||
if (typeof $alert !== 'undefined') {
|
||||
$alert.hide();
|
||||
}
|
||||
});
|
||||
|
||||
// Submit form
|
||||
$form.submit();
|
||||
}, res.REFRESH_DATA.time * 1000); // Server specifies time in seconds
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Create AJAX request for each form data set
|
||||
$.each(formDataSets, function (key, formData) {
|
||||
$.ajax({
|
||||
url: $form.action,
|
||||
type: 'POST',
|
||||
data: formData + '&' + $submitButton.name + '=' + encodeURIComponent($submitButton.value) +
|
||||
'&creation_time=' + $form.find('input[type=hidden][name=creation_time]')[0].value +
|
||||
'&form_token=' + $form.find('input[type=hidden][name=form_token]')[0].value +
|
||||
'&' + $form.children('input[type=hidden]').serialize() +
|
||||
'&' + $form.find('input[type=checkbox][name^=inherit]').serialize(),
|
||||
success: handlePermissionReturn,
|
||||
error: handlePermissionReturn
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
$('[data-ajax]').each(function() {
|
||||
var $this = $(this),
|
||||
@@ -83,6 +203,18 @@ $('[data-ajax]').each(function() {
|
||||
*/
|
||||
$(function() {
|
||||
phpbb.resizeTextArea($('textarea:not(.no-auto-resize)'), {minHeight: 75});
|
||||
|
||||
var $setPermissionsForm = $('form#set-permissions');
|
||||
if ($setPermissionsForm.length) {
|
||||
$setPermissionsForm.on('submit', function (e) {
|
||||
submitPermissions();
|
||||
e.preventDefault();
|
||||
});
|
||||
$setPermissionsForm.find('input[type=submit]').click(function() {
|
||||
$('input[type=submit]', $(this).parents($('form#set-permissions'))).removeAttr('data-clicked');
|
||||
$(this).attr('data-clicked', true);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
@@ -12,7 +12,7 @@
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="{T_JQUERY_LINK}"></script>
|
||||
<!-- IF S_ALLOW_CDN --><script type="text/javascript">window.jQuery || document.write(unescape('%3Cscript src="{T_ASSETS_PATH}/javascript/jquery.min.js" type="text/javascript"%3E%3C/script%3E'));</script><!-- ENDIF -->
|
||||
<!-- IF S_ALLOW_CDN --><script type="text/javascript">window.jQuery || document.write('\x3Cscript src="{T_ASSETS_PATH}/javascript/jquery.min.js">\x3C/script>');</script><!-- ENDIF -->
|
||||
<script type="text/javascript" src="{T_ASSETS_PATH}/javascript/core.js?assets_version={T_ASSETS_VERSION}"></script>
|
||||
<!-- INCLUDEJS admin.js -->
|
||||
{$SCRIPTS}
|
||||
|
@@ -2,6 +2,7 @@
|
||||
<html dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<!-- IF META -->{META}<!-- ENDIF -->
|
||||
<title>{PAGE_TITLE}</title>
|
||||
|
@@ -2,6 +2,7 @@
|
||||
<html dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<!-- IF META -->{META}<!-- ENDIF -->
|
||||
<title>{PAGE_TITLE}</title>
|
||||
|
@@ -34,7 +34,7 @@
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="{T_JQUERY_LINK}"></script>
|
||||
<!-- IF S_ALLOW_CDN --><script type="text/javascript">window.jQuery || document.write(unescape('%3Cscript src="{T_ASSETS_PATH}/javascript/jquery.min.js?assets_version={T_ASSETS_VERSION}" type="text/javascript"%3E%3C/script%3E'));</script><!-- ENDIF -->
|
||||
<!-- IF S_ALLOW_CDN --><script type="text/javascript">window.jQuery || document.write('\x3Cscript src="{T_ASSETS_PATH}/javascript/jquery.min.js?assets_version={T_ASSETS_VERSION}">\x3C/script>');</script><!-- ENDIF -->
|
||||
<script type="text/javascript" src="{T_ASSETS_PATH}/javascript/core.js?assets_version={T_ASSETS_VERSION}"></script>
|
||||
<!-- INCLUDEJS ajax.js -->
|
||||
<!-- INCLUDEJS admin.js -->
|
||||
|
@@ -2,6 +2,7 @@
|
||||
<html dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<!-- IF META -->{META}<!-- ENDIF -->
|
||||
<title>{PAGE_TITLE}</title>
|
||||
@@ -52,7 +53,7 @@ function marklist(id, name, state)
|
||||
|
||||
for (var r = 0; r < rb.length; r++)
|
||||
{
|
||||
if (rb[r].name.substr(0, name.length) == name)
|
||||
if (rb[r].name.substr(0, name.length) == name && rb[r].disabled !== true)
|
||||
{
|
||||
rb[r].checked = state;
|
||||
}
|
||||
|
@@ -17,7 +17,7 @@
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="{T_JQUERY_LINK}"></script>
|
||||
<!-- IF S_ALLOW_CDN --><script type="text/javascript">window.jQuery || document.write(unescape('%3Cscript src="{T_ASSETS_PATH}/javascript/jquery.min.js?assets_version={T_ASSETS_VERSION}" type="text/javascript"%3E%3C/script%3E'));</script><!-- ENDIF -->
|
||||
<!-- IF S_ALLOW_CDN --><script type="text/javascript">window.jQuery || document.write('\x3Cscript src="{T_ASSETS_PATH}/javascript/jquery.min.js?assets_version={T_ASSETS_VERSION}">\x3C/script>');</script><!-- ENDIF -->
|
||||
<script type="text/javascript" src="{T_ASSETS_PATH}/javascript/core.js?assets_version={T_ASSETS_VERSION}"></script>
|
||||
|
||||
<!-- EVENT acp_simple_footer_after -->
|
||||
|
@@ -2,6 +2,7 @@
|
||||
<html dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<!-- IF META -->{META}<!-- ENDIF -->
|
||||
<title>{PAGE_TITLE}</title>
|
||||
@@ -65,7 +66,7 @@ function marklist(id, name, state)
|
||||
|
||||
for (var r = 0; r < rb.length; r++)
|
||||
{
|
||||
if (rb[r].name.substr(0, name.length) == name)
|
||||
if (rb[r].name.substr(0, name.length) == name && rb[r].disabled !== true)
|
||||
{
|
||||
rb[r].checked = state;
|
||||
}
|
||||
|
@@ -33,20 +33,27 @@ phpbb.loadingIndicator = function() {
|
||||
|
||||
if (!$loadingIndicator.is(':visible')) {
|
||||
$loadingIndicator.fadeIn(phpbb.alertTime);
|
||||
// Wait fifteen seconds and display an error if nothing has been returned by then.
|
||||
// Wait 60 seconds and display an error if nothing has been returned by then.
|
||||
phpbb.clearLoadingTimeout();
|
||||
phpbbAlertTimer = setTimeout(function() {
|
||||
var $alert = $('#phpbb_alert');
|
||||
|
||||
if ($loadingIndicator.is(':visible')) {
|
||||
phpbb.alert($alert.attr('data-l-err'), $alert.attr('data-l-timeout-processing-req'));
|
||||
}
|
||||
}, 15000);
|
||||
phpbb.showTimeoutMessage();
|
||||
}, 60000);
|
||||
}
|
||||
|
||||
return $loadingIndicator;
|
||||
};
|
||||
|
||||
/**
|
||||
* Show timeout message
|
||||
*/
|
||||
phpbb.showTimeoutMessage = function () {
|
||||
var $alert = $('#phpbb_alert');
|
||||
|
||||
if ($loadingIndicator.is(':visible')) {
|
||||
phpbb.alert($alert.attr('data-l-err'), $alert.attr('data-l-timeout-processing-req'));
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Clear loading alert timeout
|
||||
*/
|
||||
@@ -1029,7 +1036,7 @@ phpbb.resizeTextArea = function($items, options) {
|
||||
|
||||
function autoResize(item) {
|
||||
function setHeight(height) {
|
||||
height += parseInt($item.css('height'), 10) - $item.height();
|
||||
height += parseInt($item.css('height'), 10) - $item.innerHeight();
|
||||
$item
|
||||
.css({ height: height + 'px', resize: 'none' })
|
||||
.addClass('auto-resized');
|
||||
@@ -1048,7 +1055,7 @@ phpbb.resizeTextArea = function($items, options) {
|
||||
configuration.maxHeight
|
||||
),
|
||||
$item = $(item),
|
||||
height = parseInt($item.height(), 10),
|
||||
height = parseInt($item.innerHeight(), 10),
|
||||
scrollHeight = (item.scrollHeight) ? item.scrollHeight : 0;
|
||||
|
||||
if (height < 0) {
|
||||
@@ -1538,6 +1545,13 @@ phpbb.toggleSelectSettings = function(el) {
|
||||
var $this = $(this),
|
||||
$setting = $($this.data('toggle-setting'));
|
||||
$setting.toggle($this.is(':selected'));
|
||||
|
||||
// Disable any input elements that are not visible right now
|
||||
if ($this.is(':selected')) {
|
||||
$($this.data('toggle-setting') + ' input').prop('disabled', false);
|
||||
} else {
|
||||
$($this.data('toggle-setting') + ' input').prop('disabled', true);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
@@ -358,6 +358,12 @@ function getCaretPosition(txtarea) {
|
||||
if ($('#attach-panel').length) {
|
||||
phpbb.showDragNDrop(textarea);
|
||||
}
|
||||
|
||||
$('textarea').on('keydown', function (e) {
|
||||
if (e.which === 13 && (e.metaKey || e.ctrlKey)) {
|
||||
$(this).closest('form').submit();
|
||||
}
|
||||
});
|
||||
});
|
||||
})(jQuery);
|
||||
|
||||
|
@@ -59,6 +59,8 @@ $phpbb_container->get('request')->enable_super_globals();
|
||||
require($phpbb_root_path . 'includes/compatibility_globals.' . $phpEx);
|
||||
|
||||
$user = $phpbb_container->get('user');
|
||||
$user->data['user_id'] = ANONYMOUS;
|
||||
$user->ip = '127.0.0.1';
|
||||
$user->add_lang('acp/common');
|
||||
$user->add_lang('cli');
|
||||
|
||||
|
@@ -38,7 +38,13 @@ if (!defined('PHPBB_INSTALLED'))
|
||||
// available as used by the redirect function
|
||||
$server_name = (!empty($_SERVER['HTTP_HOST'])) ? strtolower($_SERVER['HTTP_HOST']) : ((!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : getenv('SERVER_NAME'));
|
||||
$server_port = (!empty($_SERVER['SERVER_PORT'])) ? (int) $_SERVER['SERVER_PORT'] : (int) getenv('SERVER_PORT');
|
||||
$secure = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 1 : 0;
|
||||
$secure = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 1 : 0;
|
||||
|
||||
if (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https')
|
||||
{
|
||||
$secure = 1;
|
||||
$server_port = 443;
|
||||
}
|
||||
|
||||
$script_name = (!empty($_SERVER['PHP_SELF'])) ? $_SERVER['PHP_SELF'] : getenv('PHP_SELF');
|
||||
if (!$script_name)
|
||||
|
@@ -34,7 +34,7 @@
|
||||
"symfony/http-kernel": "2.3.*",
|
||||
"symfony/routing": "2.3.*",
|
||||
"symfony/yaml": "2.3.*",
|
||||
"twig/twig": "1.*"
|
||||
"twig/twig": "^1.0,<1.25"
|
||||
},
|
||||
"require-dev": {
|
||||
"fabpot/goutte": "1.0.*",
|
||||
@@ -51,5 +51,10 @@
|
||||
"symfony/finder": "2.3.*",
|
||||
"symfony/http-foundation": "2.3.*",
|
||||
"symfony/process": "2.3.*"
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.1.x-dev"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
676
phpBB/composer.lock
generated
676
phpBB/composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -62,6 +62,7 @@ services:
|
||||
- @auth.provider.oauth.service_collection
|
||||
- %tables.users%
|
||||
- @service_container
|
||||
- @dispatcher
|
||||
- %core.root_path%
|
||||
- %core.php_ext%
|
||||
tags:
|
||||
|
@@ -139,3 +139,24 @@ services:
|
||||
- @dbal.conn
|
||||
tags:
|
||||
- { name: console.command }
|
||||
|
||||
console.command.fixup.update_hashes:
|
||||
class: phpbb\console\command\fixup\update_hashes
|
||||
arguments:
|
||||
- @config
|
||||
- @user
|
||||
- @dbal.conn
|
||||
- @passwords.manager
|
||||
- @passwords.driver_collection
|
||||
- %passwords.algorithms%
|
||||
tags:
|
||||
- { name: console.command }
|
||||
|
||||
console.command.fixup.fix_left_right_ids:
|
||||
class: phpbb\console\command\fixup\fix_left_right_ids
|
||||
arguments:
|
||||
- @user
|
||||
- @dbal.conn
|
||||
- @cache.driver
|
||||
tags:
|
||||
- { name: console.command }
|
||||
|
@@ -146,3 +146,17 @@ services:
|
||||
- [set_name, [cron.task.core.tidy_warnings]]
|
||||
tags:
|
||||
- { name: cron.task }
|
||||
|
||||
cron.task.core.update_hashes:
|
||||
class: phpbb\cron\task\core\update_hashes
|
||||
arguments:
|
||||
- @config
|
||||
- @dbal.conn
|
||||
- @passwords.update.lock
|
||||
- @passwords.manager
|
||||
- @passwords.driver_collection
|
||||
- %passwords.algorithms%
|
||||
calls:
|
||||
- [set_name, [cron.task.core.update_hashes]]
|
||||
tags:
|
||||
- { name: cron.task }
|
||||
|
@@ -5,9 +5,7 @@ services:
|
||||
- @service_container
|
||||
|
||||
dbal.conn.driver:
|
||||
class: %dbal.driver.class%
|
||||
calls:
|
||||
- [sql_connect, [%dbal.dbhost%, %dbal.dbuser%, %dbal.dbpasswd%, %dbal.dbname%, %dbal.dbport%, false, %dbal.new_link%]]
|
||||
synthetic: true
|
||||
|
||||
dbal.tools:
|
||||
class: phpbb\db\tools
|
||||
|
@@ -25,6 +25,7 @@ services:
|
||||
- @user
|
||||
- @auth
|
||||
- @content.visibility
|
||||
- @dispatcher
|
||||
- %core.php_ext%
|
||||
|
||||
feed.forums:
|
||||
@@ -38,6 +39,7 @@ services:
|
||||
- @user
|
||||
- @auth
|
||||
- @content.visibility
|
||||
- @dispatcher
|
||||
- %core.php_ext%
|
||||
|
||||
feed.news:
|
||||
@@ -51,6 +53,7 @@ services:
|
||||
- @user
|
||||
- @auth
|
||||
- @content.visibility
|
||||
- @dispatcher
|
||||
- %core.php_ext%
|
||||
|
||||
feed.overall:
|
||||
@@ -64,6 +67,7 @@ services:
|
||||
- @user
|
||||
- @auth
|
||||
- @content.visibility
|
||||
- @dispatcher
|
||||
- %core.php_ext%
|
||||
|
||||
feed.topic:
|
||||
@@ -77,6 +81,7 @@ services:
|
||||
- @user
|
||||
- @auth
|
||||
- @content.visibility
|
||||
- @dispatcher
|
||||
- %core.php_ext%
|
||||
|
||||
feed.topics:
|
||||
@@ -90,6 +95,7 @@ services:
|
||||
- @user
|
||||
- @auth
|
||||
- @content.visibility
|
||||
- @dispatcher
|
||||
- %core.php_ext%
|
||||
|
||||
feed.topics_active:
|
||||
@@ -103,4 +109,5 @@ services:
|
||||
- @user
|
||||
- @auth
|
||||
- @content.visibility
|
||||
- @dispatcher
|
||||
- %core.php_ext%
|
||||
|
@@ -122,3 +122,10 @@ services:
|
||||
- @passwords.driver_helper
|
||||
tags:
|
||||
- { name: passwords.driver }
|
||||
|
||||
passwords.update.lock:
|
||||
class: phpbb\lock\db
|
||||
arguments:
|
||||
- update_hashes_lock
|
||||
- '@config'
|
||||
- '@dbal.conn'
|
||||
|
@@ -55,6 +55,18 @@ if ($cron_lock->acquire())
|
||||
$task = $cron->find_task($cron_type);
|
||||
if ($task)
|
||||
{
|
||||
/**
|
||||
* This event enables you to catch the task before it runs
|
||||
*
|
||||
* @event core.cron_run_before
|
||||
* @var \phpbb\cron\task\wrapper task Current Cron task
|
||||
* @since 3.1.8-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'task',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.cron_run_before', compact($vars)));
|
||||
|
||||
if ($task->is_parametrized())
|
||||
{
|
||||
$task->parse_parameters($request);
|
||||
|
@@ -2,6 +2,7 @@
|
||||
<html dir="ltr" lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="keywords" content="" />
|
||||
<meta name="description" content="phpBB 3.1.x Changelog" />
|
||||
<title>phpBB • Changelog</title>
|
||||
@@ -49,6 +50,10 @@
|
||||
<ol>
|
||||
<li><a href="#changelog">Changelog</a>
|
||||
<ul>
|
||||
<li><a href="#v3110">Changes since 3.1.10</a></li>
|
||||
<li><a href="#v319">Changes since 3.1.9</a></li>
|
||||
<li><a href="#v318">Changes since 3.1.8</a></li>
|
||||
<li><a href="#v317pl1">Changes since 3.1.7-PL1</a></li>
|
||||
<li><a href="#v317">Changes since 3.1.7</a></li>
|
||||
<li><a href="#v316">Changes since 3.1.6</a></li>
|
||||
<li><a href="#v315">Changes since 3.1.5</a></li>
|
||||
@@ -113,7 +118,330 @@
|
||||
<div class="paragraph">
|
||||
<div class="inner">
|
||||
|
||||
<div class="content">
|
||||
<div class="content">
|
||||
|
||||
<a name="v3110"></a><h3>Changes since 3.1.10</h3>
|
||||
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-7336">PHPBB3-7336</a>] - Words in new topic title aren't found by search after topic is split</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-8116">PHPBB3-8116</a>] - Server timeout or browsercrash after viewing postdetails</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-8301">PHPBB3-8301</a>] - admin log generate slow queries</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-9590">PHPBB3-9590</a>] - Unable to update permissions for more than 6 forums at a time</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11076">PHPBB3-11076</a>] - Update notification in ACP for minimum PHP version missing essential information</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11483">PHPBB3-11483</a>] - Forced Activation needs looking at.</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11611">PHPBB3-11611</a>] - setup_github_network.php no longer creates a repository</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13247">PHPBB3-13247</a>] - Online indicator in post profile hides behind certain avatars</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13250">PHPBB3-13250</a>] - File cache does not write entries starting with _ and containing a slash</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13429">PHPBB3-13429</a>] - Changes tag in docblock of events should be unified</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13558">PHPBB3-13558</a>] - Error - stream_socket_enable_crypto()</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13757">PHPBB3-13757</a>] - Negative PM count</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14468">PHPBB3-14468</a>] - [php] - 'core.viewforum_modify_topics_data' add parameter forum_id</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14549">PHPBB3-14549</a>] - Correctly redirect back after topic merge in MCP</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14770">PHPBB3-14770</a>] - Plupload: WRONG_FILESIZE is used wrong</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14795">PHPBB3-14795</a>] - Topic merge bug</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14801">PHPBB3-14801</a>] - Search highlight option doesn't always highlight unicode strings</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14802">PHPBB3-14802</a>] - Empty/blank lines should not be additional poll options</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14806">PHPBB3-14806</a>] - Authentication for e-mail is not working</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14819">PHPBB3-14819</a>] - Soft deleted posts visible in topic review</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14821">PHPBB3-14821</a>] - Do not expect parsed HTML in kernel subscriber output</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14830">PHPBB3-14830</a>] - FORM_INVALID error on ACP search and CPF settings</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14831">PHPBB3-14831</a>] - Extension migration file fails</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14838">PHPBB3-14838</a>] - feeds.attachments_base - server 500 error for large attachment tables</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14844">PHPBB3-14844</a>] - BBcodes B and I return <strong> and <em> tags instead of CSS under inherited styles</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14859">PHPBB3-14859</a>] - PM report notifications only sent out to full Global Moderators</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14860">PHPBB3-14860</a>] - Broken link on subscriptions page on mobile devices</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14863">PHPBB3-14863</a>] - "Array" in message title when permanently deleting posts</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14864">PHPBB3-14864</a>] - ACP datefromat text input still has 30 max length while dateformat field had been expanded to 64</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14876">PHPBB3-14876</a>] - Multibyte message is not displayed properly on exception</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14877">PHPBB3-14877</a>] - CSS error in ".codebox code" definition</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14881">PHPBB3-14881</a>] - Problems using EVENT (overall_footer_content_after)</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14888">PHPBB3-14888</a>] - Missing check for disabled profile field types</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14889">PHPBB3-14889</a>] - Missing method declaration in profile fields type interface</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14890">PHPBB3-14890</a>] - Wrong validation of input field in profile field type string</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14906">PHPBB3-14906</a>] - Duplicated sig key in user_cache_data array</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14923">PHPBB3-14923</a>] - SQL PostgreSQL blocking errors during DB update installation</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14938">PHPBB3-14938</a>] - Inconsistent data results from ext_mgr->all_available() vs ext_mgr->is_available()</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14941">PHPBB3-14941</a>] - MySQL Fulltext search index creating still fails on InnoDB</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14943">PHPBB3-14943</a>] - Template loop access gives PHP error</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14953">PHPBB3-14953</a>] - Incorrect "order by" definition in ucp_pm_viewfolder</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14968">PHPBB3-14968</a>] - Version check marks 3.1.10 boards as outdated </li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14997">PHPBB3-14997</a>] - Bad Position for topiclist_row_topic_title_after</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14998">PHPBB3-14998</a>] - ACP Update link is incorrect!</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15003">PHPBB3-15003</a>] - When using mark all, disabled check boxes should not become checked</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15006">PHPBB3-15006</a>] - Permission inheritance with checkbox not working</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15011">PHPBB3-15011</a>] - Error not checked on metadata load failure</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15108">PHPBB3-15108</a>] - Duplicate code in request->overwrite</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15143">PHPBB3-15143</a>] - version check on branch is broken</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15146">PHPBB3-15146</a>] - Date profile field validation incorrect</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15150">PHPBB3-15150</a>] - Yabber SSL/TLS certification</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15186">PHPBB3-15186</a>] - The force_delete_allowed flag does not affect actual posts deletion ability</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15187">PHPBB3-15187</a>] - ACP Template files not purged during Extension Enable</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15246">PHPBB3-15246</a>] - Memcache driver incorrectly handles Unix sockets</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15248">PHPBB3-15248</a>] - Event core.modify_posting_auth does not honor its parameters</li>
|
||||
</ul>
|
||||
<h4>Improvement</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-9211">PHPBB3-9211</a>] - List subforums-links separately in parent-forums' legend</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12749">PHPBB3-12749</a>] - core.submit_post_end add subject to the event data</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13457">PHPBB3-13457</a>] - New Hooks for ucp_main</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13459">PHPBB3-13459</a>] - New Template-Event in overall_header.html</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13479">PHPBB3-13479</a>] - Add hook for modifying highlighting on viewtopic</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13601">PHPBB3-13601</a>] - New event upon acl_clear_prefetch</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13603">PHPBB3-13603</a>] - New event upon index_body_online_block_after</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13605">PHPBB3-13605</a>] - New event upon ucp_pm_compose_predefined_message</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13608">PHPBB3-13608</a>] - New event upon ucp_restore_permissions</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13609">PHPBB3-13609</a>] - New event upon ucp_switch_permissions</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13845">PHPBB3-13845</a>] - Add event when user changes or delete avatar</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14119">PHPBB3-14119</a>] - [PHP] - (User) unban event request</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14239">PHPBB3-14239</a>] - [PHP] - Add event ucp_remind_modify_select_sql</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14331">PHPBB3-14331</a>] - Add rank calculation or result event access</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14520">PHPBB3-14520</a>] - [Template] - ucp_pm_viewmessage_message_body_after</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14522">PHPBB3-14522</a>] - [Template] - ucp_register_buttons_before</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14524">PHPBB3-14524</a>] - [PHP] - core.ucp_register_requests_after</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14733">PHPBB3-14733</a>] - Support increasing hashing cost factor</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14750">PHPBB3-14750</a>] - Fileupload form should not set invalid attributes for file input</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14758">PHPBB3-14758</a>] - ACP-Parameter "Maximum thumbnail width in pixel" should be "Maximum thumbnail width/heigth in pixel:"</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14759">PHPBB3-14759</a>] - Event core.mcp_main_modify_shadow_sql</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14760">PHPBB3-14760</a>] - Event core.mcp_main_modify_fork_sql</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14786">PHPBB3-14786</a>] - Add mcp_forum_actions_before/after events</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14804">PHPBB3-14804</a>] - Add core event to MCP after merging topics</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14805">PHPBB3-14805</a>] - Allow building package for previous versions on PHP 7</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14808">PHPBB3-14808</a>] - Add template event overall_header_searchbox_after</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14817">PHPBB3-14817</a>] - Add core event on includes/functions_download.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14825">PHPBB3-14825</a>] - Add OAuth events</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14827">PHPBB3-14827</a>] - Possibility to add multiple form keys</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14842">PHPBB3-14842</a>] - Avatar size 0 - unlimited</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14847">PHPBB3-14847</a>] - Add php event to add options in ACP Attachments</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14848">PHPBB3-14848</a>] - Add ACP template events after extensions list titles</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14849">PHPBB3-14849</a>] - Add ACP extension event</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14850">PHPBB3-14850</a>] - Add core events for smilies</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14852">PHPBB3-14852</a>] - Add core event to the function build_header()</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14853">PHPBB3-14853</a>] - Add core event to allow modifying PM attachments download auth</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14855">PHPBB3-14855</a>] - Update notifications and PM alert bubbles</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14870">PHPBB3-14870</a>] - Add php events to modify list of PMs</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14872">PHPBB3-14872</a>] - Remove count versus sizeof restriction in coding guidelines</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14874">PHPBB3-14874</a>] - Error on sending a .pak smiley</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14882">PHPBB3-14882</a>] - Add core event to MCP after move posts sync</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14887">PHPBB3-14887</a>] - ACP profile step 1 lang specific event</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14918">PHPBB3-14918</a>] - Provide quick access to extension version metadata</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14940">PHPBB3-14940</a>] - Add ACP template event acp_ext_details_end</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14957">PHPBB3-14957</a>] - Do not cache database config</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14958">PHPBB3-14958</a>] - Twig extension function lang() performs redundant template data copying</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15020">PHPBB3-15020</a>] - Add Events for mcp_topic_postrow_post_subject</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15059">PHPBB3-15059</a>] - Do not wrap content in code box</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15081">PHPBB3-15081</a>] - Add ACP template event acp_ext_details_notice</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15107">PHPBB3-15107</a>] - Add additional vars to event</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15131">PHPBB3-15131</a>] - Add variable to the 'core.mcp_main_modify_fork_sql' event</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15142">PHPBB3-15142</a>] - Extension Version Check Should Support Branches</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15151">PHPBB3-15151</a>] - ACP Cookie settings should contain explanatory text for all fields</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15199">PHPBB3-15199</a>] - Add core event to the function send() in the messenger</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15200">PHPBB3-15200</a>] - Allow extensions using custom templates for help/faq controllers </li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15205">PHPBB3-15205</a>] - Add template events to forumlist_body.html</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15219">PHPBB3-15219</a>] - Add cron to update passwords hashes to bcrypt</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15226">PHPBB3-15226</a>] - Add index for latest topics query in feeds</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15237">PHPBB3-15237</a>] - Unguarded includes functions_user</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15238">PHPBB3-15238</a>] - Add console command to fix left/right IDs for the forums and modules</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15241">PHPBB3-15241</a>] - Add ACP template event acp_profile_contact_last</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15250">PHPBB3-15250</a>] - Add core event to MCP at the end of merge_posts</li>
|
||||
</ul>
|
||||
<h4>New Feature</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12545">PHPBB3-12545</a>] - new pre-posting event</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13730">PHPBB3-13730</a>] - [PHP] - core.delete_post_end</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14390">PHPBB3-14390</a>] - [prosilver] - ucp_main_front_user_details_after</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14498">PHPBB3-14498</a>] - Not possible to deactivate display of "who is online" and birthdays for guests</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14662">PHPBB3-14662</a>] - [Template] - memberlist_team_username_prepend & append</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14868">PHPBB3-14868</a>] - [Template] - mcp_forum_modify_select_after</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14996">PHPBB3-14996</a>] - [event] - Add Event search_results_topictitle_after</li>
|
||||
</ul>
|
||||
<h4>Sub-task</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13149">PHPBB3-13149</a>] - [Event] - core.phpbb_log_get_topic_auth_sql_before</li>
|
||||
</ul>
|
||||
<h4>Task</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15178">PHPBB3-15178</a>] - Update 3.1.x dependencies</li>
|
||||
</ul>
|
||||
|
||||
<a name="v319"></a><h3>Changes since 3.1.9</h3>
|
||||
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11446">PHPBB3-11446</a>] - Use sql_in_set as designed and consistent with the rest of phpBB code in phpbb_notification_manager</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12230">PHPBB3-12230</a>] - Do not auto remove user group when Newly Registered Users group was disabled</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12925">PHPBB3-12925</a>] - Use plural for permanent delete posts/topics confirmation</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14109">PHPBB3-14109</a>] - MySQL InnoDB does not support multiple index definitions on the same query.</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14291">PHPBB3-14291</a>] - Function send_file_to_browser() endlessly overwrites 'filesize' in ATTACHMENTS_TABLE</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14610">PHPBB3-14610</a>] - Q&A CAPTCHA logs error when it has been solved</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14615">PHPBB3-14615</a>] - delete avatar triggers the new min max value in the HTML5 inputs</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14616">PHPBB3-14616</a>] - Auto-prune fails on large forums</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14631">PHPBB3-14631</a>] - 3.1.9 DB cli update crashes with PHP Fatal error: Call to undefined function phpbb\truncate_string()</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14654">PHPBB3-14654</a>] - Imagemagick > ImageMagick</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14661">PHPBB3-14661</a>] - Fix a typo in twig.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14673">PHPBB3-14673</a>] - Missing Language Variable</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14683">PHPBB3-14683</a>] - Typos in operators in some email templates</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14703">PHPBB3-14703</a>] - module.add adds a module to the wrong parent</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14704">PHPBB3-14704</a>] - Remove unused language files and corresponding functions</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14721">PHPBB3-14721</a>] - New registrants choosing old deleted usernames get linked to old accounts with namechange</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14742">PHPBB3-14742</a>] - Improvements to migrator</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14745">PHPBB3-14745</a>] - "U_NOTIFICATION_SETTINGS" contains an HTML entity but is printed in a plaintext email</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14755">PHPBB3-14755</a>] - Error in MCP Move posts</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14782">PHPBB3-14782</a>] - Quick Links > Your Posts gives mysql error</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14788">PHPBB3-14788</a>] - Update developer list to reflect team changes</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14796">PHPBB3-14796</a>] - Log table is using constant in log delete method</li>
|
||||
</ul>
|
||||
<h4>Improvement</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13709">PHPBB3-13709</a>] - Fallback to english in email templates by extensions</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13716">PHPBB3-13716</a>] - Check phpBB version constant against config version</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13865">PHPBB3-13865</a>] - Complement core event search_modify_param</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14184">PHPBB3-14184</a>] - Missing info on SMTP mail function option</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14429">PHPBB3-14429</a>] - core.obtain_users_online_string_modify</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14466">PHPBB3-14466</a>] - Add an event to cron.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14469">PHPBB3-14469</a>] - [Template] - <!-- EVENT viewforum_topicrow_before --></li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14516">PHPBB3-14516</a>] - [Template] - memberlist_email_before</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14581">PHPBB3-14581</a>] - Add core events relating to soft delete</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14592">PHPBB3-14592</a>] - [PHP] - core.search_backend_search_after</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14596">PHPBB3-14596</a>] - Prevent installs of 3.1 on PHP 7</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14624">PHPBB3-14624</a>] - Add event to ucp_profile in signature section</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14630">PHPBB3-14630</a>] - Add event to ucp_pm_compose</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14638">PHPBB3-14638</a>] - [PHP] - multiple UCP subscription events for form data and template variables</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14643">PHPBB3-14643</a>] - Select newest file in restore list</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14652">PHPBB3-14652</a>] - Typo birthdays</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14664">PHPBB3-14664</a>] - Fix PHPDoc comment in cron manager</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14672">PHPBB3-14672</a>] - Add template event to viewforum</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14685">PHPBB3-14685</a>] - PHP event for altering announcements sql</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14687">PHPBB3-14687</a>] - Modify viewforum_modify_topicrow</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14688">PHPBB3-14688</a>] - Add core events to the feeds</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14689">PHPBB3-14689</a>] - Build 3.2.x API docs</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14695">PHPBB3-14695</a>] - Add posting_editor_subject_prepend/append template events</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14712">PHPBB3-14712</a>] - Add search.php core event to allow modifying the forum select list</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14713">PHPBB3-14713</a>] - Add core event to the admin function get_forum_list()</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14715">PHPBB3-14715</a>] - Add template events in posting_topic_review & mcp_topic</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14720">PHPBB3-14720</a>] - Add global javascript variable 'phpbb' to jshint settings</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14727">PHPBB3-14727</a>] - Event core.search_modify_submit_parameters</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14738">PHPBB3-14738</a>] - Add core events to improve modifying forum lists</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14747">PHPBB3-14747</a>] - Add topic_last_poster_id and topic_last_post_time to Event core.modify_posting_auth</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14762">PHPBB3-14762</a>] - Add core event to session.php to alter IP address</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14781">PHPBB3-14781</a>] - Add core event to the function group_user_attributes()</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14783">PHPBB3-14783</a>] - Event - ACP Posting Buttons Before Custom BBCodes</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14784">PHPBB3-14784</a>] - missing rewrite for lighttpd</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14785">PHPBB3-14785</a>] - [Template event] - overall_header_headerbar_append</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14787">PHPBB3-14787</a>] - Add more parameters to the core.search_modify_url_parameters event</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14789">PHPBB3-14789</a>] - Add missing link hash and form token checks to ACP</li>
|
||||
</ul>
|
||||
<h4>New Feature</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13978">PHPBB3-13978</a>] - [PHP] - User control panel - on signature change</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14484">PHPBB3-14484</a>] - Support extensions in UI tests</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14506">PHPBB3-14506</a>] - [Template] - mcp_move_before</li>
|
||||
</ul>
|
||||
<h4>Task</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12133">PHPBB3-12133</a>] - Update list of browsers supporting filename* in Content-Disposition</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14538">PHPBB3-14538</a>] - Update composer dependencies</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14598">PHPBB3-14598</a>] - Phing Sniffer Testing Use Statements in DocBlocks</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14743">PHPBB3-14743</a>] - Remove PHP7 from test matrix in 3.1.x</li>
|
||||
</ul>
|
||||
|
||||
<a name="v318"></a><h3>Changes since 3.1.8</h3>
|
||||
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-8058">PHPBB3-8058</a>] - Default style in ACP->Board Settings not observing offset</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13028">PHPBB3-13028</a>] - "View unanswered posts" link should be called instead "View unanswered topics"</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13264">PHPBB3-13264</a>] - Editing an unapproved post as a moderator/admin approves it</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13521">PHPBB3-13521</a>] - Q&A Captcha ACP, required fields error corrupts inputted data</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13630">PHPBB3-13630</a>] - NULL value parsed into $select_single can cause 403 Forbidden on certain restrictive hosting environments for "Find a Member" function within Private Message composition</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13681">PHPBB3-13681</a>] - Email queue shouldn't be cached by opcache</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13683">PHPBB3-13683</a>] - Controller generates urls with absolute path of phpbb's root</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13842">PHPBB3-13842</a>] - Missing rewrite module on IIS7 leads to an error</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13977">PHPBB3-13977</a>] - Fatal error entering UCP if bookmarked topic was deleted</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14132">PHPBB3-14132</a>] - SQL Error when creating a new subject on fresh installation</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14136">PHPBB3-14136</a>] - IE compatibility meta is missing in overall_header.html</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14241">PHPBB3-14241</a>] - Security bug into Spambot control Questions</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14272">PHPBB3-14272</a>] - Use valid html5 input elements in forms</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14290">PHPBB3-14290</a>] - Function set_modified_headers() never sends 304 'Not Modified' header</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14408">PHPBB3-14408</a>] - Remove span corners</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14422">PHPBB3-14422</a>] - Support cmd+enter & ctrl+enter for submitting message</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14437">PHPBB3-14437</a>] - Place Inline Images on Post get scrambled up -- not follow the order you place them in.</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14443">PHPBB3-14443</a>] - jabber notification-template prefix "short" breaks resolution of paths in extensions</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14475">PHPBB3-14475</a>] - Do not log upon automatically removing users form newly registered users group</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14481">PHPBB3-14481</a>] - phpBB does not obey HTTP_X_FORWARDED_PORT header</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14483">PHPBB3-14483</a>] - call to header(arg, arg) function sendHeaders() in Response.php causes Error 500 in app.php generated links</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14496">PHPBB3-14496</a>] - Automatic update relies on cache creating files in cache folder</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14500">PHPBB3-14500</a>] - Duplicate newversion in build.xml</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14514">PHPBB3-14514</a>] - Users get skipped in passwords_convert_p1 migration</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14519">PHPBB3-14519</a>] - Do not query database for unread notifications if all are retrieved</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14532">PHPBB3-14532</a>] - Database column default incorrectly escaped on MSSQL</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14533">PHPBB3-14533</a>] - "U_NOTIFICATION_SETTINGS" doesn't return the correct URL</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14536">PHPBB3-14536</a>] - Force timestamp to be integer in user::format_date()</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14559">PHPBB3-14559</a>] - Attachments' behaviour in quotes</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14562">PHPBB3-14562</a>] - Extension's permissions don't have language fallback</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14570">PHPBB3-14570</a>] - Board versions for 3.2.x can be accidentally downgraded to 3.1.x</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14577">PHPBB3-14577</a>] - Stop using sizeof() inside for() loop</li>
|
||||
</ul>
|
||||
<h4>Improvement</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-10356">PHPBB3-10356</a>] - Username search should find all users for administrators instead of NORMALs and FOUNDERs only</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12305">PHPBB3-12305</a>] - Add new event core.viewforum_get_topic_id_sql to control forum topic listing</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14134">PHPBB3-14134</a>] - Send warning notification PM in user's language.</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14316">PHPBB3-14316</a>] - Add memberlist_view.html template events before/after the custom fields and zebra links</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14365">PHPBB3-14365</a>] - Add core event to the function topic_review() </li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14366">PHPBB3-14366</a>] - Add core events to the function decode_message()</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14395">PHPBB3-14395</a>] - Add event core.viewtopic_add_quickmod_option_after</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14471">PHPBB3-14471</a>] - Add filedata var to the core.avatar_driver_upload_move_file_before event</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14486">PHPBB3-14486</a>] - Add an event and fix an event in login_box()</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14508">PHPBB3-14508</a>] - Change language notice on account activation</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14540">PHPBB3-14540</a>] - Adjust class recursive_dot_prefix_filter_iterator to increase performance</li>
|
||||
</ul>
|
||||
<h4>New Feature</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12684">PHPBB3-12684</a>] - Add a command to add a user from the CLI</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14189">PHPBB3-14189</a>] - [PHP] - core.gen_sort_selects_after</li>
|
||||
</ul>
|
||||
<h4>Task</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14538">PHPBB3-14538</a>] - Update composer dependencies</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14565">PHPBB3-14565</a>] - Updates composer to 1.0.0-b2</li>
|
||||
</ul>
|
||||
|
||||
<a name="v317pl1"></a><h3>Changes since 3.1.7-PL1</h3>
|
||||
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12441">PHPBB3-12441</a>] - Database-size in ACP missing after update MariaDB from 5.5 to 10.0</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12618">PHPBB3-12618</a>] - Extension Version Check does not support https</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13180">PHPBB3-13180</a>] - Increase the field size of date format to allow more syntax for other calendars</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13908">PHPBB3-13908</a>] - After clause in migration add_column schema tool not honored</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14046">PHPBB3-14046</a>] - Instant message (jabber) dialog says message sent on the creation screen</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14303">PHPBB3-14303</a>] - Some changes for UTF-8 variant on language pack?</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14374">PHPBB3-14374</a>] - Update dynamically generated jquery CDN script tag</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14386">PHPBB3-14386</a>] - open_basedir restriction in effect with remote upload avatar</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14387">PHPBB3-14387</a>] - Extend avatar-driver by extension in ACP not possible</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14394">PHPBB3-14394</a>] - Only purge cache in functional tests if necessary</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14396">PHPBB3-14396</a>] - Use VCHAR_UNI instead of VCHAR for user_dateformat</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14397">PHPBB3-14397</a>] - Fix @since tag in event 'core.ucp_prefs_view_after'</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14403">PHPBB3-14403</a>] - phpbb\log should still work even when no user data is given</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14407">PHPBB3-14407</a>] - Users not being removed from Newly Registered Users group</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14409">PHPBB3-14409</a>] - Update session page info before displaying online list</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14411">PHPBB3-14411</a>] - Delete permanently is not working as it should be</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14423">PHPBB3-14423</a>] - Display database size for Aria storage engine</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14425">PHPBB3-14425</a>] - Database tests do not allow using socket</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14427">PHPBB3-14427</a>] - Memberlist Display Wrong</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14433">PHPBB3-14433</a>] - Functional tests fail for extensions</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14439">PHPBB3-14439</a>] - Error page shown in Manage users -> Anonymous -> Select Form -> Avatar when board wide all avatar settings are disabled</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14467">PHPBB3-14467</a>] - Automatic resize of textarea calculates wrong height</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14475">PHPBB3-14475</a>] - Do not log removal of users from newly registered group</li>
|
||||
</ul>
|
||||
<h4>Improvement</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14289">PHPBB3-14289</a>] - Add events in navbar header</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14356">PHPBB3-14356</a>] - Add template events to viewtopic around back2top link</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14412">PHPBB3-14412</a>] - Comment fixes for PHPDoc in the events</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14458">PHPBB3-14458</a>] - Explicitly state RewriteBase into .htaccess root file</li>
|
||||
</ul>
|
||||
|
||||
<a name="v317"></a><h3>Changes since 3.1.7</h3>
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* phpBB © Copyright phpBB Limited 2003-2014
|
||||
* phpBB © Copyright phpBB Limited 2003-2016
|
||||
* http://www.phpbb.com
|
||||
*
|
||||
* phpBB is free software. You can redistribute it and/or modify it
|
||||
@@ -20,14 +20,13 @@
|
||||
|
||||
phpBB Project Manager: Marshalrusty (Yuriy Rusko)
|
||||
|
||||
phpBB Lead Developer: naderman (Nils Adermann)
|
||||
phpBB Product Manager: naderman (Nils Adermann)
|
||||
|
||||
phpBB Lead Developer: Marc (Marc Alexander)
|
||||
|
||||
phpBB Developers: bantu (Andreas Fischer)
|
||||
CHItA (Máté Bartus)
|
||||
dhruv.goel92 (Dhruv Goel)
|
||||
Elsensee (Oliver Schramm)
|
||||
marc1706 (Marc Alexander)
|
||||
nickvergessen (Joas Schilling)
|
||||
Nicofuma (Tristan Darricau)
|
||||
prototech (Cesar Gallegos)
|
||||
|
||||
@@ -54,11 +53,13 @@ phpBB Developers: A_Jelly_Doughnut (Josh Woody) [01/2010 - 11/2010]
|
||||
ckwalsh (Cullen Walsh) [01/2010 - 07/2011]
|
||||
DavidMJ (David M.) [12/2005 - 08/2009]
|
||||
dhn (Dominik Dröscher) [05/2007 - 01/2011]
|
||||
dhruv.goel92 (Dhruv Goel) [04/2013 - 05/2016]
|
||||
EXreaction (Nathan Guse) [07/2012 - 05/2014]
|
||||
GrahamJE (Graham Eames) [09/2005 - 11/2006]
|
||||
igorw (Igor Wiedler) [08/2010 - 02/2013]
|
||||
imkingdavid (David King) [11/2012 - 06/2014]
|
||||
kellanved (Henry Sudhof) [04/2007 - 03/2011]
|
||||
nickvergessen (Joas Schilling)[04/2010 - 12/2015]
|
||||
Oleg (Oleg Pudeyev) [01/2011 - 05/2013]
|
||||
rxu (Ruslan Uzdenov) [04/2010 - 12/2012]
|
||||
TerraFrost (Jim Wigginton) [04/2009 - 01/2011]
|
||||
|
@@ -2,6 +2,7 @@
|
||||
<html dir="ltr" lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="keywords" content="" />
|
||||
<meta name="description" content="phpBB 3.1.x frequently asked questions" />
|
||||
<title>phpBB • FAQ</title>
|
||||
|
@@ -2,6 +2,7 @@
|
||||
<html dir="ltr" lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="keywords" content="" />
|
||||
<meta name="description" content="phpBB 3.1.x Installation, updating and conversion informations" />
|
||||
<title>phpBB • Install</title>
|
||||
@@ -159,7 +160,7 @@
|
||||
<li>zlib Compression support</li>
|
||||
<li>Remote FTP support</li>
|
||||
<li>XML support</li>
|
||||
<li>Imagemagick support</li>
|
||||
<li>ImageMagick support</li>
|
||||
<li>GD Support</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
@@ -2,6 +2,7 @@
|
||||
<html dir="ltr" lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="keywords" content="" />
|
||||
<meta name="description" content="phpBB 3.1.x Readme" />
|
||||
<title>phpBB • Readme</title>
|
||||
|
@@ -2,6 +2,7 @@
|
||||
<html dir="ltr" lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="keywords" content="" />
|
||||
<meta name="description" content="This is an explanation of how to use the phpBB auth/acl API" />
|
||||
<title>phpBB3 • Auth API</title>
|
||||
|
@@ -2,6 +2,7 @@
|
||||
<html dir="ltr" lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="keywords" content="" />
|
||||
<meta name="description" content="Ascraeus coding guidelines document" />
|
||||
<title>phpBB3 • Coding Guidelines</title>
|
||||
@@ -1121,9 +1122,6 @@ append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;
|
||||
<p>Some of these functions are only chosen over others because of personal preference and have no benefit other than maintaining consistency throughout the code.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Use <code>sizeof</code> instead of <code>count</code></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Use <code>strpos</code> instead of <code>strstr</code></p>
|
||||
</li>
|
||||
|
@@ -58,6 +58,42 @@ acp_email_options_after
|
||||
* Since: 3.1.2-RC1
|
||||
* Purpose: Add settings to mass email form
|
||||
|
||||
acp_ext_details_end
|
||||
===
|
||||
* Location: adm/style/acp_ext_details.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add more detailed information on extension after the available information.
|
||||
|
||||
acp_ext_details_notice
|
||||
===
|
||||
* Location: adm/style/acp_ext_details.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add extension detail notices after version check information.
|
||||
|
||||
acp_ext_list_disabled_name_after
|
||||
===
|
||||
* Location: adm/style/acp_ext_list.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add content after the name of disabled extensions in the list
|
||||
|
||||
acp_ext_list_disabled_title_after
|
||||
===
|
||||
* Location: adm/style/acp_ext_list.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add text after disabled extensions section title.
|
||||
|
||||
acp_ext_list_enabled_name_after
|
||||
===
|
||||
* Location: adm/style/acp_ext_list.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add content after the name of enabled extensions in the list
|
||||
|
||||
acp_ext_list_enabled_title_after
|
||||
===
|
||||
* Location: adm/style/acp_ext_list.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add text after enabled extensions section title.
|
||||
|
||||
acp_forums_custom_settings
|
||||
===
|
||||
* Location: adm/style/acp_forums.html
|
||||
@@ -343,6 +379,13 @@ acp_posting_buttons_before
|
||||
* Since: 3.1.0-b4
|
||||
* Purpose: Add content before BBCode posting buttons in the ACP
|
||||
|
||||
acp_posting_buttons_custom_tags_before
|
||||
===
|
||||
* Locations:
|
||||
+ adm/style/acp_posting_buttons.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content before the custom BBCodes in the ACP
|
||||
|
||||
acp_profile_contact_before
|
||||
===
|
||||
* Locations:
|
||||
@@ -350,6 +393,20 @@ acp_profile_contact_before
|
||||
* Since: 3.1.6-RC1
|
||||
* Purpose: Add extra options to custom profile field configuration in the ACP
|
||||
|
||||
acp_profile_contact_last
|
||||
===
|
||||
* Locations:
|
||||
+ adm/style/acp_profile.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add contact specific options to custom profile fields in the ACP
|
||||
|
||||
acp_profile_step_one_lang_after
|
||||
===
|
||||
* Locations:
|
||||
+ adm/style/acp_profile.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add extra lang specific options to custom profile field step one configuration in the ACP
|
||||
|
||||
acp_prune_forums_append
|
||||
===
|
||||
* Locations:
|
||||
@@ -643,6 +700,22 @@ forumlist_body_last_post_title_prepend
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add content before the post title of the latest post in a forum on the forum list.
|
||||
|
||||
forumlist_body_subforum_link_append
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/forumlist_body.html
|
||||
+ styles/subsilver2/template/forumlist_body.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add content at the end of subforum link item.
|
||||
|
||||
forumlist_body_subforum_link_prepend
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/forumlist_body.html
|
||||
+ styles/subsilver2/template/forumlist_body.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add content at the start of subforum link item.
|
||||
|
||||
forumlist_body_subforums_after
|
||||
===
|
||||
* Locations:
|
||||
@@ -667,6 +740,14 @@ forumlist_body_last_row_after
|
||||
* Since: 3.1.0-b2
|
||||
* Purpose: Add content after the very last row of the forum list.
|
||||
|
||||
index_body_birthday_block_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/index_body.html
|
||||
+ styles/subsilver2/template/index_body.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add new statistic blocks before the Birthday block
|
||||
|
||||
index_body_block_birthday_append
|
||||
===
|
||||
* Locations:
|
||||
@@ -787,6 +868,30 @@ mcp_ban_unban_before
|
||||
* Since: 3.1.0-RC3
|
||||
* Purpose: Add additional fields to the unban form in MCP
|
||||
|
||||
mcp_forum_actions_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/mcp_forum.html
|
||||
+ styles/subsilver2/template/mcp_forum.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add some information after actions fieldset
|
||||
|
||||
mcp_forum_actions_append
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/mcp_forum.html
|
||||
+ styles/subsilver2/template/mcp_forum.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add additional options to actions select
|
||||
|
||||
mcp_forum_actions_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/mcp_forum.html
|
||||
+ styles/subsilver2/template/mcp_forum.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add some information before actions fieldset
|
||||
|
||||
mcp_forum_topic_title_before
|
||||
===
|
||||
* Locations:
|
||||
@@ -843,6 +948,14 @@ mcp_front_latest_unapproved_before
|
||||
* Since: 3.1.3-RC1
|
||||
* Purpose: Add content before latest unapproved posts list
|
||||
|
||||
mcp_move_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/mcp_move.html
|
||||
+ styles/subsilver2/template/mcp_move.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content before move topic/post form
|
||||
|
||||
mcp_post_additional_options
|
||||
===
|
||||
* Locations:
|
||||
@@ -867,6 +980,36 @@ mcp_topic_options_before
|
||||
* Since: 3.1.6-RC1
|
||||
* Purpose: Add some options (field, checkbox, ...) before the subject field when split a subject
|
||||
|
||||
mcp_topic_postrow_post_details_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/mcp_topic.html
|
||||
+ styles/subsilver2/template/mcp_topic.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content after post details in topic moderation
|
||||
|
||||
mcp_topic_postrow_post_details_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/mcp_topic.html
|
||||
+ styles/subsilver2/template/mcp_topic.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content before post details in topic moderation
|
||||
|
||||
mcp_topic_postrow_post_subject_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/mcp_topic.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add content after post subject in topic moderation
|
||||
|
||||
mcp_topic_postrow_post_subject_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/mcp_topic.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add content before post subject in topic moderation
|
||||
|
||||
mcp_topic_topic_title_after
|
||||
===
|
||||
* Locations:
|
||||
@@ -951,6 +1094,14 @@ memberlist_body_username_prepend
|
||||
* Purpose: Add information before every username in the memberlist. Works in
|
||||
all display modes (leader, group and normal memberlist).
|
||||
|
||||
memberlist_email_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/memberlist_email.html
|
||||
+ styles/subsilver2/template/memberlist_email.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Allow adding customizations before the memberlist_email form.
|
||||
|
||||
memberlist_search_fields_after
|
||||
===
|
||||
* Locations:
|
||||
@@ -975,6 +1126,22 @@ memberlist_search_sorting_options_before
|
||||
* Since: 3.1.2-RC1
|
||||
* Purpose: Add information before the search sorting options field.
|
||||
|
||||
memberlist_team_username_append
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/memberlist_team.html
|
||||
+ styles/subsilver2/template/memberlist_team.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Append information to username of team member
|
||||
|
||||
memberlist_team_username_prepend
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/memberlist_team.html
|
||||
+ styles/subsilver2/template/memberlist_team.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add information before team user username
|
||||
|
||||
memberlist_view_contact_after
|
||||
===
|
||||
* Locations:
|
||||
@@ -991,6 +1158,22 @@ memberlist_view_contact_before
|
||||
* Since: 3.1.0-b2
|
||||
* Purpose: Add content before the user contact part of any user profile
|
||||
|
||||
memberlist_view_contact_custom_fields_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/memberlist_view.html
|
||||
+ styles/subsilver2/template/memberlist_view.html
|
||||
* Since: 3.1.9-RC1
|
||||
* Purpose: Add content after the user contact related custom fields
|
||||
|
||||
memberlist_view_contact_custom_fields_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/memberlist_view.html
|
||||
+ styles/subsilver2/template/memberlist_view.html
|
||||
* Since: 3.1.9-RC1
|
||||
* Purpose: Add content before the user contact related custom fields
|
||||
|
||||
memberlist_view_content_append
|
||||
===
|
||||
* Locations:
|
||||
@@ -1007,6 +1190,22 @@ memberlist_view_content_prepend
|
||||
* Since: 3.1.0-b3
|
||||
* Purpose: Add custom content to the user profile view before the main content
|
||||
|
||||
memberlist_view_non_contact_custom_fields_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/memberlist_view.html
|
||||
+ styles/subsilver2/template/memberlist_view.html
|
||||
* Since: 3.1.9-RC1
|
||||
* Purpose: Add content after the user not contact related custom fields
|
||||
|
||||
memberlist_view_non_contact_custom_fields_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/memberlist_view.html
|
||||
+ styles/subsilver2/template/memberlist_view.html
|
||||
* Since: 3.1.9-RC1
|
||||
* Purpose: Add content before the user not contact related custom fields
|
||||
|
||||
memberlist_view_rank_after
|
||||
===
|
||||
* Locations:
|
||||
@@ -1065,6 +1264,22 @@ memberlist_view_user_statistics_before
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add entries before the user statistics part of any user profile
|
||||
|
||||
memberlist_view_zebra_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/memberlist_view.html
|
||||
+ styles/subsilver2/template/memberlist_view.html
|
||||
* Since: 3.1.9-RC1
|
||||
* Purpose: Add content after the user friends/foes links
|
||||
|
||||
memberlist_view_zebra_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/memberlist_view.html
|
||||
+ styles/subsilver2/template/memberlist_view.html
|
||||
* Since: 3.1.9-RC1
|
||||
* Purpose: Add content before the user friends/foes links
|
||||
|
||||
navbar_header_logged_out_content
|
||||
===
|
||||
* Locations:
|
||||
@@ -1100,6 +1315,20 @@ navbar_header_quick_links_before
|
||||
* Since: 3.1.0-RC2
|
||||
* Purpose: Add links to the top of the quick-links drop-down menu in the header
|
||||
|
||||
navbar_header_user_profile_append
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/navbar_header.html
|
||||
* Since: 3.1.8-RC1
|
||||
* Purpose: Add links to the right of the user drop down area
|
||||
|
||||
navbar_header_user_profile_prepend
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/navbar_header.html
|
||||
* Since: 3.1.8-RC1
|
||||
* Purpose: Add links to the left of the notification area
|
||||
|
||||
navbar_header_username_append
|
||||
===
|
||||
* Locations:
|
||||
@@ -1274,6 +1503,20 @@ overall_header_head_append
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add asset calls directly before the `</head>` tag
|
||||
|
||||
overall_header_headerbar_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/overall_header.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content at the end of the headerbar
|
||||
|
||||
overall_header_headerbar_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/overall_header.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content at the beginning of the headerbar
|
||||
|
||||
overall_header_navbar_before
|
||||
===
|
||||
* Locations:
|
||||
@@ -1322,6 +1565,13 @@ overall_header_page_body_before
|
||||
* Since: 3.1.0-b3
|
||||
* Purpose: Add content after the page-header, but before the page-body
|
||||
|
||||
overall_header_searchbox_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/overall_header.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add content after the search box in the header
|
||||
|
||||
overall_header_searchbox_before
|
||||
===
|
||||
* Locations:
|
||||
@@ -1425,6 +1675,14 @@ posting_editor_subject_after
|
||||
* Since: 3.1.0-a2
|
||||
* Purpose: Add field (e.g. textbox) to the posting screen after the subject
|
||||
|
||||
posting_editor_subject_append
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/posting_editor.html
|
||||
+ styles/subsilver2/template/posting_body.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add field, text, etc. to the posting after the subject text box
|
||||
|
||||
posting_editor_subject_before
|
||||
===
|
||||
* Locations:
|
||||
@@ -1433,6 +1691,14 @@ posting_editor_subject_before
|
||||
* Since: 3.1.0-a2
|
||||
* Purpose: Add field (e.g. textbox) to the posting screen before the subject
|
||||
|
||||
posting_editor_subject_prepend
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/posting_editor.html
|
||||
+ styles/subsilver2/template/posting_body.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add field, text, etc. to the posting before the subject text box
|
||||
|
||||
posting_editor_submit_buttons
|
||||
===
|
||||
* Locations:
|
||||
@@ -1494,6 +1760,22 @@ posting_preview_poll_after
|
||||
* Since: 3.1.7-RC1
|
||||
* Purpose: Add content after the poll preview block
|
||||
|
||||
posting_topic_review_row_post_details_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/posting_topic_review.html
|
||||
+ styles/subsilver2/template/posting_topic_review.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content after post details in topic review
|
||||
|
||||
posting_topic_review_row_post_details_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/posting_topic_review.html
|
||||
+ styles/subsilver2/template/posting_topic_review.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content before post details in topic review
|
||||
|
||||
posting_topic_title_after
|
||||
===
|
||||
* Locations:
|
||||
@@ -1732,6 +2014,13 @@ search_results_topic_before
|
||||
* Since: 3.1.0-b4
|
||||
* Purpose: Add data before search result topics
|
||||
|
||||
search_results_topic_title_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/search_results.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add data after search results topic title
|
||||
|
||||
simple_footer_after
|
||||
===
|
||||
* Locations:
|
||||
@@ -1791,6 +2080,18 @@ topiclist_row_append
|
||||
* Changed: 3.1.6-RC1 Added event to mcp_forum.html
|
||||
* Purpose: Add content into topic rows (inside the elements containing topic titles)
|
||||
|
||||
topiclist_row_topic_title_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/search_results.html
|
||||
+ styles/prosilver/template/viewforum_body.html
|
||||
+ styles/prosilver/template/mcp_forum.html
|
||||
+ styles/subsilver2/template/search_results.html
|
||||
+ styles/subsilver2/template/viewforum_body.html
|
||||
+ styles/subsilver2/template/mcp_forum.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content into topic rows (after the elements containing the topic titles)
|
||||
|
||||
ucp_agreement_terms_after
|
||||
===
|
||||
* Locations:
|
||||
@@ -1815,6 +2116,14 @@ ucp_main_front_user_activity_after
|
||||
* Since: 3.1.6-RC1
|
||||
* Purpose: Add content right after the user activity info viewing UCP front page
|
||||
|
||||
ucp_main_front_user_activity_append
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/ucp_main_front.html
|
||||
+ styles/subsilver2/template/ucp_main_front.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add content after last user activity info viewing UCP front page
|
||||
|
||||
ucp_main_front_user_activity_before
|
||||
===
|
||||
* Locations:
|
||||
@@ -1823,6 +2132,14 @@ ucp_main_front_user_activity_before
|
||||
* Since: 3.1.6-RC1
|
||||
* Purpose: Add content right before the user activity info viewing UCP front page
|
||||
|
||||
ucp_main_front_user_activity_prepend
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/ucp_main_front.html
|
||||
+ styles/subsilver2/template/ucp_main_front.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add content before first user activity info viewing UCP front page
|
||||
|
||||
ucp_pm_history_post_buttons_after
|
||||
===
|
||||
* Locations:
|
||||
@@ -1919,6 +2236,13 @@ ucp_pm_viewmessage_custom_fields_before
|
||||
* Purpose: Add data before the custom fields on the user profile when viewing
|
||||
a private message
|
||||
|
||||
ucp_pm_viewmessage_options_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/ucp_pm_viewmessage.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add content right before display options
|
||||
|
||||
ucp_pm_viewmessage_post_buttons_after
|
||||
===
|
||||
* Locations:
|
||||
@@ -2077,6 +2401,14 @@ ucp_profile_register_details_after
|
||||
* Since: 3.1.4-RC1
|
||||
* Purpose: Add options in profile page fieldset - after confirm password field.
|
||||
|
||||
ucp_register_buttons_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/ucp_register.html
|
||||
+ styles/subsilver2/template/ucp_register.html
|
||||
* Since: 3.1.11-RC1
|
||||
* Purpose: Add content before buttons in registration form.
|
||||
|
||||
ucp_register_credentials_before
|
||||
===
|
||||
* Locations:
|
||||
@@ -2165,6 +2497,14 @@ viewforum_body_topic_row_prepend
|
||||
* Since: 3.1.7-RC1
|
||||
* Purpose: Add content at the end of the topic list item.
|
||||
|
||||
viewforum_body_topicrow_row_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/viewforum_body.html
|
||||
+ styles/subsilver2/template/viewforum_body.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content before list of topics.
|
||||
|
||||
viewforum_buttons_bottom_before
|
||||
===
|
||||
* Locations:
|
||||
@@ -2441,6 +2781,38 @@ viewtopic_body_post_subject_before
|
||||
* Since: 3.1.7-RC1
|
||||
* Purpose: Add data before post icon and subject
|
||||
|
||||
viewtopic_body_postrow_back2top_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/viewtopic_body.html
|
||||
+ styles/subsilver2/template/viewtopic_body.html
|
||||
* Since: 3.1.8-RC1
|
||||
* Purpose: Add content to the post's bottom after the back to top link
|
||||
|
||||
viewtopic_body_postrow_back2top_append
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/viewtopic_body.html
|
||||
+ styles/subsilver2/template/viewtopic_body.html
|
||||
* Since: 3.1.8-RC1
|
||||
* Purpose: Add content to the post's bottom directly after the back to top link
|
||||
|
||||
viewtopic_body_postrow_back2top_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/viewtopic_body.html
|
||||
+ styles/subsilver2/template/viewtopic_body.html
|
||||
* Since: 3.1.8-RC1
|
||||
* Purpose: Add content to the post's bottom before the back to top link
|
||||
|
||||
viewtopic_body_postrow_back2top_prepend
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/viewtopic_body.html
|
||||
+ styles/subsilver2/template/viewtopic_body.html
|
||||
* Since: 3.1.8-RC1
|
||||
* Purpose: Add content to the post's bottom directly before the back to top link
|
||||
|
||||
viewtopic_body_postrow_custom_fields_after
|
||||
===
|
||||
* Locations:
|
||||
|
@@ -1,7 +1,7 @@
|
||||
# Sample lighttpd configuration file for phpBB.
|
||||
# Global settings have been removed, copy them
|
||||
# from your system's lighttpd.conf.
|
||||
# Tested with lighttpd 1.4.26
|
||||
# Tested with lighttpd 1.4.35
|
||||
|
||||
# If you want to use the X-Sendfile feature,
|
||||
# uncomment the 'allow-x-send-file' for the fastcgi
|
||||
@@ -16,6 +16,7 @@
|
||||
server.modules += (
|
||||
"mod_access",
|
||||
"mod_fastcgi",
|
||||
"mod_rewrite",
|
||||
"mod_accesslog"
|
||||
)
|
||||
|
||||
@@ -49,7 +50,15 @@ $HTTP["host"] == "www.myforums.com" {
|
||||
$HTTP["url"] =~ "/\.htaccess|/\.htpasswd|/\.htgroups" {
|
||||
url.access-deny = ( "" )
|
||||
}
|
||||
|
||||
|
||||
# The following 3 lines will rewrite URLs passed through the front controller
|
||||
# to not require app.php in the actual URL. In other words, a controller is
|
||||
# by default accessed at /app.php/my/controller, but can also be accessed at
|
||||
# /my/controller
|
||||
url.rewrite-if-not-file = (
|
||||
"^/(.*)$" => "/app.php/$1"
|
||||
)
|
||||
|
||||
fastcgi.server = ( ".php" =>
|
||||
((
|
||||
"bin-path" => "/usr/bin/php-cgi",
|
||||
|
@@ -262,7 +262,7 @@ else
|
||||
* @var string mode Download mode
|
||||
* @var bool thumbnail Flag indicating if the file is a thumbnail
|
||||
* @since 3.1.6-RC1
|
||||
* @change 3.1.7-RC1 Fixing wrong name of a variable (replacing "extension" by "extensions")
|
||||
* @changed 3.1.7-RC1 Fixing wrong name of a variable (replacing "extension" by "extensions")
|
||||
*/
|
||||
$vars = array(
|
||||
'attach_id',
|
||||
|
@@ -25,6 +25,7 @@ $auth->acl($user->data);
|
||||
$user->setup();
|
||||
|
||||
$mode = request_var('mode', '');
|
||||
$template_file = 'faq_body.html';
|
||||
|
||||
// Load the appropriate faq file
|
||||
switch ($mode)
|
||||
@@ -47,13 +48,16 @@ switch ($mode)
|
||||
* @var string lang_file Language file containing the help data
|
||||
* @var string ext_name Vendor and extension name where the help
|
||||
* language file can be loaded from
|
||||
* @var string template_file Template file name
|
||||
* @since 3.1.4-RC1
|
||||
* @changed 3.1.11-RC1 Added template_file var
|
||||
*/
|
||||
$vars = array(
|
||||
'page_title',
|
||||
'mode',
|
||||
'lang_file',
|
||||
'ext_name',
|
||||
'template_file',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.faq_mode_validation', compact($vars)));
|
||||
|
||||
@@ -106,7 +110,7 @@ $template->assign_vars(array(
|
||||
page_header($l_title);
|
||||
|
||||
$template->set_filenames(array(
|
||||
'body' => 'faq_body.html')
|
||||
'body' => $template_file)
|
||||
);
|
||||
make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
|
||||
|
||||
|
@@ -84,6 +84,20 @@ $feed->open();
|
||||
// Iterate through items
|
||||
while ($row = $feed->get_item())
|
||||
{
|
||||
/**
|
||||
* Event to modify the feed row
|
||||
*
|
||||
* @event core.feed_modify_feed_row
|
||||
* @var int forum_id Forum ID
|
||||
* @var string mode Feeds mode (forums|topics|topics_new|topics_active|news)
|
||||
* @var array row Array with feed data
|
||||
* @var int topic_id Topic ID
|
||||
*
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array('forum_id', 'mode', 'row', 'topic_id');
|
||||
extract($phpbb_dispatcher->trigger_event('core.feed_modify_feed_row', compact($vars)));
|
||||
|
||||
// BBCode options to correctly disable urls, smilies, bbcode...
|
||||
if ($feed->get('options') === NULL)
|
||||
{
|
||||
|
@@ -42,7 +42,7 @@ class acp_attachments
|
||||
|
||||
function main($id, $mode)
|
||||
{
|
||||
global $db, $user, $auth, $template, $cache, $phpbb_container;
|
||||
global $db, $user, $auth, $template, $cache, $phpbb_container, $phpbb_dispatcher;
|
||||
global $config, $phpbb_admin_path, $phpbb_root_path, $phpEx;
|
||||
|
||||
$this->id = $id;
|
||||
@@ -162,6 +162,18 @@ class acp_attachments
|
||||
)
|
||||
);
|
||||
|
||||
/**
|
||||
* Event to add and/or modify acp_attachement configurations
|
||||
*
|
||||
* @event core.acp_attachments_config_edit_add
|
||||
* @var array display_vars Array of config values to display and process
|
||||
* @var string mode Mode of the config page we are displaying
|
||||
* @var boolean submit Do we display the form or process the submission
|
||||
* @since 3.1.11-RC1
|
||||
*/
|
||||
$vars = array('display_vars', 'mode', 'submit');
|
||||
extract($phpbb_dispatcher->trigger_event('core.acp_attachments_config_edit_add', compact($vars)));
|
||||
|
||||
$this->new_config = $config;
|
||||
$cfg_array = (isset($_REQUEST['config'])) ? request_var('config', array('' => '')) : $this->new_config;
|
||||
$error = array();
|
||||
@@ -1426,7 +1438,7 @@ class acp_attachments
|
||||
$row['group_name'] = $user->lang['NOT_ASSIGNED'];
|
||||
$group_name[] = $row;
|
||||
|
||||
for ($i = 0; $i < sizeof($group_name); $i++)
|
||||
for ($i = 0, $groups_size = sizeof($group_name); $i < $groups_size; $i++)
|
||||
{
|
||||
if ($default_group === false)
|
||||
{
|
||||
@@ -1735,8 +1747,8 @@ class acp_attachments
|
||||
$size_var = $filesize['si_identifier'];
|
||||
$value = $filesize['value'];
|
||||
|
||||
// size="8" and maxlength="15" attributes as a fallback for browsers that do not support type="number" yet.
|
||||
return '<input type="number" id="' . $key . '" size="8" maxlength="15" min="0" name="config[' . $key . ']" value="' . $value . '" /> <select name="' . $key . '">' . size_select_options($size_var) . '</select>';
|
||||
// size and maxlength must not be specified for input of type number
|
||||
return '<input type="number" id="' . $key . '" min="0" max="999999999999999" step="any" name="config[' . $key . ']" value="' . $value . '" /> <select name="' . $key . '">' . size_select_options($size_var) . '</select>';
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -370,7 +370,7 @@ class acp_bbcodes
|
||||
*
|
||||
* @event core.acp_bbcodes_display_form
|
||||
* @var string action Type of the action: modify|create
|
||||
* @var string sql_ary The SQL array to get custom bbcode data
|
||||
* @var array sql_ary The SQL array to get custom bbcode data
|
||||
* @var array template_data Array with form template data
|
||||
* @var string u_action The u_action link
|
||||
* @since 3.1.0-a3
|
||||
|
@@ -26,7 +26,7 @@ if (!defined('IN_PHPBB'))
|
||||
class acp_board
|
||||
{
|
||||
var $u_action;
|
||||
var $new_config = array();
|
||||
var $new_config;
|
||||
|
||||
function main($id, $mode)
|
||||
{
|
||||
@@ -318,9 +318,9 @@ class acp_board
|
||||
'title' => 'ACP_COOKIE_SETTINGS',
|
||||
'vars' => array(
|
||||
'legend1' => 'ACP_COOKIE_SETTINGS',
|
||||
'cookie_domain' => array('lang' => 'COOKIE_DOMAIN', 'validate' => 'string', 'type' => 'text::255', 'explain' => false),
|
||||
'cookie_name' => array('lang' => 'COOKIE_NAME', 'validate' => 'string', 'type' => 'text::16', 'explain' => false),
|
||||
'cookie_path' => array('lang' => 'COOKIE_PATH', 'validate' => 'string', 'type' => 'text::255', 'explain' => false),
|
||||
'cookie_domain' => array('lang' => 'COOKIE_DOMAIN', 'validate' => 'string', 'type' => 'text::255', 'explain' => true),
|
||||
'cookie_name' => array('lang' => 'COOKIE_NAME', 'validate' => 'string', 'type' => 'text::16', 'explain' => true),
|
||||
'cookie_path' => array('lang' => 'COOKIE_PATH', 'validate' => 'string', 'type' => 'text::255', 'explain' => true),
|
||||
'cookie_secure' => array('lang' => 'COOKIE_SECURE', 'validate' => 'bool', 'type' => 'radio:disabled_enabled', 'explain' => true),
|
||||
)
|
||||
);
|
||||
@@ -449,11 +449,14 @@ class acp_board
|
||||
|
||||
'legend2' => 'SMTP_SETTINGS',
|
||||
'smtp_delivery' => array('lang' => 'USE_SMTP', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
'smtp_host' => array('lang' => 'SMTP_SERVER', 'validate' => 'string', 'type' => 'text:25:50', 'explain' => false),
|
||||
'smtp_host' => array('lang' => 'SMTP_SERVER', 'validate' => 'string', 'type' => 'text:25:50', 'explain' => true),
|
||||
'smtp_port' => array('lang' => 'SMTP_PORT', 'validate' => 'int:0:99999', 'type' => 'number:0:99999', 'explain' => true),
|
||||
'smtp_auth_method' => array('lang' => 'SMTP_AUTH_METHOD', 'validate' => 'string', 'type' => 'select', 'method' => 'mail_auth_select', 'explain' => true),
|
||||
'smtp_username' => array('lang' => 'SMTP_USERNAME', 'validate' => 'string', 'type' => 'text:25:255', 'explain' => true),
|
||||
'smtp_password' => array('lang' => 'SMTP_PASSWORD', 'validate' => 'string', 'type' => 'password:25:255', 'explain' => true),
|
||||
'smtp_verify_peer' => array('lang' => 'SMTP_VERIFY_PEER', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
'smtp_verify_peer_name' => array('lang' => 'SMTP_VERIFY_PEER_NAME', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
'smtp_allow_self_signed'=> array('lang' => 'SMTP_ALLOW_SELF_SIGNED','validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
|
||||
'legend3' => 'ACP_SUBMIT_CHANGES',
|
||||
)
|
||||
@@ -482,7 +485,7 @@ class acp_board
|
||||
$user->add_lang($display_vars['lang']);
|
||||
}
|
||||
|
||||
$this->new_config = $config;
|
||||
$this->new_config = clone $config;
|
||||
$cfg_array = (isset($_REQUEST['config'])) ? utf8_normalize_nfc(request_var('config', array('' => ''), true)) : $this->new_config;
|
||||
$error = array();
|
||||
|
||||
@@ -842,7 +845,7 @@ class acp_board
|
||||
{
|
||||
global $user;
|
||||
|
||||
return '<input id="' . $key . '" type="number" size="3" maxlength="3" min="1" max="999" name="config[min_name_chars]" value="' . $value . '" /> ' . $user->lang['MIN_CHARS'] . ' <input type="number" size="3" maxlength="3" min="8" max="180" name="config[max_name_chars]" value="' . $this->new_config['max_name_chars'] . '" /> ' . $user->lang['MAX_CHARS'];
|
||||
return '<input id="' . $key . '" type="number" min="1" max="999" name="config[min_name_chars]" value="' . $value . '" /> ' . $user->lang['MIN_CHARS'] . ' <input type="number" min="8" max="180" name="config[max_name_chars]" value="' . $this->new_config['max_name_chars'] . '" /> ' . $user->lang['MAX_CHARS'];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -870,7 +873,7 @@ class acp_board
|
||||
{
|
||||
global $user;
|
||||
|
||||
return '<input id="' . $key . '" type="number" size="3" maxlength="3" min="1" max="999" name="config[min_pass_chars]" value="' . $value . '" /> ' . $user->lang['MIN_CHARS'] . ' <input type="number" size="3" maxlength="3" min="8" max="255" name="config[max_pass_chars]" value="' . $this->new_config['max_pass_chars'] . '" /> ' . $user->lang['MAX_CHARS'];
|
||||
return '<input id="' . $key . '" type="number" min="1" max="999" name="config[min_pass_chars]" value="' . $value . '" /> ' . $user->lang['MIN_CHARS'] . ' <input type="number" min="8" max="255" name="config[max_pass_chars]" value="' . $this->new_config['max_pass_chars'] . '" /> ' . $user->lang['MAX_CHARS'];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1017,7 +1020,7 @@ class acp_board
|
||||
$user->timezone = $old_tz;
|
||||
|
||||
return "<select name=\"dateoptions\" id=\"dateoptions\" onchange=\"if (this.value == 'custom') { document.getElementById('" . addslashes($key) . "').value = '" . addslashes($value) . "'; } else { document.getElementById('" . addslashes($key) . "').value = this.value; }\">$dateformat_options</select>
|
||||
<input type=\"text\" name=\"config[$key]\" id=\"$key\" value=\"$value\" maxlength=\"30\" />";
|
||||
<input type=\"text\" name=\"config[$key]\" id=\"$key\" value=\"$value\" maxlength=\"64\" />";
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -39,6 +39,9 @@ class acp_database
|
||||
$action = request_var('action', '');
|
||||
$submit = (isset($_POST['submit'])) ? true : false;
|
||||
|
||||
$form_key = 'acp_database';
|
||||
add_form_key($form_key);
|
||||
|
||||
$template->assign_vars(array(
|
||||
'MODE' => $mode
|
||||
));
|
||||
@@ -62,6 +65,11 @@ class acp_database
|
||||
trigger_error($user->lang['TABLE_SELECT_ERROR'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if (!check_form_key($form_key))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$store = $download = $structure = $schema_data = false;
|
||||
|
||||
if ($where == 'store_and_download' || $where == 'store')
|
||||
|
@@ -22,55 +22,81 @@ if (!defined('IN_PHPBB'))
|
||||
class acp_extensions
|
||||
{
|
||||
var $u_action;
|
||||
var $tpl_name;
|
||||
var $page_title;
|
||||
|
||||
private $db;
|
||||
private $config;
|
||||
private $template;
|
||||
private $user;
|
||||
private $cache;
|
||||
private $log;
|
||||
private $request;
|
||||
private $phpbb_dispatcher;
|
||||
private $ext_manager;
|
||||
|
||||
function main()
|
||||
{
|
||||
// Start the page
|
||||
global $config, $user, $template, $request, $phpbb_extension_manager, $db, $phpbb_root_path, $phpEx, $phpbb_log, $cache;
|
||||
global $config, $user, $template, $request, $phpbb_extension_manager, $phpbb_root_path, $phpEx, $phpbb_log, $cache, $phpbb_dispatcher;
|
||||
|
||||
$this->db = $db;
|
||||
$this->config = $config;
|
||||
$this->template = $template;
|
||||
$this->user = $user;
|
||||
$this->cache = $cache;
|
||||
$this->request = $request;
|
||||
$this->log = $phpbb_log;
|
||||
$this->phpbb_dispatcher = $phpbb_dispatcher;
|
||||
$this->ext_manager = $phpbb_extension_manager;
|
||||
|
||||
$user->add_lang(array('install', 'acp/extensions', 'migrator'));
|
||||
$this->user->add_lang(array('install', 'acp/extensions', 'migrator'));
|
||||
|
||||
$this->page_title = 'ACP_EXTENSIONS';
|
||||
|
||||
$action = $request->variable('action', 'list');
|
||||
$ext_name = $request->variable('ext_name', '');
|
||||
$action = $this->request->variable('action', 'list');
|
||||
$ext_name = $this->request->variable('ext_name', '');
|
||||
|
||||
// What is a safe limit of execution time? Half the max execution time should be safe.
|
||||
$safe_time_limit = (ini_get('max_execution_time') / 2);
|
||||
$start_time = time();
|
||||
|
||||
// Cancel action
|
||||
if ($request->is_set_post('cancel'))
|
||||
if ($this->request->is_set_post('cancel'))
|
||||
{
|
||||
$action = 'list';
|
||||
$ext_name = '';
|
||||
}
|
||||
|
||||
if (in_array($action, array('enable', 'disable', 'delete_data')) && !check_link_hash($request->variable('hash', ''), $action . '.' . $ext_name))
|
||||
if (in_array($action, array('enable', 'disable', 'delete_data')) && !check_link_hash($this->request->variable('hash', ''), $action . '.' . $ext_name))
|
||||
{
|
||||
trigger_error('FORM_INVALID', E_USER_WARNING);
|
||||
}
|
||||
|
||||
/**
|
||||
* Event to run a specific action on extension
|
||||
*
|
||||
* @event core.acp_extensions_run_action_before
|
||||
* @var string action Action to run; if the event completes execution of the action, should be set to 'none'
|
||||
* @var string u_action Url we are at
|
||||
* @var string ext_name Extension name from request
|
||||
* @var int safe_time_limit Safe limit of execution time
|
||||
* @var int start_time Start time
|
||||
* @var string tpl_name Template file to load
|
||||
* @since 3.1.11-RC1
|
||||
* @changed 3.2.1-RC1 Renamed to core.acp_extensions_run_action_before, added tpl_name, added action 'none'
|
||||
*/
|
||||
$u_action = $this->u_action;
|
||||
$tpl_name = '';
|
||||
$vars = array('action', 'u_action', 'ext_name', 'safe_time_limit', 'start_time', 'tpl_name');
|
||||
extract($this->phpbb_dispatcher->trigger_event('core.acp_extensions_run_action_before', compact($vars)));
|
||||
|
||||
// In case they have been updated by the event
|
||||
$this->u_action = $u_action;
|
||||
$this->tpl_name = $tpl_name;
|
||||
|
||||
// If they've specified an extension, let's load the metadata manager and validate it.
|
||||
if ($ext_name)
|
||||
{
|
||||
$md_manager = new \phpbb\extension\metadata_manager($ext_name, $config, $phpbb_extension_manager, $template, $user, $phpbb_root_path);
|
||||
$md_manager = $this->ext_manager->create_extension_metadata_manager($ext_name, $this->template);
|
||||
|
||||
try
|
||||
{
|
||||
@@ -85,6 +111,10 @@ class acp_extensions
|
||||
// What are we doing?
|
||||
switch ($action)
|
||||
{
|
||||
case 'none':
|
||||
// Intentionally empty, used by extensions that execute additional actions in the prior event
|
||||
break;
|
||||
|
||||
case 'set_config_version_check_force_unstable':
|
||||
$force_unstable = $this->request->variable('force_unstable', false);
|
||||
|
||||
@@ -94,12 +124,12 @@ class acp_extensions
|
||||
'force_unstable' => $force_unstable,
|
||||
));
|
||||
|
||||
confirm_box(false, $user->lang('EXTENSION_FORCE_UNSTABLE_CONFIRM'), $s_hidden_fields);
|
||||
confirm_box(false, $this->user->lang('EXTENSION_FORCE_UNSTABLE_CONFIRM'), $s_hidden_fields);
|
||||
}
|
||||
else
|
||||
{
|
||||
$config->set('extension_force_unstable', false);
|
||||
trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
|
||||
$this->config->set('extension_force_unstable', false);
|
||||
trigger_error($this->user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -107,17 +137,17 @@ class acp_extensions
|
||||
default:
|
||||
if (confirm_box(true))
|
||||
{
|
||||
$config->set('extension_force_unstable', true);
|
||||
trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
|
||||
$this->config->set('extension_force_unstable', true);
|
||||
trigger_error($this->user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
|
||||
}
|
||||
|
||||
$this->list_enabled_exts($phpbb_extension_manager);
|
||||
$this->list_disabled_exts($phpbb_extension_manager);
|
||||
$this->list_available_exts($phpbb_extension_manager);
|
||||
$this->list_enabled_exts();
|
||||
$this->list_disabled_exts();
|
||||
$this->list_available_exts();
|
||||
|
||||
$this->template->assign_vars(array(
|
||||
'U_VERSIONCHECK_FORCE' => $this->u_action . '&action=list&versioncheck_force=1',
|
||||
'FORCE_UNSTABLE' => $config['extension_force_unstable'],
|
||||
'FORCE_UNSTABLE' => $this->config['extension_force_unstable'],
|
||||
'U_ACTION' => $this->u_action,
|
||||
));
|
||||
|
||||
@@ -125,30 +155,29 @@ class acp_extensions
|
||||
break;
|
||||
|
||||
case 'enable_pre':
|
||||
if (!$md_manager->validate_dir())
|
||||
try
|
||||
{
|
||||
trigger_error($user->lang['EXTENSION_DIR_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
$md_manager->validate_enable();
|
||||
}
|
||||
catch (\phpbb\extension\exception $e)
|
||||
{
|
||||
trigger_error($e . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if (!$md_manager->validate_enable())
|
||||
{
|
||||
trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$extension = $phpbb_extension_manager->get_extension($ext_name);
|
||||
$extension = $this->ext_manager->get_extension($ext_name);
|
||||
if (!$extension->is_enableable())
|
||||
{
|
||||
trigger_error($user->lang['EXTENSION_NOT_ENABLEABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
trigger_error($this->user->lang['EXTENSION_NOT_ENABLEABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if ($phpbb_extension_manager->is_enabled($ext_name))
|
||||
if ($this->ext_manager->is_enabled($ext_name))
|
||||
{
|
||||
redirect($this->u_action);
|
||||
}
|
||||
|
||||
$this->tpl_name = 'acp_ext_enable';
|
||||
|
||||
$template->assign_vars(array(
|
||||
$this->template->assign_vars(array(
|
||||
'PRE' => true,
|
||||
'L_CONFIRM_MESSAGE' => $this->user->lang('EXTENSION_ENABLE_CONFIRM', $md_manager->get_metadata('display-name')),
|
||||
'U_ENABLE' => $this->u_action . '&action=enable&ext_name=' . urlencode($ext_name) . '&hash=' . generate_link_hash('enable.' . $ext_name),
|
||||
@@ -156,57 +185,65 @@ class acp_extensions
|
||||
break;
|
||||
|
||||
case 'enable':
|
||||
if (!$md_manager->validate_dir())
|
||||
try
|
||||
{
|
||||
trigger_error($user->lang['EXTENSION_DIR_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
$md_manager->validate_enable();
|
||||
}
|
||||
catch (\phpbb\extension\exception $e)
|
||||
{
|
||||
trigger_error($e . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if (!$md_manager->validate_enable())
|
||||
{
|
||||
trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$extension = $phpbb_extension_manager->get_extension($ext_name);
|
||||
$extension = $this->ext_manager->get_extension($ext_name);
|
||||
if (!$extension->is_enableable())
|
||||
{
|
||||
trigger_error($user->lang['EXTENSION_NOT_ENABLEABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
trigger_error($this->user->lang['EXTENSION_NOT_ENABLEABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
while ($phpbb_extension_manager->enable_step($ext_name))
|
||||
while ($this->ext_manager->enable_step($ext_name))
|
||||
{
|
||||
// Are we approaching the time limit? If so we want to pause the update and continue after refreshing
|
||||
if ((time() - $start_time) >= $safe_time_limit)
|
||||
{
|
||||
$template->assign_var('S_NEXT_STEP', true);
|
||||
$this->template->assign_var('S_NEXT_STEP', true);
|
||||
|
||||
meta_refresh(0, $this->u_action . '&action=enable&ext_name=' . urlencode($ext_name) . '&hash=' . generate_link_hash('enable.' . $ext_name));
|
||||
}
|
||||
}
|
||||
$this->log->add('admin', $user->data['user_id'], $user->ip, 'LOG_EXT_ENABLE', time(), array($ext_name));
|
||||
|
||||
// Update custom style for admin area
|
||||
$this->template->set_custom_style(array(
|
||||
array(
|
||||
'name' => 'adm',
|
||||
'ext_path' => 'adm/style/',
|
||||
),
|
||||
), array($phpbb_root_path . 'adm/style'));
|
||||
|
||||
$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_EXT_ENABLE', time(), array($ext_name));
|
||||
}
|
||||
catch (\phpbb\db\migration\exception $e)
|
||||
{
|
||||
$template->assign_var('MIGRATOR_ERROR', $e->getLocalisedMessage($user));
|
||||
$this->template->assign_var('MIGRATOR_ERROR', $e->getLocalisedMessage($this->user));
|
||||
}
|
||||
|
||||
$this->tpl_name = 'acp_ext_enable';
|
||||
|
||||
$template->assign_vars(array(
|
||||
$this->template->assign_vars(array(
|
||||
'U_RETURN' => $this->u_action . '&action=list',
|
||||
));
|
||||
break;
|
||||
|
||||
case 'disable_pre':
|
||||
if (!$phpbb_extension_manager->is_enabled($ext_name))
|
||||
if (!$this->ext_manager->is_enabled($ext_name))
|
||||
{
|
||||
redirect($this->u_action);
|
||||
}
|
||||
|
||||
$this->tpl_name = 'acp_ext_disable';
|
||||
|
||||
$template->assign_vars(array(
|
||||
$this->template->assign_vars(array(
|
||||
'PRE' => true,
|
||||
'L_CONFIRM_MESSAGE' => $this->user->lang('EXTENSION_DISABLE_CONFIRM', $md_manager->get_metadata('display-name')),
|
||||
'U_DISABLE' => $this->u_action . '&action=disable&ext_name=' . urlencode($ext_name) . '&hash=' . generate_link_hash('disable.' . $ext_name),
|
||||
@@ -214,38 +251,38 @@ class acp_extensions
|
||||
break;
|
||||
|
||||
case 'disable':
|
||||
if (!$phpbb_extension_manager->is_enabled($ext_name))
|
||||
if (!$this->ext_manager->is_enabled($ext_name))
|
||||
{
|
||||
redirect($this->u_action);
|
||||
}
|
||||
|
||||
while ($phpbb_extension_manager->disable_step($ext_name))
|
||||
while ($this->ext_manager->disable_step($ext_name))
|
||||
{
|
||||
// Are we approaching the time limit? If so we want to pause the update and continue after refreshing
|
||||
if ((time() - $start_time) >= $safe_time_limit)
|
||||
{
|
||||
$template->assign_var('S_NEXT_STEP', true);
|
||||
$this->template->assign_var('S_NEXT_STEP', true);
|
||||
|
||||
meta_refresh(0, $this->u_action . '&action=disable&ext_name=' . urlencode($ext_name) . '&hash=' . generate_link_hash('disable.' . $ext_name));
|
||||
}
|
||||
}
|
||||
$this->log->add('admin', $user->data['user_id'], $user->ip, 'LOG_EXT_DISABLE', time(), array($ext_name));
|
||||
$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_EXT_DISABLE', time(), array($ext_name));
|
||||
|
||||
$this->tpl_name = 'acp_ext_disable';
|
||||
|
||||
$template->assign_vars(array(
|
||||
$this->template->assign_vars(array(
|
||||
'U_RETURN' => $this->u_action . '&action=list',
|
||||
));
|
||||
break;
|
||||
|
||||
case 'delete_data_pre':
|
||||
if ($phpbb_extension_manager->is_enabled($ext_name))
|
||||
if ($this->ext_manager->is_enabled($ext_name))
|
||||
{
|
||||
redirect($this->u_action);
|
||||
}
|
||||
$this->tpl_name = 'acp_ext_delete_data';
|
||||
|
||||
$template->assign_vars(array(
|
||||
$this->template->assign_vars(array(
|
||||
'PRE' => true,
|
||||
'L_CONFIRM_MESSAGE' => $this->user->lang('EXTENSION_DELETE_DATA_CONFIRM', $md_manager->get_metadata('display-name')),
|
||||
'U_PURGE' => $this->u_action . '&action=delete_data&ext_name=' . urlencode($ext_name) . '&hash=' . generate_link_hash('delete_data.' . $ext_name),
|
||||
@@ -253,33 +290,33 @@ class acp_extensions
|
||||
break;
|
||||
|
||||
case 'delete_data':
|
||||
if ($phpbb_extension_manager->is_enabled($ext_name))
|
||||
if ($this->ext_manager->is_enabled($ext_name))
|
||||
{
|
||||
redirect($this->u_action);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
while ($phpbb_extension_manager->purge_step($ext_name))
|
||||
while ($this->ext_manager->purge_step($ext_name))
|
||||
{
|
||||
// Are we approaching the time limit? If so we want to pause the update and continue after refreshing
|
||||
if ((time() - $start_time) >= $safe_time_limit)
|
||||
{
|
||||
$template->assign_var('S_NEXT_STEP', true);
|
||||
$this->template->assign_var('S_NEXT_STEP', true);
|
||||
|
||||
meta_refresh(0, $this->u_action . '&action=delete_data&ext_name=' . urlencode($ext_name) . '&hash=' . generate_link_hash('delete_data.' . $ext_name));
|
||||
}
|
||||
}
|
||||
$this->log->add('admin', $user->data['user_id'], $user->ip, 'LOG_EXT_PURGE', time(), array($ext_name));
|
||||
$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_EXT_PURGE', time(), array($ext_name));
|
||||
}
|
||||
catch (\phpbb\db\migration\exception $e)
|
||||
{
|
||||
$template->assign_var('MIGRATOR_ERROR', $e->getLocalisedMessage($user));
|
||||
$this->template->assign_var('MIGRATOR_ERROR', $e->getLocalisedMessage($this->user));
|
||||
}
|
||||
|
||||
$this->tpl_name = 'acp_ext_delete_data';
|
||||
|
||||
$template->assign_vars(array(
|
||||
$this->template->assign_vars(array(
|
||||
'U_RETURN' => $this->u_action . '&action=list',
|
||||
));
|
||||
break;
|
||||
@@ -290,28 +327,25 @@ class acp_extensions
|
||||
|
||||
try
|
||||
{
|
||||
$updates_available = $this->version_check($md_manager, $request->variable('versioncheck_force', false));
|
||||
$updates_available = $this->version_check($md_manager, $this->request->variable('versioncheck_force', false));
|
||||
|
||||
$template->assign_vars(array(
|
||||
$this->template->assign_vars(array(
|
||||
'S_UP_TO_DATE' => empty($updates_available),
|
||||
'S_VERSIONCHECK' => true,
|
||||
'UP_TO_DATE_MSG' => $this->user->lang(empty($updates_available) ? 'UP_TO_DATE' : 'NOT_UP_TO_DATE', $md_manager->get_metadata('display-name')),
|
||||
));
|
||||
|
||||
foreach ($updates_available as $branch => $version_data)
|
||||
{
|
||||
$template->assign_block_vars('updates_available', $version_data);
|
||||
}
|
||||
$this->template->assign_block_vars('updates_available', $updates_available);
|
||||
}
|
||||
catch (\RuntimeException $e)
|
||||
{
|
||||
$template->assign_vars(array(
|
||||
$this->template->assign_vars(array(
|
||||
'S_VERSIONCHECK_STATUS' => $e->getCode(),
|
||||
'VERSIONCHECK_FAIL_REASON' => ($e->getMessage() !== $user->lang('VERSIONCHECK_FAIL')) ? $e->getMessage() : '',
|
||||
'VERSIONCHECK_FAIL_REASON' => ($e->getMessage() !== $this->user->lang('VERSIONCHECK_FAIL')) ? $e->getMessage() : '',
|
||||
));
|
||||
}
|
||||
|
||||
$template->assign_vars(array(
|
||||
$this->template->assign_vars(array(
|
||||
'U_BACK' => $this->u_action . '&action=list',
|
||||
'U_VERSIONCHECK_FORCE' => $this->u_action . '&action=details&versioncheck_force=1&ext_name=' . urlencode($md_manager->get_metadata('name')),
|
||||
));
|
||||
@@ -319,21 +353,41 @@ class acp_extensions
|
||||
$this->tpl_name = 'acp_ext_details';
|
||||
break;
|
||||
}
|
||||
|
||||
/**
|
||||
* Event to run after a specific action on extension has completed
|
||||
*
|
||||
* @event core.acp_extensions_run_action_after
|
||||
* @var string action Action that has run
|
||||
* @var string u_action Url we are at
|
||||
* @var string ext_name Extension name from request
|
||||
* @var int safe_time_limit Safe limit of execution time
|
||||
* @var int start_time Start time
|
||||
* @var string tpl_name Template file to load
|
||||
* @since 3.1.11-RC1
|
||||
*/
|
||||
$u_action = $this->u_action;
|
||||
$tpl_name = $this->tpl_name;
|
||||
$vars = array('action', 'u_action', 'ext_name', 'safe_time_limit', 'start_time', 'tpl_name');
|
||||
extract($this->phpbb_dispatcher->trigger_event('core.acp_extensions_run_action_after', compact($vars)));
|
||||
|
||||
// In case they have been updated by the event
|
||||
$this->u_action = $u_action;
|
||||
$this->tpl_name = $tpl_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Lists all the enabled extensions and dumps to the template
|
||||
*
|
||||
* @param $phpbb_extension_manager An instance of the extension manager
|
||||
* @return null
|
||||
*/
|
||||
public function list_enabled_exts(\phpbb\extension\manager $phpbb_extension_manager)
|
||||
public function list_enabled_exts()
|
||||
{
|
||||
$enabled_extension_meta_data = array();
|
||||
|
||||
foreach ($phpbb_extension_manager->all_enabled() as $name => $location)
|
||||
foreach ($this->ext_manager->all_enabled() as $name => $location)
|
||||
{
|
||||
$md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, $this->template);
|
||||
$md_manager = $this->ext_manager->create_extension_metadata_manager($name, $this->template);
|
||||
|
||||
try
|
||||
{
|
||||
@@ -381,16 +435,15 @@ class acp_extensions
|
||||
/**
|
||||
* Lists all the disabled extensions and dumps to the template
|
||||
*
|
||||
* @param $phpbb_extension_manager An instance of the extension manager
|
||||
* @return null
|
||||
*/
|
||||
public function list_disabled_exts(\phpbb\extension\manager $phpbb_extension_manager)
|
||||
public function list_disabled_exts()
|
||||
{
|
||||
$disabled_extension_meta_data = array();
|
||||
|
||||
foreach ($phpbb_extension_manager->all_disabled() as $name => $location)
|
||||
foreach ($this->ext_manager->all_disabled() as $name => $location)
|
||||
{
|
||||
$md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, $this->template);
|
||||
$md_manager = $this->ext_manager->create_extension_metadata_manager($name, $this->template);
|
||||
|
||||
try
|
||||
{
|
||||
@@ -439,18 +492,17 @@ class acp_extensions
|
||||
/**
|
||||
* Lists all the available extensions and dumps to the template
|
||||
*
|
||||
* @param $phpbb_extension_manager An instance of the extension manager
|
||||
* @return null
|
||||
*/
|
||||
public function list_available_exts(\phpbb\extension\manager $phpbb_extension_manager)
|
||||
public function list_available_exts()
|
||||
{
|
||||
$uninstalled = array_diff_key($phpbb_extension_manager->all_available(), $phpbb_extension_manager->all_configured());
|
||||
$uninstalled = array_diff_key($this->ext_manager->all_available(), $this->ext_manager->all_configured());
|
||||
|
||||
$available_extension_meta_data = array();
|
||||
|
||||
foreach ($uninstalled as $name => $location)
|
||||
{
|
||||
$md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, $this->template);
|
||||
$md_manager = $this->ext_manager->create_extension_metadata_manager($name, $this->template);
|
||||
|
||||
try
|
||||
{
|
||||
@@ -519,7 +571,7 @@ class acp_extensions
|
||||
* @param \phpbb\extension\metadata_manager $md_manager The metadata manager for the version to check.
|
||||
* @param bool $force_update Ignores cached data. Defaults to false.
|
||||
* @param bool $force_cache Force the use of the cache. Override $force_update.
|
||||
* @return string
|
||||
* @return array
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
protected function version_check(\phpbb\extension\metadata_manager $md_manager, $force_update = false, $force_cache = false)
|
||||
@@ -535,10 +587,10 @@ class acp_extensions
|
||||
|
||||
$version_helper = new \phpbb\version_helper($this->cache, $this->config, new \phpbb\file_downloader(), $this->user);
|
||||
$version_helper->set_current_version($meta['version']);
|
||||
$version_helper->set_file_location($version_check['host'], $version_check['directory'], $version_check['filename']);
|
||||
$version_helper->set_file_location($version_check['host'], $version_check['directory'], $version_check['filename'], isset($version_check['ssl']) ? $version_check['ssl'] : false);
|
||||
$version_helper->force_stability($this->config['extension_force_unstable'] ? 'unstable' : null);
|
||||
|
||||
return $updates = $version_helper->get_suggested_updates($force_update, $force_cache);
|
||||
return $version_helper->get_ext_update_on_branch($force_update, $force_cache);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -842,9 +842,26 @@ class acp_forums
|
||||
ORDER BY left_id";
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
if ($row = $db->sql_fetchrow($result))
|
||||
$rowset = array();
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
do
|
||||
$rowset[(int) $row['forum_id']] = $row;
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
/**
|
||||
* Modify the forum list data
|
||||
*
|
||||
* @event core.acp_manage_forums_modify_forum_list
|
||||
* @var array rowset Array with the forums list data
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array('rowset');
|
||||
extract($phpbb_dispatcher->trigger_event('core.acp_manage_forums_modify_forum_list', compact($vars)));
|
||||
|
||||
if (!empty($rowset))
|
||||
{
|
||||
foreach ($rowset as $row)
|
||||
{
|
||||
$forum_type = $row['forum_type'];
|
||||
|
||||
@@ -888,7 +905,6 @@ class acp_forums
|
||||
'U_SYNC' => $url . '&action=sync')
|
||||
);
|
||||
}
|
||||
while ($row = $db->sql_fetchrow($result));
|
||||
}
|
||||
else if ($this->parent_id)
|
||||
{
|
||||
@@ -904,7 +920,7 @@ class acp_forums
|
||||
'U_SYNC' => $url . '&action=sync')
|
||||
);
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
unset($rowset);
|
||||
|
||||
$template->assign_vars(array(
|
||||
'ERROR_MSG' => (sizeof($errors)) ? implode('<br />', $errors) : '',
|
||||
@@ -1411,7 +1427,7 @@ class acp_forums
|
||||
$diff = sizeof($moved_forums) * 2;
|
||||
|
||||
$moved_ids = array();
|
||||
for ($i = 0; $i < sizeof($moved_forums); ++$i)
|
||||
for ($i = 0, $size = sizeof($moved_forums); $i < $size; ++$i)
|
||||
{
|
||||
$moved_ids[] = $moved_forums[$i]['forum_id'];
|
||||
}
|
||||
|
@@ -324,9 +324,11 @@ class acp_groups
|
||||
$avatar_data = null;
|
||||
$avatar_error = array();
|
||||
|
||||
/** @var \phpbb\avatar\manager $phpbb_avatar_manager */
|
||||
$phpbb_avatar_manager = $phpbb_container->get('avatar.manager');
|
||||
|
||||
if ($config['allow_avatar'])
|
||||
{
|
||||
$phpbb_avatar_manager = $phpbb_container->get('avatar.manager');
|
||||
$avatar_drivers = $phpbb_avatar_manager->get_enabled_drivers();
|
||||
|
||||
// This is normalised data, without the group_ prefix
|
||||
@@ -667,14 +669,21 @@ class acp_groups
|
||||
$avatars_enabled = false;
|
||||
$selected_driver = $phpbb_avatar_manager->clean_driver_name($request->variable('avatar_driver', $avatar_data['avatar_type']));
|
||||
|
||||
// Assign min and max values before generating avatar driver html
|
||||
$template->assign_vars(array(
|
||||
'AVATAR_MIN_WIDTH' => $config['avatar_min_width'],
|
||||
'AVATAR_MAX_WIDTH' => $config['avatar_max_width'],
|
||||
'AVATAR_MIN_HEIGHT' => $config['avatar_min_height'],
|
||||
'AVATAR_MAX_HEIGHT' => $config['avatar_max_height'],
|
||||
));
|
||||
|
||||
foreach ($avatar_drivers as $current_driver)
|
||||
{
|
||||
$driver = $phpbb_avatar_manager->get_driver($current_driver);
|
||||
|
||||
$avatars_enabled = true;
|
||||
$config_name = $phpbb_avatar_manager->get_driver_config_name($driver);
|
||||
$template->set_filenames(array(
|
||||
'avatar' => "acp_avatar_options_{$config_name}.html",
|
||||
'avatar' => $driver->get_acp_template_name(),
|
||||
));
|
||||
|
||||
if ($driver->prepare_form($request, $template, $user, $avatar_data, $avatar_error))
|
||||
|
@@ -40,6 +40,10 @@ class acp_icons
|
||||
$action = (isset($_POST['edit'])) ? 'edit' : $action;
|
||||
$action = (isset($_POST['import'])) ? 'import' : $action;
|
||||
$icon_id = request_var('id', 0);
|
||||
$submit = $request->is_set_post('submit', false);
|
||||
|
||||
$form_key = 'acp_icons';
|
||||
add_form_key($form_key);
|
||||
|
||||
$mode = ($mode == 'smilies') ? 'smilies' : 'icons';
|
||||
|
||||
@@ -325,6 +329,11 @@ class acp_icons
|
||||
case 'create':
|
||||
case 'modify':
|
||||
|
||||
if (!check_form_key($form_key))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
// Get items to create/modify
|
||||
$images = (isset($_POST['image'])) ? array_keys(request_var('image', array('' => 0))) : array();
|
||||
|
||||
@@ -513,6 +522,11 @@ class acp_icons
|
||||
{
|
||||
$order = 0;
|
||||
|
||||
if (!check_form_key($form_key))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if (!($pak_ary = @file($phpbb_root_path . $img_path . '/' . $pak)))
|
||||
{
|
||||
trigger_error($user->lang['PAK_FILE_NOT_READABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
@@ -698,7 +712,7 @@ class acp_icons
|
||||
|
||||
$template->assign_vars(array(
|
||||
'MESSAGE_TITLE' => $user->lang['EXPORT_' . $lang],
|
||||
'MESSAGE_TEXT' => sprintf($user->lang['EXPORT_' . $lang . '_EXPLAIN'], '<a href="' . $this->u_action . '&action=send">', '</a>'),
|
||||
'MESSAGE_TEXT' => sprintf($user->lang['EXPORT_' . $lang . '_EXPLAIN'], '<a href="' . $this->u_action . '&action=send&hash=' . generate_link_hash('acp_icons') . '">', '</a>'),
|
||||
|
||||
'S_USER_NOTICE' => true,
|
||||
)
|
||||
@@ -710,6 +724,11 @@ class acp_icons
|
||||
|
||||
case 'send':
|
||||
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_icons'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$sql = "SELECT *
|
||||
FROM $table
|
||||
ORDER BY {$fields}_order";
|
||||
@@ -811,6 +830,11 @@ class acp_icons
|
||||
case 'move_up':
|
||||
case 'move_down':
|
||||
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_icons'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
// Get current order id...
|
||||
$sql = "SELECT {$fields}_order as current_order
|
||||
FROM $table
|
||||
@@ -928,8 +952,8 @@ class acp_icons
|
||||
'EMOTION' => (isset($row['emotion'])) ? $row['emotion'] : '',
|
||||
'U_EDIT' => $this->u_action . '&action=edit&id=' . $row[$fields . '_id'],
|
||||
'U_DELETE' => $this->u_action . '&action=delete&id=' . $row[$fields . '_id'],
|
||||
'U_MOVE_UP' => $this->u_action . '&action=move_up&id=' . $row[$fields . '_id'] . '&start=' . $pagination_start,
|
||||
'U_MOVE_DOWN' => $this->u_action . '&action=move_down&id=' . $row[$fields . '_id'] . '&start=' . $pagination_start,
|
||||
'U_MOVE_UP' => $this->u_action . '&action=move_up&id=' . $row[$fields . '_id'] . '&start=' . $pagination_start . '&hash=' . generate_link_hash('acp_icons'),
|
||||
'U_MOVE_DOWN' => $this->u_action . '&action=move_down&id=' . $row[$fields . '_id'] . '&start=' . $pagination_start . '&hash=' . generate_link_hash('acp_icons'),
|
||||
));
|
||||
|
||||
if (!$spacer && !$row['display_on_posting'])
|
||||
|
@@ -50,13 +50,16 @@ class acp_jabber
|
||||
$this->tpl_name = 'acp_jabber';
|
||||
$this->page_title = 'ACP_JABBER_SETTINGS';
|
||||
|
||||
$jab_enable = request_var('jab_enable', (bool) $config['jab_enable']);
|
||||
$jab_host = request_var('jab_host', (string) $config['jab_host']);
|
||||
$jab_port = request_var('jab_port', (int) $config['jab_port']);
|
||||
$jab_username = request_var('jab_username', (string) $config['jab_username']);
|
||||
$jab_password = request_var('jab_password', (string) $config['jab_password']);
|
||||
$jab_package_size = request_var('jab_package_size', (int) $config['jab_package_size']);
|
||||
$jab_use_ssl = request_var('jab_use_ssl', (bool) $config['jab_use_ssl']);
|
||||
$jab_enable = request_var('jab_enable', (bool) $config['jab_enable']);
|
||||
$jab_host = request_var('jab_host', (string) $config['jab_host']);
|
||||
$jab_port = request_var('jab_port', (int) $config['jab_port']);
|
||||
$jab_username = request_var('jab_username', (string) $config['jab_username']);
|
||||
$jab_password = request_var('jab_password', (string) $config['jab_password']);
|
||||
$jab_package_size = request_var('jab_package_size', (int) $config['jab_package_size']);
|
||||
$jab_use_ssl = request_var('jab_use_ssl', (bool) $config['jab_use_ssl']);
|
||||
$jab_verify_peer = request_var('jab_verify_peer', (bool) $config['jab_verify_peer']);
|
||||
$jab_verify_peer_name = request_var('jab_verify_peer_name', (bool) $config['jab_verify_peer_name']);
|
||||
$jab_allow_self_signed = request_var('jab_allow_self_signed', (bool) $config['jab_allow_self_signed']);
|
||||
|
||||
$form_name = 'acp_jabber';
|
||||
add_form_key($form_name);
|
||||
@@ -76,7 +79,7 @@ class acp_jabber
|
||||
// Is this feature enabled? Then try to establish a connection
|
||||
if ($jab_enable)
|
||||
{
|
||||
$jabber = new jabber($jab_host, $jab_port, $jab_username, $jab_password, $jab_use_ssl);
|
||||
$jabber = new jabber($jab_host, $jab_port, $jab_username, $jab_password, $jab_use_ssl, $jab_verify_peer, $jab_verify_peer_name, $jab_allow_self_signed);
|
||||
|
||||
if (!$jabber->connect())
|
||||
{
|
||||
@@ -116,6 +119,9 @@ class acp_jabber
|
||||
}
|
||||
set_config('jab_package_size', $jab_package_size);
|
||||
set_config('jab_use_ssl', $jab_use_ssl);
|
||||
set_config('jab_verify_peer', $jab_verify_peer);
|
||||
set_config('jab_verify_peer_name', $jab_verify_peer_name);
|
||||
set_config('jab_allow_self_signed', $jab_allow_self_signed);
|
||||
|
||||
add_log('admin', 'LOG_' . $log);
|
||||
trigger_error($message . adm_back_link($this->u_action));
|
||||
@@ -131,6 +137,9 @@ class acp_jabber
|
||||
'JAB_PASSWORD' => $jab_password !== '' ? '********' : '',
|
||||
'JAB_PACKAGE_SIZE' => $jab_package_size,
|
||||
'JAB_USE_SSL' => $jab_use_ssl,
|
||||
'JAB_VERIFY_PEER' => $jab_verify_peer,
|
||||
'JAB_VERIFY_PEER_NAME' => $jab_verify_peer_name,
|
||||
'JAB_ALLOW_SELF_SIGNED' => $jab_allow_self_signed,
|
||||
'S_CAN_USE_SSL' => jabber::can_use_ssl(),
|
||||
'S_GTALK_NOTE' => (!@function_exists('dns_get_record')) ? true : false,
|
||||
));
|
||||
|
@@ -244,6 +244,11 @@ class acp_language
|
||||
break;
|
||||
|
||||
case 'install':
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_language'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$lang_iso = request_var('iso', '');
|
||||
$lang_iso = basename($lang_iso);
|
||||
|
||||
@@ -423,7 +428,7 @@ class acp_language
|
||||
'ISO' => htmlspecialchars($lang_ary['iso']),
|
||||
'LOCAL_NAME' => htmlspecialchars($lang_ary['local_name'], ENT_COMPAT, 'UTF-8'),
|
||||
'NAME' => htmlspecialchars($lang_ary['name'], ENT_COMPAT, 'UTF-8'),
|
||||
'U_INSTALL' => $this->u_action . '&action=install&iso=' . urlencode($lang_ary['iso']))
|
||||
'U_INSTALL' => $this->u_action . '&action=install&iso=' . urlencode($lang_ary['iso']) . '&hash=' . generate_link_hash('acp_language'))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@@ -421,23 +421,33 @@ class acp_main
|
||||
// Version check
|
||||
$user->add_lang('install');
|
||||
|
||||
if ($auth->acl_get('a_server') && version_compare(PHP_VERSION, '5.3.3', '<'))
|
||||
if ($auth->acl_get('a_server') && version_compare(PHP_VERSION, '5.4.0', '<'))
|
||||
{
|
||||
$template->assign_vars(array(
|
||||
'S_PHP_VERSION_OLD' => true,
|
||||
'L_PHP_VERSION_OLD' => sprintf($user->lang['PHP_VERSION_OLD'], '<a href="https://www.phpbb.com/community/viewtopic.php?f=14&t=2152375">', '</a>'),
|
||||
'L_PHP_VERSION_OLD' => sprintf($user->lang['PHP_VERSION_OLD'], PHP_VERSION, '5.4.0', '<a href="https://www.phpbb.com/support/docs/en/3.2/ug/quickstart/requirements">', '</a>'),
|
||||
));
|
||||
}
|
||||
|
||||
if ($auth->acl_get('a_board'))
|
||||
{
|
||||
/** @var \phpbb\version_helper $version_helper */
|
||||
$version_helper = $phpbb_container->get('version_helper');
|
||||
try
|
||||
{
|
||||
$recheck = $request->variable('versioncheck_force', false);
|
||||
$updates_available = $version_helper->get_suggested_updates($recheck);
|
||||
$updates_available = $version_helper->get_update_on_branch($recheck);
|
||||
$upgrades_available = $version_helper->get_suggested_updates();
|
||||
if (!empty($upgrades_available))
|
||||
{
|
||||
$upgrades_available = array_pop($upgrades_available);
|
||||
}
|
||||
|
||||
$template->assign_var('S_VERSION_UP_TO_DATE', empty($updates_available));
|
||||
$template->assign_vars(array(
|
||||
'S_VERSION_UP_TO_DATE' => empty($updates_available),
|
||||
'S_VERSION_UPGRADEABLE' => !empty($upgrades_available),
|
||||
'UPGRADE_INSTRUCTIONS' => !empty($upgrades_available) ? $user->lang('UPGRADE_INSTRUCTIONS', $upgrades_available['current'], $upgrades_available['announcement']) : false,
|
||||
));
|
||||
}
|
||||
catch (\RuntimeException $e)
|
||||
{
|
||||
@@ -453,6 +463,12 @@ class acp_main
|
||||
$template->assign_var('S_VERSION_UP_TO_DATE', true);
|
||||
}
|
||||
|
||||
// Incomplete update?
|
||||
if (phpbb_version_compare($config['version'], PHPBB_VERSION, '<'))
|
||||
{
|
||||
$template->assign_var('S_UPDATE_INCOMPLETE', true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Notice admin
|
||||
*
|
||||
|
@@ -46,6 +46,9 @@ class acp_modules
|
||||
$user->add_lang('acp/modules');
|
||||
$this->tpl_name = 'acp_modules';
|
||||
|
||||
$form_key = 'acp_modules';
|
||||
add_form_key($form_key);
|
||||
|
||||
// module class
|
||||
$this->module_class = $mode;
|
||||
|
||||
@@ -119,6 +122,11 @@ class acp_modules
|
||||
trigger_error($user->lang['NO_MODULE_ID'] . adm_back_link($this->u_action . '&parent_id=' . $this->parent_id), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_modules'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action . '&parent_id=' . $this->parent_id), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$sql = 'SELECT *
|
||||
FROM ' . MODULES_TABLE . "
|
||||
WHERE module_class = '" . $db->sql_escape($this->module_class) . "'
|
||||
@@ -150,6 +158,11 @@ class acp_modules
|
||||
trigger_error($user->lang['NO_MODULE_ID'] . adm_back_link($this->u_action . '&parent_id=' . $this->parent_id), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_modules'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action . '&parent_id=' . $this->parent_id), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$sql = 'SELECT *
|
||||
FROM ' . MODULES_TABLE . "
|
||||
WHERE module_class = '" . $db->sql_escape($this->module_class) . "'
|
||||
@@ -273,6 +286,11 @@ class acp_modules
|
||||
|
||||
if ($submit)
|
||||
{
|
||||
if (!check_form_key($form_key))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action . '&parent_id=' . $this->parent_id), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if (!$module_data['module_langname'])
|
||||
{
|
||||
trigger_error($user->lang['NO_MODULE_LANGNAME'] . adm_back_link($this->u_action . '&parent_id=' . $this->parent_id), E_USER_WARNING);
|
||||
@@ -460,12 +478,12 @@ class acp_modules
|
||||
'S_ACP_MODULE_MANAGEMENT' => ($this->module_class == 'acp' && ($row['module_basename'] == 'modules' || $row['module_langname'] == 'ACP_MODULE_MANAGEMENT')) ? true : false,
|
||||
|
||||
'U_MODULE' => $this->u_action . '&parent_id=' . $row['module_id'],
|
||||
'U_MOVE_UP' => $url . '&action=move_up',
|
||||
'U_MOVE_DOWN' => $url . '&action=move_down',
|
||||
'U_MOVE_UP' => $url . '&action=move_up&hash=' . generate_link_hash('acp_modules'),
|
||||
'U_MOVE_DOWN' => $url . '&action=move_down&hash=' . generate_link_hash('acp_modules'),
|
||||
'U_EDIT' => $url . '&action=edit',
|
||||
'U_DELETE' => $url . '&action=delete',
|
||||
'U_ENABLE' => $url . '&action=enable',
|
||||
'U_DISABLE' => $url . '&action=disable')
|
||||
'U_ENABLE' => $url . '&action=enable&hash=' . generate_link_hash('acp_modules'),
|
||||
'U_DISABLE' => $url . '&action=disable&hash=' . generate_link_hash('acp_modules'))
|
||||
);
|
||||
}
|
||||
while ($row = $db->sql_fetchrow($result));
|
||||
@@ -484,8 +502,8 @@ class acp_modules
|
||||
|
||||
'U_EDIT' => $url . '&action=edit',
|
||||
'U_DELETE' => $url . '&action=delete',
|
||||
'U_ENABLE' => $url . '&action=enable',
|
||||
'U_DISABLE' => $url . '&action=disable')
|
||||
'U_ENABLE' => $url . '&action=enable&hash=' . generate_link_hash('acp_modules'),
|
||||
'U_DISABLE' => $url . '&action=disable&hash=' . generate_link_hash('acp_modules'))
|
||||
);
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
@@ -888,7 +906,7 @@ class acp_modules
|
||||
$diff = sizeof($moved_modules) * 2;
|
||||
|
||||
$moved_ids = array();
|
||||
for ($i = 0; $i < sizeof($moved_modules); ++$i)
|
||||
for ($i = 0, $size = sizeof($moved_modules); $i < $size; ++$i)
|
||||
{
|
||||
$moved_ids[] = $moved_modules[$i]['module_id'];
|
||||
}
|
||||
|
@@ -366,6 +366,11 @@ class acp_permission_roles
|
||||
case 'move_up':
|
||||
case 'move_down':
|
||||
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_permission_roles'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$sql = 'SELECT role_order
|
||||
FROM ' . ACL_ROLES_TABLE . "
|
||||
WHERE role_id = $role_id";
|
||||
@@ -440,8 +445,8 @@ class acp_permission_roles
|
||||
|
||||
'U_EDIT' => $this->u_action . '&action=edit&role_id=' . $row['role_id'],
|
||||
'U_REMOVE' => $this->u_action . '&action=remove&role_id=' . $row['role_id'],
|
||||
'U_MOVE_UP' => $this->u_action . '&action=move_up&role_id=' . $row['role_id'],
|
||||
'U_MOVE_DOWN' => $this->u_action . '&action=move_down&role_id=' . $row['role_id'],
|
||||
'U_MOVE_UP' => $this->u_action . '&action=move_up&role_id=' . $row['role_id'] . '&hash=' . generate_link_hash('acp_permission_roles'),
|
||||
'U_MOVE_DOWN' => $this->u_action . '&action=move_down&role_id=' . $row['role_id'] . '&hash=' . generate_link_hash('acp_permission_roles'),
|
||||
'U_DISPLAY_ITEMS' => ($row['role_id'] == $display_item) ? '' : $this->u_action . '&display_item=' . $row['role_id'] . '#assigned_to')
|
||||
);
|
||||
|
||||
|
@@ -755,6 +755,7 @@ class acp_permissions
|
||||
|
||||
$this->log_action($mode, 'add', $permission_type, $ug_type, $ug_id, $forum_id);
|
||||
|
||||
meta_refresh(5, $this->u_action);
|
||||
trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action));
|
||||
}
|
||||
|
||||
@@ -825,10 +826,12 @@ class acp_permissions
|
||||
|
||||
if ($mode == 'setting_forum_local' || $mode == 'setting_mod_local')
|
||||
{
|
||||
meta_refresh(5, $this->u_action . '&forum_id[]=' . implode('&forum_id[]=', $forum_ids));
|
||||
trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action . '&forum_id[]=' . implode('&forum_id[]=', $forum_ids)));
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_refresh(5, $this->u_action);
|
||||
trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action));
|
||||
}
|
||||
}
|
||||
@@ -899,10 +902,12 @@ class acp_permissions
|
||||
|
||||
if ($mode == 'setting_forum_local' || $mode == 'setting_mod_local')
|
||||
{
|
||||
meta_refresh(5, $this->u_action . '&forum_id[]=' . implode('&forum_id[]=', $forum_id));
|
||||
trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action . '&forum_id[]=' . implode('&forum_id[]=', $forum_id)));
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_refresh(5, $this->u_action);
|
||||
trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action));
|
||||
}
|
||||
}
|
||||
|
@@ -53,6 +53,9 @@ class acp_profile
|
||||
$error = array();
|
||||
$s_hidden_fields = '';
|
||||
|
||||
$form_key = 'acp_profile';
|
||||
add_form_key($form_key);
|
||||
|
||||
if (!$field_id && in_array($action, array('delete','activate', 'deactivate', 'move_up', 'move_down', 'edit')))
|
||||
{
|
||||
trigger_error($user->lang['NO_FIELD_ID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
@@ -161,6 +164,11 @@ class acp_profile
|
||||
|
||||
case 'activate':
|
||||
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_profile'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$sql = 'SELECT lang_id
|
||||
FROM ' . LANG_TABLE . "
|
||||
WHERE lang_iso = '" . $db->sql_escape($config['default_lang']) . "'";
|
||||
@@ -201,6 +209,11 @@ class acp_profile
|
||||
|
||||
case 'deactivate':
|
||||
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_profile'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$sql = 'UPDATE ' . PROFILE_FIELDS_TABLE . "
|
||||
SET field_active = 0
|
||||
WHERE field_id = $field_id";
|
||||
@@ -230,6 +243,11 @@ class acp_profile
|
||||
case 'move_up':
|
||||
case 'move_down':
|
||||
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_profile'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$sql = 'SELECT field_order
|
||||
FROM ' . PROFILE_FIELDS_TABLE . "
|
||||
WHERE field_id = $field_id";
|
||||
@@ -581,6 +599,11 @@ class acp_profile
|
||||
{
|
||||
if (($step == 3 && (sizeof($this->lang_defs['iso']) == 1 || $save)) || ($action == 'edit' && $save))
|
||||
{
|
||||
if (!check_form_key($form_key))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$this->save_profile_field($cp, $field_type, $action);
|
||||
}
|
||||
}
|
||||
@@ -729,18 +752,22 @@ class acp_profile
|
||||
$s_one_need_edit = true;
|
||||
}
|
||||
|
||||
if (!isset($this->type_collection[$row['field_type']]))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
$profile_field = $this->type_collection[$row['field_type']];
|
||||
$template->assign_block_vars('fields', array(
|
||||
'FIELD_IDENT' => $row['field_ident'],
|
||||
'FIELD_TYPE' => $profile_field->get_name(),
|
||||
|
||||
'L_ACTIVATE_DEACTIVATE' => $user->lang[$active_lang],
|
||||
'U_ACTIVATE_DEACTIVATE' => $this->u_action . "&action=$active_value&field_id=$id",
|
||||
'U_ACTIVATE_DEACTIVATE' => $this->u_action . "&action=$active_value&field_id=$id" . '&hash=' . generate_link_hash('acp_profile'),
|
||||
'U_EDIT' => $this->u_action . "&action=edit&field_id=$id",
|
||||
'U_TRANSLATE' => $this->u_action . "&action=edit&field_id=$id&step=3",
|
||||
'U_DELETE' => $this->u_action . "&action=delete&field_id=$id",
|
||||
'U_MOVE_UP' => $this->u_action . "&action=move_up&field_id=$id",
|
||||
'U_MOVE_DOWN' => $this->u_action . "&action=move_down&field_id=$id",
|
||||
'U_MOVE_UP' => $this->u_action . "&action=move_up&field_id=$id" . '&hash=' . generate_link_hash('acp_profile'),
|
||||
'U_MOVE_DOWN' => $this->u_action . "&action=move_down&field_id=$id" . '&hash=' . generate_link_hash('acp_profile'),
|
||||
|
||||
'S_NEED_EDIT' => $s_need_edit)
|
||||
);
|
||||
|
@@ -282,6 +282,11 @@ class acp_reasons
|
||||
case 'move_up':
|
||||
case 'move_down':
|
||||
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_reasons'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$sql = 'SELECT reason_order
|
||||
FROM ' . REPORTS_REASONS_TABLE . "
|
||||
WHERE reason_id = $reason_id";
|
||||
@@ -383,8 +388,8 @@ class acp_reasons
|
||||
|
||||
'U_EDIT' => $this->u_action . '&action=edit&id=' . $row['reason_id'],
|
||||
'U_DELETE' => (!$other_reason) ? $this->u_action . '&action=delete&id=' . $row['reason_id'] : '',
|
||||
'U_MOVE_UP' => $this->u_action . '&action=move_up&id=' . $row['reason_id'],
|
||||
'U_MOVE_DOWN' => $this->u_action . '&action=move_down&id=' . $row['reason_id'])
|
||||
'U_MOVE_UP' => $this->u_action . '&action=move_up&id=' . $row['reason_id'] . '&hash=' . generate_link_hash('acp_reasons'),
|
||||
'U_MOVE_DOWN' => $this->u_action . '&action=move_down&id=' . $row['reason_id'] . '&hash=' . generate_link_hash('acp_reasons'))
|
||||
);
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
@@ -50,11 +50,16 @@ class acp_search
|
||||
|
||||
function settings($id, $mode)
|
||||
{
|
||||
global $db, $user, $auth, $template, $cache;
|
||||
global $db, $user, $auth, $template, $cache, $request;
|
||||
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
|
||||
|
||||
$submit = (isset($_POST['submit'])) ? true : false;
|
||||
|
||||
if ($submit && !check_link_hash($request->variable('hash', ''), 'acp_search'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$search_types = $this->get_search_types();
|
||||
|
||||
$settings = array(
|
||||
@@ -226,13 +231,13 @@ class acp_search
|
||||
'S_YES_SEARCH' => (bool) $config['load_search'],
|
||||
'S_SETTINGS' => true,
|
||||
|
||||
'U_ACTION' => $this->u_action)
|
||||
'U_ACTION' => $this->u_action . '&hash=' . generate_link_hash('acp_search'))
|
||||
);
|
||||
}
|
||||
|
||||
function index($id, $mode)
|
||||
{
|
||||
global $db, $user, $auth, $template, $cache;
|
||||
global $db, $user, $auth, $template, $cache, $request;
|
||||
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
|
||||
|
||||
$action = request_var('action', '');
|
||||
@@ -244,6 +249,12 @@ class acp_search
|
||||
$this->state = array();
|
||||
$this->save_state();
|
||||
}
|
||||
$submit = $request->is_set_post('submit', false);
|
||||
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_search') && in_array($action, array('create', 'delete')))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if ($action)
|
||||
{
|
||||
@@ -294,7 +305,7 @@ class acp_search
|
||||
if (method_exists($this->search, 'delete_index'))
|
||||
{
|
||||
// pass a reference to myself so the $search object can make use of save_state() and attributes
|
||||
if ($error = $this->search->delete_index($this, append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&mode=$mode&action=delete", false)))
|
||||
if ($error = $this->search->delete_index($this, append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&mode=$mode&action=delete&hash=" . generate_link_hash('acp_search'), false)))
|
||||
{
|
||||
$this->state = array('');
|
||||
$this->save_state();
|
||||
@@ -339,7 +350,7 @@ class acp_search
|
||||
$mtime = explode(' ', microtime());
|
||||
$totaltime = $mtime[0] + $mtime[1] - $starttime;
|
||||
$rows_per_second = $row_count / $totaltime;
|
||||
meta_refresh(1, append_sid($this->u_action . '&action=delete&skip_rows=' . $post_counter));
|
||||
meta_refresh(1, append_sid($this->u_action . '&action=delete&skip_rows=' . $post_counter . '&hash=' . generate_link_hash('acp_search')));
|
||||
trigger_error($user->lang('SEARCH_INDEX_DELETE_REDIRECT', (int) $row_count, $post_counter, $rows_per_second));
|
||||
}
|
||||
}
|
||||
@@ -429,7 +440,7 @@ class acp_search
|
||||
$mtime = explode(' ', microtime());
|
||||
$totaltime = $mtime[0] + $mtime[1] - $starttime;
|
||||
$rows_per_second = $row_count / $totaltime;
|
||||
meta_refresh(1, append_sid($this->u_action . '&action=create&skip_rows=' . $post_counter));
|
||||
meta_refresh(1, append_sid($this->u_action . '&action=create&skip_rows=' . $post_counter . '&hash=' . generate_link_hash('acp_search')));
|
||||
trigger_error($user->lang('SEARCH_INDEX_CREATE_REDIRECT', (int) $row_count, $post_counter) . $user->lang('SEARCH_INDEX_CREATE_REDIRECT_RATE', $rows_per_second));
|
||||
}
|
||||
}
|
||||
@@ -508,7 +519,7 @@ class acp_search
|
||||
|
||||
$template->assign_vars(array(
|
||||
'S_INDEX' => true,
|
||||
'U_ACTION' => $this->u_action,
|
||||
'U_ACTION' => $this->u_action . '&hash=' . generate_link_hash('acp_search'),
|
||||
'U_PROGRESS_BAR' => append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&mode=$mode&action=progress_bar"),
|
||||
'UA_PROGRESS_BAR' => addslashes(append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&mode=$mode&action=progress_bar")),
|
||||
));
|
||||
@@ -517,7 +528,7 @@ class acp_search
|
||||
{
|
||||
$template->assign_vars(array(
|
||||
'S_CONTINUE_INDEXING' => $this->state[1],
|
||||
'U_CONTINUE_INDEXING' => $this->u_action . '&action=' . $this->state[1],
|
||||
'U_CONTINUE_INDEXING' => $this->u_action . '&action=' . $this->state[1] . '&hash=' . generate_link_hash('acp_search'),
|
||||
'L_CONTINUE' => ($this->state[1] == 'create') ? $user->lang['CONTINUE_INDEXING'] : $user->lang['CONTINUE_DELETING_INDEX'],
|
||||
'L_CONTINUE_EXPLAIN' => ($this->state[1] == 'create') ? $user->lang['CONTINUE_INDEXING_EXPLAIN'] : $user->lang['CONTINUE_DELETING_INDEX_EXPLAIN'])
|
||||
);
|
||||
|
@@ -433,6 +433,9 @@ class acp_styles
|
||||
trigger_error($this->user->lang['NO_MATCHING_STYLES_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
// Read style configuration file
|
||||
$style_cfg = $this->read_style_cfg($style['style_path']);
|
||||
|
||||
// Find all available parent styles
|
||||
$list = $this->find_possible_parents($styles, $id);
|
||||
|
||||
@@ -579,6 +582,7 @@ class acp_styles
|
||||
'STYLE_ID' => $style['style_id'],
|
||||
'STYLE_NAME' => htmlspecialchars($style['style_name']),
|
||||
'STYLE_PATH' => htmlspecialchars($style['style_path']),
|
||||
'STYLE_VERSION' => htmlspecialchars($style_cfg['style_version']),
|
||||
'STYLE_COPYRIGHT' => strip_tags($style['style_copyright']),
|
||||
'STYLE_PARENT' => $style['style_parent_id'],
|
||||
'S_STYLE_ACTIVE' => $style['style_active'],
|
||||
|
@@ -37,7 +37,12 @@ class acp_update
|
||||
try
|
||||
{
|
||||
$recheck = $request->variable('versioncheck_force', false);
|
||||
$updates_available = $version_helper->get_suggested_updates($recheck);
|
||||
$updates_available = $version_helper->get_update_on_branch($recheck);
|
||||
$upgrades_available = $version_helper->get_suggested_updates();
|
||||
if (!empty($upgrades_available))
|
||||
{
|
||||
$upgrades_available = array_pop($upgrades_available);
|
||||
}
|
||||
}
|
||||
catch (\RuntimeException $e)
|
||||
{
|
||||
@@ -46,12 +51,9 @@ class acp_update
|
||||
$updates_available = array();
|
||||
}
|
||||
|
||||
foreach ($updates_available as $branch => $version_data)
|
||||
{
|
||||
$template->assign_block_vars('updates_available', $version_data);
|
||||
}
|
||||
$template->assign_block_vars('updates_available', $updates_available);
|
||||
|
||||
$update_link = append_sid($phpbb_root_path . 'install/index.' . $phpEx, 'mode=update');
|
||||
$update_link = append_sid($phpbb_root_path . 'install/');
|
||||
|
||||
$template->assign_vars(array(
|
||||
'S_UP_TO_DATE' => empty($updates_available),
|
||||
@@ -61,6 +63,20 @@ class acp_update
|
||||
'CURRENT_VERSION' => $config['version'],
|
||||
|
||||
'UPDATE_INSTRUCTIONS' => sprintf($user->lang['UPDATE_INSTRUCTIONS'], $update_link),
|
||||
'S_VERSION_UPGRADEABLE' => !empty($upgrades_available),
|
||||
'UPGRADE_INSTRUCTIONS' => !empty($upgrades_available) ? $user->lang('UPGRADE_INSTRUCTIONS', $upgrades_available['current'], $upgrades_available['announcement']) : false,
|
||||
));
|
||||
|
||||
// Incomplete update?
|
||||
if (phpbb_version_compare($config['version'], PHPBB_VERSION, '<'))
|
||||
{
|
||||
$database_update_link = append_sid($phpbb_root_path . 'install/database_update.' . $phpEx);
|
||||
|
||||
$template->assign_vars(array(
|
||||
'S_UPDATE_INCOMPLETE' => true,
|
||||
'FILES_VERSION' => PHPBB_VERSION,
|
||||
'INCOMPLETE_INSTRUCTIONS' => $user->lang('UPDATE_INCOMPLETE_EXPLAIN', $database_update_link),
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -373,11 +373,6 @@ class acp_users
|
||||
if ($user_row['user_type'] == USER_NORMAL)
|
||||
{
|
||||
user_active_flip('deactivate', $user_id, INACTIVE_REMIND);
|
||||
|
||||
$sql = 'UPDATE ' . USERS_TABLE . "
|
||||
SET user_actkey = '" . $db->sql_escape($user_actkey) . "'
|
||||
WHERE user_id = $user_id";
|
||||
$db->sql_query($sql);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -386,8 +381,18 @@ class acp_users
|
||||
FROM ' . USERS_TABLE . '
|
||||
WHERE user_id = ' . $user_id;
|
||||
$result = $db->sql_query($sql);
|
||||
$user_actkey = (string) $db->sql_fetchfield('user_actkey');
|
||||
$user_activation_key = (string) $db->sql_fetchfield('user_actkey');
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
$user_actkey = empty($user_activation_key) ? $user_actkey : $user_activation_key;
|
||||
}
|
||||
|
||||
if ($user_row['user_type'] == USER_NORMAL || empty($user_activation_key))
|
||||
{
|
||||
$sql = 'UPDATE ' . USERS_TABLE . "
|
||||
SET user_actkey = '" . $db->sql_escape($user_actkey) . "'
|
||||
WHERE user_id = $user_id";
|
||||
$db->sql_query($sql);
|
||||
}
|
||||
|
||||
$messenger = new messenger(false);
|
||||
@@ -1587,7 +1592,7 @@ class acp_users
|
||||
if ($submit)
|
||||
{
|
||||
$error = validate_data($data, array(
|
||||
'dateformat' => array('string', false, 1, 30),
|
||||
'dateformat' => array('string', false, 1, 64),
|
||||
'lang' => array('match', false, '#^[a-z_\-]{2,}$#i'),
|
||||
'tz' => array('timezone'),
|
||||
|
||||
@@ -1809,10 +1814,11 @@ class acp_users
|
||||
case 'avatar':
|
||||
|
||||
$avatars_enabled = false;
|
||||
/** @var \phpbb\avatar\manager $phpbb_avatar_manager */
|
||||
$phpbb_avatar_manager = $phpbb_container->get('avatar.manager');
|
||||
|
||||
if ($config['allow_avatar'])
|
||||
{
|
||||
$phpbb_avatar_manager = $phpbb_container->get('avatar.manager');
|
||||
$avatar_drivers = $phpbb_avatar_manager->get_enabled_drivers();
|
||||
|
||||
// This is normalised data, without the user_ prefix
|
||||
@@ -1873,14 +1879,21 @@ class acp_users
|
||||
|
||||
$selected_driver = $phpbb_avatar_manager->clean_driver_name($request->variable('avatar_driver', $user_row['user_avatar_type']));
|
||||
|
||||
// Assign min and max values before generating avatar driver html
|
||||
$template->assign_vars(array(
|
||||
'AVATAR_MIN_WIDTH' => $config['avatar_min_width'],
|
||||
'AVATAR_MAX_WIDTH' => $config['avatar_max_width'],
|
||||
'AVATAR_MIN_HEIGHT' => $config['avatar_min_height'],
|
||||
'AVATAR_MAX_HEIGHT' => $config['avatar_max_height'],
|
||||
));
|
||||
|
||||
foreach ($avatar_drivers as $current_driver)
|
||||
{
|
||||
$driver = $phpbb_avatar_manager->get_driver($current_driver);
|
||||
|
||||
$avatars_enabled = true;
|
||||
$config_name = $phpbb_avatar_manager->get_driver_config_name($driver);
|
||||
$template->set_filenames(array(
|
||||
'avatar' => "acp_avatar_options_{$config_name}.html",
|
||||
'avatar' => $driver->get_acp_template_name(),
|
||||
));
|
||||
|
||||
if ($driver->prepare_form($request, $template, $user, $avatar_data, $error))
|
||||
@@ -1900,8 +1913,12 @@ class acp_users
|
||||
}
|
||||
}
|
||||
|
||||
// Replace "error" strings with their real, localised form
|
||||
$error = $phpbb_avatar_manager->localize_errors($user, $error);
|
||||
// Avatar manager is not initialized if avatars are disabled
|
||||
if (isset($phpbb_avatar_manager))
|
||||
{
|
||||
// Replace "error" strings with their real, localised form
|
||||
$error = $phpbb_avatar_manager->localize_errors($user, $error);
|
||||
}
|
||||
|
||||
$avatar = phpbb_get_user_avatar($user_row, 'USER_AVATAR', true);
|
||||
|
||||
@@ -1912,7 +1929,7 @@ class acp_users
|
||||
|
||||
'S_FORM_ENCTYPE' => ' enctype="multipart/form-data"',
|
||||
|
||||
'L_AVATAR_EXPLAIN' => sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], $config['avatar_filesize'] / 1024),
|
||||
'L_AVATAR_EXPLAIN' => $user->lang(($config['avatar_filesize'] == 0) ? 'AVATAR_EXPLAIN_NO_FILESIZE' : 'AVATAR_EXPLAIN', $config['avatar_max_width'], $config['avatar_max_height'], $config['avatar_filesize'] / 1024),
|
||||
|
||||
'S_AVATARS_ENABLED' => ($config['allow_avatar'] && $avatars_enabled),
|
||||
));
|
||||
@@ -2262,6 +2279,12 @@ class acp_users
|
||||
{
|
||||
trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action . '&u=' . $user_id), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_users'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
group_user_attributes($action, $group_id, $user_id);
|
||||
|
||||
if ($action == 'default')
|
||||
@@ -2419,8 +2442,8 @@ class acp_users
|
||||
{
|
||||
$template->assign_block_vars('group', array(
|
||||
'U_EDIT_GROUP' => append_sid("{$phpbb_admin_path}index.$phpEx", "i=groups&mode=manage&action=edit&u=$user_id&g={$data['group_id']}&back_link=acp_users_groups"),
|
||||
'U_DEFAULT' => $this->u_action . "&action=default&u=$user_id&g=" . $data['group_id'],
|
||||
'U_DEMOTE_PROMOTE' => $this->u_action . '&action=' . (($data['group_leader']) ? 'demote' : 'promote') . "&u=$user_id&g=" . $data['group_id'],
|
||||
'U_DEFAULT' => $this->u_action . "&action=default&u=$user_id&g=" . $data['group_id'] . '&hash=' . generate_link_hash('acp_users'),
|
||||
'U_DEMOTE_PROMOTE' => $this->u_action . '&action=' . (($data['group_leader']) ? 'demote' : 'promote') . "&u=$user_id&g=" . $data['group_id'] . '&hash=' . generate_link_hash('acp_users'),
|
||||
'U_DELETE' => $this->u_action . "&action=delete&u=$user_id&g=" . $data['group_id'],
|
||||
'U_APPROVE' => ($group_type == 'pending') ? $this->u_action . "&action=approve&u=$user_id&g=" . $data['group_id'] : '',
|
||||
|
||||
|
@@ -15,16 +15,31 @@ class acp_logs_info
|
||||
{
|
||||
function module()
|
||||
{
|
||||
global $phpbb_dispatcher;
|
||||
|
||||
$modes = array(
|
||||
'admin' => array('title' => 'ACP_ADMIN_LOGS', 'auth' => 'acl_a_viewlogs', 'cat' => array('ACP_FORUM_LOGS')),
|
||||
'mod' => array('title' => 'ACP_MOD_LOGS', 'auth' => 'acl_a_viewlogs', 'cat' => array('ACP_FORUM_LOGS')),
|
||||
'users' => array('title' => 'ACP_USERS_LOGS', 'auth' => 'acl_a_viewlogs', 'cat' => array('ACP_FORUM_LOGS')),
|
||||
'critical' => array('title' => 'ACP_CRITICAL_LOGS', 'auth' => 'acl_a_viewlogs', 'cat' => array('ACP_FORUM_LOGS')),
|
||||
);
|
||||
|
||||
/**
|
||||
* Event to add or modify ACP log modulemodes
|
||||
*
|
||||
* @event core.acp_logs_info_modify_modes
|
||||
* @var array modes Array with modes info
|
||||
* @since 3.1.11-RC1
|
||||
* @since 3.2.1-RC1
|
||||
*/
|
||||
$vars = array('modes');
|
||||
extract($phpbb_dispatcher->trigger_event('core.acp_logs_info_modify_modes', compact($vars)));
|
||||
|
||||
return array(
|
||||
'filename' => 'acp_logs',
|
||||
'title' => 'ACP_LOGGING',
|
||||
'version' => '1.0.0',
|
||||
'modes' => array(
|
||||
'admin' => array('title' => 'ACP_ADMIN_LOGS', 'auth' => 'acl_a_viewlogs', 'cat' => array('ACP_FORUM_LOGS')),
|
||||
'mod' => array('title' => 'ACP_MOD_LOGS', 'auth' => 'acl_a_viewlogs', 'cat' => array('ACP_FORUM_LOGS')),
|
||||
'users' => array('title' => 'ACP_USERS_LOGS', 'auth' => 'acl_a_viewlogs', 'cat' => array('ACP_FORUM_LOGS')),
|
||||
'critical' => array('title' => 'ACP_CRITICAL_LOGS', 'auth' => 'acl_a_viewlogs', 'cat' => array('ACP_FORUM_LOGS')),
|
||||
),
|
||||
'modes' => $modes,
|
||||
);
|
||||
}
|
||||
|
||||
|
@@ -28,7 +28,7 @@ if (!defined('IN_PHPBB'))
|
||||
*/
|
||||
|
||||
// phpBB Version
|
||||
define('PHPBB_VERSION', '3.1.7-pl1');
|
||||
define('PHPBB_VERSION', '3.1.11-RC1');
|
||||
|
||||
// QA-related
|
||||
// define('PHPBB_QA', 1);
|
||||
|
@@ -2233,7 +2233,6 @@ function generate_board_url($without_script_path = false)
|
||||
global $config, $user, $request;
|
||||
|
||||
$server_name = $user->host;
|
||||
$server_port = $request->server('SERVER_PORT', 0);
|
||||
|
||||
// Forcing server vars is the only way to specify/override the protocol
|
||||
if ($config['force_server_vars'] || !$server_name)
|
||||
@@ -2248,6 +2247,13 @@ function generate_board_url($without_script_path = false)
|
||||
}
|
||||
else
|
||||
{
|
||||
$server_port = $request->server('SERVER_PORT', 0);
|
||||
$forwarded_proto = $request->server('HTTP_X_FORWARDED_PROTO');
|
||||
|
||||
if (!empty($forwarded_proto) && $forwarded_proto === 'https')
|
||||
{
|
||||
$server_port = 443;
|
||||
}
|
||||
// Do not rely on cookie_secure, users seem to think that it means a secured cookie instead of an encrypted connection
|
||||
$cookie_secure = $request->is_secure() ? 1 : 0;
|
||||
$url = (($cookie_secure) ? 'https://' : 'http://') . $server_name;
|
||||
@@ -2401,6 +2407,7 @@ function redirect($url, $return = false, $disable_cd_check = false)
|
||||
echo '<html dir="' . $user->lang['DIRECTION'] . '" lang="' . $user->lang['USER_LANG'] . '">';
|
||||
echo '<head>';
|
||||
echo '<meta charset="utf-8">';
|
||||
echo '<meta http-equiv="X-UA-Compatible" content="IE=edge">';
|
||||
echo '<meta http-equiv="refresh" content="0; url=' . str_replace('&', '&', $url) . '" />';
|
||||
echo '<title>' . $user->lang['REDIRECT'] . '</title>';
|
||||
echo '</head>';
|
||||
@@ -2602,8 +2609,9 @@ function check_link_hash($token, $link_name)
|
||||
/**
|
||||
* Add a secret token to the form (requires the S_FORM_TOKEN template variable)
|
||||
* @param string $form_name The name of the form; has to match the name used in check_form_key, otherwise no restrictions apply
|
||||
* @param string $template_variable_suffix A string that is appended to the name of the template variable to which the form elements are assigned
|
||||
*/
|
||||
function add_form_key($form_name)
|
||||
function add_form_key($form_name, $template_variable_suffix = '')
|
||||
{
|
||||
global $config, $template, $user, $phpbb_dispatcher;
|
||||
|
||||
@@ -2620,13 +2628,15 @@ function add_form_key($form_name)
|
||||
* Perform additional actions on creation of the form token
|
||||
*
|
||||
* @event core.add_form_key
|
||||
* @var string form_name The form name
|
||||
* @var int now Current time timestamp
|
||||
* @var string s_fields Generated hidden fields
|
||||
* @var string token Form token
|
||||
* @var string token_sid User session ID
|
||||
* @var string form_name The form name
|
||||
* @var int now Current time timestamp
|
||||
* @var string s_fields Generated hidden fields
|
||||
* @var string token Form token
|
||||
* @var string token_sid User session ID
|
||||
* @var string template_variable_suffix The string that is appended to template variable name
|
||||
*
|
||||
* @since 3.1.0-RC3
|
||||
* @changed 3.1.11-RC1 Added template_variable_suffix
|
||||
*/
|
||||
$vars = array(
|
||||
'form_name',
|
||||
@@ -2634,12 +2644,11 @@ function add_form_key($form_name)
|
||||
's_fields',
|
||||
'token',
|
||||
'token_sid',
|
||||
'template_variable_suffix',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.add_form_key', compact($vars)));
|
||||
|
||||
$template->assign_vars(array(
|
||||
'S_FORM_TOKEN' => $s_fields,
|
||||
));
|
||||
$template->assign_var('S_FORM_TOKEN' . $template_variable_suffix, $s_fields);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2767,7 +2776,7 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo
|
||||
$u_action .= ((strpos($u_action, '?') === false) ? '?' : '&') . 'confirm_key=' . $confirm_key;
|
||||
|
||||
$template->assign_vars(array(
|
||||
'MESSAGE_TITLE' => (!isset($user->lang[$title])) ? $user->lang['CONFIRM'] : $user->lang[$title],
|
||||
'MESSAGE_TITLE' => (!isset($user->lang[$title])) ? $user->lang['CONFIRM'] : $user->lang($title, 1),
|
||||
'MESSAGE_TEXT' => (!isset($user->lang[$title . '_CONFIRM'])) ? $title : $user->lang[$title . '_CONFIRM'],
|
||||
|
||||
'YES_VALUE' => $user->lang['YES'],
|
||||
@@ -2821,6 +2830,21 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
|
||||
$user->setup();
|
||||
}
|
||||
|
||||
/**
|
||||
* This event allows an extension to modify the login process
|
||||
*
|
||||
* @event core.login_box_before
|
||||
* @var string redirect Redirect string
|
||||
* @var string l_explain Explain language string
|
||||
* @var string l_success Success language string
|
||||
* @var bool admin Is admin?
|
||||
* @var bool s_display Display full login form?
|
||||
* @var string err Error string
|
||||
* @since 3.1.9-RC1
|
||||
*/
|
||||
$vars = array('redirect', 'l_explain', 'l_success', 'admin', 's_display', 'err');
|
||||
extract($phpbb_dispatcher->trigger_event('core.login_box_before', compact($vars)));
|
||||
|
||||
// Print out error if user tries to authenticate as an administrator without having the privileges...
|
||||
if ($admin && !$auth->acl_get('a_'))
|
||||
{
|
||||
@@ -2833,7 +2857,7 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
|
||||
trigger_error('NO_AUTH_ADMIN');
|
||||
}
|
||||
|
||||
if ($request->is_set_post('login') || ($request->is_set('login') && $request->variable('login', '') == 'external'))
|
||||
if (empty($err) && ($request->is_set_post('login') || ($request->is_set('login') && $request->variable('login', '') == 'external')))
|
||||
{
|
||||
// Get credential
|
||||
if ($admin)
|
||||
@@ -2902,11 +2926,11 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
|
||||
*
|
||||
* @event core.login_box_redirect
|
||||
* @var string redirect Redirect string
|
||||
* @var boolean admin Is admin?
|
||||
* @var bool return If true, do not redirect but return the sanitized URL.
|
||||
* @var bool admin Is admin?
|
||||
* @since 3.1.0-RC5
|
||||
* @changed 3.1.9-RC1 Removed undefined return variable
|
||||
*/
|
||||
$vars = array('redirect', 'admin', 'return');
|
||||
$vars = array('redirect', 'admin');
|
||||
extract($phpbb_dispatcher->trigger_event('core.login_box_redirect', compact($vars)));
|
||||
|
||||
// append/replace SID (may change during the session for AOL users)
|
||||
@@ -3982,6 +4006,7 @@ function msg_handler($errno, $msg_text, $errfile, $errline)
|
||||
echo '<html dir="ltr">';
|
||||
echo '<head>';
|
||||
echo '<meta charset="utf-8">';
|
||||
echo '<meta http-equiv="X-UA-Compatible" content="IE=edge">';
|
||||
echo '<title>' . $msg_title . '</title>';
|
||||
echo '<style type="text/css">' . "\n" . '/* <![CDATA[ */' . "\n";
|
||||
echo '* { margin: 0; padding: 0; } html { font-size: 100%; height: 100%; margin-bottom: 1px; background-color: #E4EDF0; } body { font-family: "Lucida Grande", Verdana, Helvetica, Arial, sans-serif; color: #536482; background: #E4EDF0; font-size: 62.5%; margin: 0; } ';
|
||||
@@ -4283,7 +4308,7 @@ function obtain_users_online_string($online_users, $item_id = 0, $item = 'forum'
|
||||
* @var string item Restrict online users to a certain
|
||||
* session item, e.g. forum for
|
||||
* session_forum_id
|
||||
* @var string sql_ary SQL query to obtain users online data
|
||||
* @var array sql_ary SQL query array to obtain users online data
|
||||
* @since 3.1.4-RC1
|
||||
* @changed 3.1.7-RC1 Change sql query into array and adjust var accordingly. Allows extension authors the ability to adjust the sql_ary.
|
||||
*/
|
||||
@@ -4311,6 +4336,30 @@ function obtain_users_online_string($online_users, $item_id = 0, $item = 'forum'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Modify online userlist data
|
||||
*
|
||||
* @event core.obtain_users_online_string_before_modify
|
||||
* @var array online_users Array with online users data
|
||||
* from obtain_users_online()
|
||||
* @var int item_id Restrict online users to item id
|
||||
* @var string item Restrict online users to a certain
|
||||
* session item, e.g. forum for
|
||||
* session_forum_id
|
||||
* @var array rowset Array with online users data
|
||||
* @var array user_online_link Array with online users items (usernames)
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'online_users',
|
||||
'item_id',
|
||||
'item',
|
||||
'rowset',
|
||||
'user_online_link',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.obtain_users_online_string_before_modify', compact($vars)));
|
||||
|
||||
$online_userlist = implode(', ', $user_online_link);
|
||||
|
||||
if (!$online_userlist)
|
||||
@@ -4909,7 +4958,7 @@ function phpbb_get_avatar($row, $alt, $ignore_config = false, $lazy = false)
|
||||
/**
|
||||
* Generate page header
|
||||
*/
|
||||
function page_header($page_title = '', $display_online_list = false, $item_id = 0, $item = 'forum')
|
||||
function page_header($page_title = '', $display_online_list = false, $item_id = 0, $item = 'forum', $send_headers = true)
|
||||
{
|
||||
global $db, $config, $template, $SID, $_SID, $_EXTRA_URL, $user, $auth, $phpEx, $phpbb_root_path;
|
||||
global $phpbb_dispatcher, $request, $phpbb_container, $phpbb_admin_path;
|
||||
@@ -4969,6 +5018,8 @@ function page_header($page_title = '', $display_online_list = false, $item_id =
|
||||
}
|
||||
}
|
||||
|
||||
$user->update_session_infos();
|
||||
|
||||
// Generate logged in/logged out status
|
||||
if ($user->data['user_id'] != ANONYMOUS)
|
||||
{
|
||||
@@ -5247,17 +5298,22 @@ function page_header($page_title = '', $display_online_list = false, $item_id =
|
||||
'SITE_LOGO_IMG' => $user->img('site_logo'),
|
||||
));
|
||||
|
||||
// An array of http headers that phpbb will set. The following event may override these.
|
||||
$http_headers = array(
|
||||
// application/xhtml+xml not used because of IE
|
||||
'Content-type' => 'text/html; charset=UTF-8',
|
||||
'Cache-Control' => 'private, no-cache="set-cookie"',
|
||||
'Expires' => gmdate('D, d M Y H:i:s', time()) . ' GMT',
|
||||
);
|
||||
if (!empty($user->data['is_bot']))
|
||||
$http_headers = array();
|
||||
|
||||
if ($send_headers)
|
||||
{
|
||||
// Let reverse proxies know we detected a bot.
|
||||
$http_headers['X-PHPBB-IS-BOT'] = 'yes';
|
||||
// An array of http headers that phpbb will set. The following event may override these.
|
||||
$http_headers += array(
|
||||
// application/xhtml+xml not used because of IE
|
||||
'Content-type' => 'text/html; charset=UTF-8',
|
||||
'Cache-Control' => 'private, no-cache="set-cookie"',
|
||||
'Expires' => gmdate('D, d M Y H:i:s', time()) . ' GMT',
|
||||
);
|
||||
if (!empty($user->data['is_bot']))
|
||||
{
|
||||
// Let reverse proxies know we detected a bot.
|
||||
$http_headers['X-PHPBB-IS-BOT'] = 'yes';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -5395,8 +5451,6 @@ function page_footer($run_cron = true, $display_template = true, $exit_handler =
|
||||
return;
|
||||
}
|
||||
|
||||
$user->update_session_infos();
|
||||
|
||||
phpbb_check_and_display_sql_report($request, $auth, $db);
|
||||
|
||||
$template->assign_vars(array(
|
||||
|
@@ -55,6 +55,8 @@ function adm_page_header($page_title)
|
||||
return;
|
||||
}
|
||||
|
||||
$user->update_session_infos();
|
||||
|
||||
// gzip_compression
|
||||
if ($config['gzip_compress'])
|
||||
{
|
||||
@@ -164,8 +166,6 @@ function adm_page_footer($copyright_html = true)
|
||||
return;
|
||||
}
|
||||
|
||||
$user->update_session_infos();
|
||||
|
||||
phpbb_check_and_display_sql_report($request, $auth, $db);
|
||||
|
||||
$template->assign_vars(array(
|
||||
@@ -256,46 +256,49 @@ function build_cfg_template($tpl_type, $key, &$new, $config_key, $vars)
|
||||
case 'text':
|
||||
case 'url':
|
||||
case 'email':
|
||||
case 'color':
|
||||
case 'date':
|
||||
case 'time':
|
||||
case 'datetime':
|
||||
case 'datetime-local':
|
||||
case 'month':
|
||||
case 'range':
|
||||
case 'search':
|
||||
case 'tel':
|
||||
case 'week':
|
||||
case 'search':
|
||||
// maxlength and size are only valid for these types and will be
|
||||
// ignored for other input types.
|
||||
$size = (int) $tpl_type[1];
|
||||
$maxlength = (int) $tpl_type[2];
|
||||
|
||||
$tpl = '<input id="' . $key . '" type="' . $tpl_type[0] . '"' . (($size) ? ' size="' . $size . '"' : '') . ' maxlength="' . (($maxlength) ? $maxlength : 255) . '" name="' . $name . '" value="' . $new[$config_key] . '"' . (($tpl_type[0] === 'password') ? ' autocomplete="off"' : '') . ' />';
|
||||
break;
|
||||
|
||||
case 'color':
|
||||
case 'datetime':
|
||||
case 'datetime-local':
|
||||
case 'month':
|
||||
case 'week':
|
||||
$tpl = '<input id="' . $key . '" type="' . $tpl_type[0] . '" name="' . $name . '" value="' . $new[$config_key] . '" />';
|
||||
break;
|
||||
|
||||
case 'date':
|
||||
case 'time':
|
||||
case 'number':
|
||||
$min = $max = $maxlength = '';
|
||||
case 'range':
|
||||
$max = '';
|
||||
$min = ( isset($tpl_type[1]) ) ? (int) $tpl_type[1] : false;
|
||||
if ( isset($tpl_type[2]) )
|
||||
{
|
||||
$max = (int) $tpl_type[2];
|
||||
$maxlength = strlen( (string) $max );
|
||||
}
|
||||
|
||||
$tpl = '<input id="' . $key . '" type="number" maxlength="' . (( $maxlength != '' ) ? $maxlength : 255) . '"' . (( $min != '' ) ? ' min="' . $min . '"' : '') . (( $max != '' ) ? ' max="' . $max . '"' : '') . ' name="' . $name . '" value="' . $new[$config_key] . '" />';
|
||||
$tpl = '<input id="' . $key . '" type="' . $tpl_type[0] . '"' . (( $min != '' ) ? ' min="' . $min . '"' : '') . (( $max != '' ) ? ' max="' . $max . '"' : '') . ' name="' . $name . '" value="' . $new[$config_key] . '" />';
|
||||
break;
|
||||
|
||||
case 'dimension':
|
||||
$min = $max = $maxlength = $size = '';
|
||||
$max = '';
|
||||
|
||||
$min = (int) $tpl_type[1];
|
||||
|
||||
if ( isset($tpl_type[2]) )
|
||||
{
|
||||
$max = (int) $tpl_type[2];
|
||||
$size = $maxlength = strlen( (string) $max );
|
||||
}
|
||||
|
||||
$tpl = '<input id="' . $key . '" type="number"' . (( $size != '' ) ? ' size="' . $size . '"' : '') . ' maxlength="' . (($maxlength != '') ? $maxlength : 255) . '"' . (( $min !== '' ) ? ' min="' . $min . '"' : '') . (( $max != '' ) ? ' max="' . $max . '"' : '') . ' name="config[' . $config_key . '_width]" value="' . $new[$config_key . '_width'] . '" /> x <input type="number"' . (( $size != '' ) ? ' size="' . $size . '"' : '') . ' maxlength="' . (($maxlength != '') ? $maxlength : 255) . '"' . (( $min !== '' ) ? ' min="' . $min . '"' : '') . (( $max != '' ) ? ' max="' . $max . '"' : '') . ' name="config[' . $config_key . '_height]" value="' . $new[$config_key . '_height'] . '" />';
|
||||
$tpl = '<input id="' . $key . '" type="number"' . (( $min !== '' ) ? ' min="' . $min . '"' : '') . (( $max != '' ) ? ' max="' . $max . '"' : '') . ' name="config[' . $config_key . '_width]" value="' . $new[$config_key . '_width'] . '" /> x <input type="number"' . (( $min !== '' ) ? ' min="' . $min . '"' : '') . (( $max != '' ) ? ' max="' . $max . '"' : '') . ' name="config[' . $config_key . '_height]" value="' . $new[$config_key . '_height'] . '" />';
|
||||
break;
|
||||
|
||||
case 'textarea':
|
||||
|
@@ -65,7 +65,7 @@ function recalc_nested_sets(&$new_id, $pkey, $table, $parent_id = 0, $where = ar
|
||||
*/
|
||||
function make_forum_select($select_id = false, $ignore_id = false, $ignore_acl = false, $ignore_nonpost = false, $ignore_emptycat = true, $only_acl_post = false, $return_array = false)
|
||||
{
|
||||
global $db, $user, $auth;
|
||||
global $db, $user, $auth, $phpbb_dispatcher;
|
||||
|
||||
// This query is identical to the jumpbox one
|
||||
$sql = 'SELECT forum_id, forum_name, parent_id, forum_type, forum_flags, forum_options, left_id, right_id
|
||||
@@ -73,16 +73,33 @@ function make_forum_select($select_id = false, $ignore_id = false, $ignore_acl =
|
||||
ORDER BY left_id ASC';
|
||||
$result = $db->sql_query($sql, 600);
|
||||
|
||||
$rowset = array();
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$rowset[(int) $row['forum_id']] = $row;
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
$right = 0;
|
||||
$padding_store = array('0' => '');
|
||||
$padding = '';
|
||||
$forum_list = ($return_array) ? array() : '';
|
||||
|
||||
/**
|
||||
* Modify the forum list data
|
||||
*
|
||||
* @event core.make_forum_select_modify_forum_list
|
||||
* @var array rowset Array with the forums list data
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array('rowset');
|
||||
extract($phpbb_dispatcher->trigger_event('core.make_forum_select_modify_forum_list', compact($vars)));
|
||||
|
||||
// Sometimes it could happen that forums will be displayed here not be displayed within the index page
|
||||
// This is the result of forums not displayed at index, having list permissions and a parent of a forum with no permissions.
|
||||
// If this happens, the padding could be "broken"
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
foreach ($rowset as $row)
|
||||
{
|
||||
if ($row['left_id'] < $right)
|
||||
{
|
||||
@@ -133,8 +150,7 @@ function make_forum_select($select_id = false, $ignore_id = false, $ignore_acl =
|
||||
$forum_list .= '<option value="' . $row['forum_id'] . '"' . (($disabled) ? ' disabled="disabled" class="disabled-option"' : $selected) . '>' . $padding . $row['forum_name'] . '</option>';
|
||||
}
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
unset($padding_store);
|
||||
unset($padding_store, $rowset);
|
||||
|
||||
return $forum_list;
|
||||
}
|
||||
@@ -201,7 +217,7 @@ function group_select_options($group_id, $exclude_ids = false, $manage_founder =
|
||||
*/
|
||||
function get_forum_list($acl_list = 'f_list', $id_only = true, $postable_only = false, $no_cache = false)
|
||||
{
|
||||
global $db, $auth;
|
||||
global $db, $auth, $phpbb_dispatcher;
|
||||
static $forum_rows;
|
||||
|
||||
if (!isset($forum_rows))
|
||||
@@ -256,6 +272,16 @@ function get_forum_list($acl_list = 'f_list', $id_only = true, $postable_only =
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Modify the forum list data
|
||||
*
|
||||
* @event core.get_forum_list_modify_data
|
||||
* @var array rowset Array with the forum list data
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array('rowset');
|
||||
extract($phpbb_dispatcher->trigger_event('core.get_forum_list_modify_data', compact($vars)));
|
||||
|
||||
return $rowset;
|
||||
}
|
||||
|
||||
@@ -615,8 +641,8 @@ function move_posts($post_ids, $topic_id, $auto_sync = true)
|
||||
*
|
||||
* @event core.move_posts_before
|
||||
* @var array post_ids Array of post ids to move
|
||||
* @var string topic_id The topic id the posts are moved to
|
||||
* @var bool auto_sync Whether or not to perform auto sync
|
||||
* @var int topic_id The topic id the posts are moved to
|
||||
* @var bool auto_sync Whether or not to perform auto sync
|
||||
* @var array forum_ids Array of the forum ids the posts are moved from
|
||||
* @var array topic_ids Array of the topic ids the posts are moved from
|
||||
* @var array forum_row Array with the forum id of the topic the posts are moved to
|
||||
@@ -647,8 +673,8 @@ function move_posts($post_ids, $topic_id, $auto_sync = true)
|
||||
*
|
||||
* @event core.move_posts_after
|
||||
* @var array post_ids Array of the moved post ids
|
||||
* @var string topic_id The topic id the posts are moved to
|
||||
* @var bool auto_sync Whether or not to perform auto sync
|
||||
* @var int topic_id The topic id the posts are moved to
|
||||
* @var bool auto_sync Whether or not to perform auto sync
|
||||
* @var array forum_ids Array of the forum ids the posts are moved from
|
||||
* @var array topic_ids Array of the topic ids the posts are moved from
|
||||
* @var array forum_row Array with the forum id of the topic the posts are moved to
|
||||
@@ -672,6 +698,28 @@ function move_posts($post_ids, $topic_id, $auto_sync = true)
|
||||
sync('topic_attachment', 'topic_id', $topic_ids);
|
||||
sync('topic', 'topic_id', $topic_ids, true);
|
||||
sync('forum', 'forum_id', $forum_ids, true, true);
|
||||
|
||||
/**
|
||||
* Perform additional actions after move post sync
|
||||
*
|
||||
* @event core.move_posts_sync_after
|
||||
* @var array post_ids Array of the moved post ids
|
||||
* @var int topic_id The topic id the posts are moved to
|
||||
* @var bool auto_sync Whether or not to perform auto sync
|
||||
* @var array forum_ids Array of the forum ids the posts are moved from
|
||||
* @var array topic_ids Array of the topic ids the posts are moved from
|
||||
* @var array forum_row Array with the forum id of the topic the posts are moved to
|
||||
* @since 3.1.11-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'post_ids',
|
||||
'topic_id',
|
||||
'auto_sync',
|
||||
'forum_ids',
|
||||
'topic_ids',
|
||||
'forum_row',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.move_posts_sync_after', compact($vars)));
|
||||
}
|
||||
|
||||
// Update posted information
|
||||
@@ -2531,7 +2579,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
|
||||
/**
|
||||
* Prune function
|
||||
*/
|
||||
function prune($forum_id, $prune_mode, $prune_date, $prune_flags = 0, $auto_sync = true)
|
||||
function prune($forum_id, $prune_mode, $prune_date, $prune_flags = 0, $auto_sync = true, $prune_limit = 0)
|
||||
{
|
||||
global $db, $phpbb_dispatcher;
|
||||
|
||||
@@ -2583,9 +2631,19 @@ function prune($forum_id, $prune_mode, $prune_date, $prune_flags = 0, $auto_sync
|
||||
* @var int prune_flags The prune flags
|
||||
* @var bool auto_sync Whether or not to perform auto sync
|
||||
* @var string sql_and SQL text appended to where clause
|
||||
* @var int prune_limit The prune limit
|
||||
* @since 3.1.3-RC1
|
||||
* @changed 3.1.10-RC1 Added prune_limit
|
||||
*/
|
||||
$vars = array('forum_id', 'prune_mode', 'prune_date', 'prune_flags', 'auto_sync', 'sql_and');
|
||||
$vars = array(
|
||||
'forum_id',
|
||||
'prune_mode',
|
||||
'prune_date',
|
||||
'prune_flags',
|
||||
'auto_sync',
|
||||
'sql_and',
|
||||
'prune_limit',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.prune_sql', compact($vars)));
|
||||
|
||||
$sql = 'SELECT topic_id
|
||||
@@ -2593,7 +2651,7 @@ function prune($forum_id, $prune_mode, $prune_date, $prune_flags = 0, $auto_sync
|
||||
WHERE ' . $db->sql_in_set('forum_id', $forum_id) . "
|
||||
AND poll_start = 0
|
||||
$sql_and";
|
||||
$result = $db->sql_query($sql);
|
||||
$result = $db->sql_query_limit($sql, $prune_limit);
|
||||
|
||||
$topic_list = array();
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
@@ -2610,7 +2668,7 @@ function prune($forum_id, $prune_mode, $prune_date, $prune_flags = 0, $auto_sync
|
||||
AND poll_start > 0
|
||||
AND poll_last_vote < $prune_date
|
||||
$sql_and";
|
||||
$result = $db->sql_query($sql);
|
||||
$result = $db->sql_query_limit($sql, $prune_limit);
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
@@ -2643,12 +2701,15 @@ function auto_prune($forum_id, $prune_mode, $prune_flags, $prune_days, $prune_fr
|
||||
$prune_date = time() - ($prune_days * 86400);
|
||||
$next_prune = time() + ($prune_freq * 86400);
|
||||
|
||||
prune($forum_id, $prune_mode, $prune_date, $prune_flags, true);
|
||||
$result = prune($forum_id, $prune_mode, $prune_date, $prune_flags, true, 300);
|
||||
|
||||
$sql = 'UPDATE ' . FORUMS_TABLE . "
|
||||
SET prune_next = $next_prune
|
||||
WHERE forum_id = $forum_id";
|
||||
$db->sql_query($sql);
|
||||
if ($result['topics'] == 0 && $result['posts'] == 0)
|
||||
{
|
||||
$sql = 'UPDATE ' . FORUMS_TABLE . "
|
||||
SET prune_next = $next_prune
|
||||
WHERE forum_id = $forum_id";
|
||||
$db->sql_query($sql);
|
||||
}
|
||||
|
||||
add_log('admin', 'LOG_AUTO_PRUNE', $row['forum_name']);
|
||||
}
|
||||
@@ -3101,9 +3162,9 @@ function get_database_size()
|
||||
{
|
||||
$version = $row['mysql_version'];
|
||||
|
||||
if (preg_match('#(3\.23|[45]\.)#', $version))
|
||||
if (preg_match('#(3\.23|[45]\.|10\.[0-9]\.[0-9]{1,2}-+Maria)#', $version))
|
||||
{
|
||||
$db_name = (preg_match('#^(?:3\.23\.(?:[6-9]|[1-9]{2}))|[45]\.#', $version)) ? "`{$db->get_db_name()}`" : $db->get_db_name();
|
||||
$db_name = (preg_match('#^(?:3\.23\.(?:[6-9]|[1-9]{2}))|[45]\.|10\.[0-9]\.[0-9]{1,2}-+Maria#', $version)) ? "`{$db->get_db_name()}`" : $db->get_db_name();
|
||||
|
||||
$sql = 'SHOW TABLE STATUS
|
||||
FROM ' . $db_name;
|
||||
@@ -3112,7 +3173,7 @@ function get_database_size()
|
||||
$database_size = 0;
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
if ((isset($row['Type']) && $row['Type'] != 'MRG_MyISAM') || (isset($row['Engine']) && ($row['Engine'] == 'MyISAM' || $row['Engine'] == 'InnoDB')))
|
||||
if ((isset($row['Type']) && $row['Type'] != 'MRG_MyISAM') || (isset($row['Engine']) && ($row['Engine'] == 'MyISAM' || $row['Engine'] == 'InnoDB' || $row['Engine'] == 'Aria')))
|
||||
{
|
||||
if ($table_prefix != '')
|
||||
{
|
||||
@@ -3320,18 +3381,47 @@ function tidy_database()
|
||||
*/
|
||||
function add_permission_language()
|
||||
{
|
||||
global $user, $phpEx, $phpbb_extension_manager;
|
||||
global $config, $user, $phpEx, $phpbb_extension_manager;
|
||||
|
||||
// add permission language files from extensions
|
||||
$finder = $phpbb_extension_manager->get_finder();
|
||||
|
||||
$lang_files = $finder
|
||||
// We grab the language files from the default, English and user's language.
|
||||
// So we can fall back to the other files like we do when using add_lang()
|
||||
$default_lang_files = $english_lang_files = $user_lang_files = array();
|
||||
|
||||
// Search for board default language if it's not the user language
|
||||
if ($config['default_lang'] != $user->lang_name)
|
||||
{
|
||||
$default_lang_files = $finder
|
||||
->prefix('permissions_')
|
||||
->suffix(".$phpEx")
|
||||
->core_path('language/' . basename($config['default_lang']) . '/')
|
||||
->extension_directory('/language/' . basename($config['default_lang']))
|
||||
->find();
|
||||
}
|
||||
|
||||
// Search for english, if its not the default or user language
|
||||
if ($config['default_lang'] != 'en' && $user->lang_name != 'en')
|
||||
{
|
||||
$english_lang_files = $finder
|
||||
->prefix('permissions_')
|
||||
->suffix(".$phpEx")
|
||||
->core_path('language/en/')
|
||||
->extension_directory('/language/en')
|
||||
->find();
|
||||
}
|
||||
|
||||
// Find files in the user's language
|
||||
$user_lang_files = $finder
|
||||
->prefix('permissions_')
|
||||
->suffix(".$phpEx")
|
||||
->core_path('language/' . $user->lang_name . '/')
|
||||
->extension_directory('/language/' . $user->lang_name)
|
||||
->find();
|
||||
|
||||
$lang_files = array_merge($english_lang_files, $default_lang_files, $user_lang_files);
|
||||
|
||||
foreach ($lang_files as $lang_file => $ext_name)
|
||||
{
|
||||
if ($ext_name === '/')
|
||||
|
@@ -47,7 +47,7 @@ if (!defined('IN_PHPBB'))
|
||||
*/
|
||||
function gen_sort_selects(&$limit_days, &$sort_by_text, &$sort_days, &$sort_key, &$sort_dir, &$s_limit_days, &$s_sort_key, &$s_sort_dir, &$u_sort_param, $def_st = false, $def_sk = false, $def_sd = false)
|
||||
{
|
||||
global $user;
|
||||
global $user, $phpbb_dispatcher;
|
||||
|
||||
$sort_dir_text = array('a' => $user->lang['ASCENDING'], 'd' => $user->lang['DESCENDING']);
|
||||
|
||||
@@ -106,6 +106,42 @@ function gen_sort_selects(&$limit_days, &$sort_by_text, &$sort_days, &$sort_key,
|
||||
$u_sort_param .= ($selected !== $sort_ary['default']) ? ((strlen($u_sort_param)) ? '&' : '') . "{$name}={$selected}" : '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Run code before generated sort selects are returned
|
||||
*
|
||||
* @event core.gen_sort_selects_after
|
||||
* @var int limit_days Days limit
|
||||
* @var array sort_by_text Sort by text options
|
||||
* @var int sort_days Sort by days flag
|
||||
* @var string sort_key Sort key
|
||||
* @var string sort_dir Sort dir
|
||||
* @var string s_limit_days String of days limit
|
||||
* @var string s_sort_key String of sort key
|
||||
* @var string s_sort_dir String of sort dir
|
||||
* @var string u_sort_param Sort URL params
|
||||
* @var bool def_st Default sort days
|
||||
* @var bool def_sk Default sort key
|
||||
* @var bool def_sd Default sort dir
|
||||
* @var array sorts Sorts
|
||||
* @since 3.1.9-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'limit_days',
|
||||
'sort_by_text',
|
||||
'sort_days',
|
||||
'sort_key',
|
||||
'sort_dir',
|
||||
's_limit_days',
|
||||
's_sort_key',
|
||||
's_sort_dir',
|
||||
'u_sort_param',
|
||||
'def_st',
|
||||
'def_sk',
|
||||
'def_sd',
|
||||
'sorts',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.gen_sort_selects_after', compact($vars)));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -114,7 +150,7 @@ function gen_sort_selects(&$limit_days, &$sort_by_text, &$sort_days, &$sort_key,
|
||||
*/
|
||||
function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list = false, $force_display = false)
|
||||
{
|
||||
global $config, $auth, $template, $user, $db, $phpbb_path_helper;
|
||||
global $config, $auth, $template, $user, $db, $phpbb_path_helper, $phpbb_dispatcher;
|
||||
|
||||
// We only return if the jumpbox is not forced to be displayed (in case it is needed for functionality)
|
||||
if (!$config['load_jumpbox'] && $force_display === false)
|
||||
@@ -127,16 +163,33 @@ function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list
|
||||
ORDER BY left_id ASC';
|
||||
$result = $db->sql_query($sql, 600);
|
||||
|
||||
$rowset = array();
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$rowset[(int) $row['forum_id']] = $row;
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
$right = $padding = 0;
|
||||
$padding_store = array('0' => 0);
|
||||
$display_jumpbox = false;
|
||||
$iteration = 0;
|
||||
|
||||
/**
|
||||
* Modify the jumpbox forum list data
|
||||
*
|
||||
* @event core.make_jumpbox_modify_forum_list
|
||||
* @var array rowset Array with the forums list data
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array('rowset');
|
||||
extract($phpbb_dispatcher->trigger_event('core.make_jumpbox_modify_forum_list', compact($vars)));
|
||||
|
||||
// Sometimes it could happen that forums will be displayed here not be displayed within the index page
|
||||
// This is the result of forums not displayed at index, having list permissions and a parent of a forum with no permissions.
|
||||
// If this happens, the padding could be "broken"
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
foreach ($rowset as $row)
|
||||
{
|
||||
if ($row['left_id'] < $right)
|
||||
{
|
||||
@@ -169,20 +222,21 @@ function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list
|
||||
continue;
|
||||
}
|
||||
|
||||
$tpl_ary = array();
|
||||
if (!$display_jumpbox)
|
||||
{
|
||||
$template->assign_block_vars('jumpbox_forums', array(
|
||||
$tpl_ary[] = array(
|
||||
'FORUM_ID' => ($select_all) ? 0 : -1,
|
||||
'FORUM_NAME' => ($select_all) ? $user->lang['ALL_FORUMS'] : $user->lang['SELECT_FORUM'],
|
||||
'S_FORUM_COUNT' => $iteration,
|
||||
'LINK' => $phpbb_path_helper->append_url_params($action, array('f' => $forum_id)),
|
||||
));
|
||||
);
|
||||
|
||||
$iteration++;
|
||||
$display_jumpbox = true;
|
||||
}
|
||||
|
||||
$template->assign_block_vars('jumpbox_forums', array(
|
||||
$tpl_ary[] = array(
|
||||
'FORUM_ID' => $row['forum_id'],
|
||||
'FORUM_NAME' => $row['forum_name'],
|
||||
'SELECTED' => ($row['forum_id'] == $forum_id) ? ' selected="selected"' : '',
|
||||
@@ -191,7 +245,25 @@ function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list
|
||||
'S_IS_LINK' => ($row['forum_type'] == FORUM_LINK) ? true : false,
|
||||
'S_IS_POST' => ($row['forum_type'] == FORUM_POST) ? true : false,
|
||||
'LINK' => $phpbb_path_helper->append_url_params($action, array('f' => $row['forum_id'])),
|
||||
));
|
||||
);
|
||||
|
||||
/**
|
||||
* Modify the jumpbox before it is assigned to the template
|
||||
*
|
||||
* @event core.make_jumpbox_modify_tpl_ary
|
||||
* @var array row The data of the forum
|
||||
* @var array tpl_ary Template data of the forum
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'row',
|
||||
'tpl_ary',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.make_jumpbox_modify_tpl_ary', compact($vars)));
|
||||
|
||||
$template->assign_block_vars_array('jumpbox_forums', $tpl_ary);
|
||||
|
||||
unset($tpl_ary);
|
||||
|
||||
for ($i = 0; $i < $padding; $i++)
|
||||
{
|
||||
@@ -199,8 +271,7 @@ function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list
|
||||
}
|
||||
$iteration++;
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
unset($padding_store);
|
||||
unset($padding_store, $rowset);
|
||||
|
||||
$url_parts = $phpbb_path_helper->get_url_parts($action);
|
||||
|
||||
@@ -392,7 +463,7 @@ function phpbb_clean_search_string($search_string)
|
||||
*/
|
||||
function decode_message(&$message, $bbcode_uid = '')
|
||||
{
|
||||
global $config;
|
||||
global $config, $phpbb_dispatcher;
|
||||
|
||||
if ($bbcode_uid)
|
||||
{
|
||||
@@ -405,12 +476,38 @@ function decode_message(&$message, $bbcode_uid = '')
|
||||
$replace = array("\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* Use this event to modify the message before it is decoded
|
||||
*
|
||||
* @event core.decode_message_before
|
||||
* @var string message_text The message content
|
||||
* @var string bbcode_uid The message BBCode UID
|
||||
* @since 3.1.9-RC1
|
||||
*/
|
||||
$message_text = $message;
|
||||
$vars = array('message_text', 'bbcode_uid');
|
||||
extract($phpbb_dispatcher->trigger_event('core.decode_message_before', compact($vars)));
|
||||
$message = $message_text;
|
||||
|
||||
$message = str_replace($match, $replace, $message);
|
||||
|
||||
$match = get_preg_expression('bbcode_htm');
|
||||
$replace = array('\1', '\1', '\2', '\1', '', '');
|
||||
|
||||
$message = preg_replace($match, $replace, $message);
|
||||
|
||||
/**
|
||||
* Use this event to modify the message after it is decoded
|
||||
*
|
||||
* @event core.decode_message_after
|
||||
* @var string message_text The message content
|
||||
* @var string bbcode_uid The message BBCode UID
|
||||
* @since 3.1.9-RC1
|
||||
*/
|
||||
$message_text = $message;
|
||||
$vars = array('message_text', 'bbcode_uid');
|
||||
extract($phpbb_dispatcher->trigger_event('core.decode_message_after', compact($vars)));
|
||||
$message = $message_text;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -582,9 +679,11 @@ function generate_text_for_storage(&$text, &$uid, &$bitfield, &$flags, $allow_bb
|
||||
* @var string uid The BBCode UID
|
||||
* @var string bitfield The BBCode Bitfield
|
||||
* @var int flags The BBCode Flags
|
||||
* @var string message_parser The message_parser object
|
||||
* @since 3.1.0-a1
|
||||
* @changed 3.1.11-RC1 Added message_parser to vars
|
||||
*/
|
||||
$vars = array('text', 'uid', 'bitfield', 'flags');
|
||||
$vars = array('text', 'uid', 'bitfield', 'flags', 'message_parser');
|
||||
extract($phpbb_dispatcher->trigger_event('core.modify_text_for_storage_after', compact($vars)));
|
||||
|
||||
return $message_parser->warn_msg;
|
||||
@@ -883,7 +982,7 @@ function bbcode_nl2br($text)
|
||||
*/
|
||||
function smiley_text($text, $force_option = false)
|
||||
{
|
||||
global $config, $user, $phpbb_path_helper;
|
||||
global $config, $user, $phpbb_path_helper, $phpbb_dispatcher;
|
||||
|
||||
if ($force_option || !$config['allow_smilies'] || !$user->optionget('viewsmilies'))
|
||||
{
|
||||
@@ -892,6 +991,16 @@ function smiley_text($text, $force_option = false)
|
||||
else
|
||||
{
|
||||
$root_path = (defined('PHPBB_USE_BOARD_URL_PATH') && PHPBB_USE_BOARD_URL_PATH) ? generate_board_url() . '/' : $phpbb_path_helper->get_web_root_path();
|
||||
|
||||
/**
|
||||
* Event to override the root_path for smilies
|
||||
*
|
||||
* @event core.smiley_text_root_path
|
||||
* @var string root_path root_path for smilies
|
||||
* @since 3.1.11-RC1
|
||||
*/
|
||||
$vars = array('root_path');
|
||||
extract($phpbb_dispatcher->trigger_event('core.smiley_text_root_path', compact($vars)));
|
||||
return preg_replace('#<!\-\- s(.*?) \-\-><img src="\{SMILIES_PATH\}\/(.*?) \/><!\-\- s\1 \-\->#', '<img class="smilies" src="' . $root_path . $config['smilies_path'] . '/\2 />', $text);
|
||||
}
|
||||
}
|
||||
@@ -974,17 +1083,8 @@ function parse_attachments($forum_id, &$message, &$attachments, &$update_count,
|
||||
unset($new_attachment_data);
|
||||
}
|
||||
|
||||
// Sort correctly
|
||||
if ($config['display_order'])
|
||||
{
|
||||
// Ascending sort
|
||||
krsort($attachments);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Descending sort
|
||||
ksort($attachments);
|
||||
}
|
||||
// Make sure attachments are properly ordered
|
||||
ksort($attachments);
|
||||
|
||||
foreach ($attachments as $attachment)
|
||||
{
|
||||
@@ -1223,8 +1323,6 @@ function parse_attachments($forum_id, &$message, &$attachments, &$update_count,
|
||||
$attachments = $compiled_attachments;
|
||||
unset($compiled_attachments);
|
||||
|
||||
$tpl_size = sizeof($attachments);
|
||||
|
||||
$unset_tpl = array();
|
||||
|
||||
preg_match_all('#<!\-\- ia([0-9]+) \-\->(.*?)<!\-\- ia\1 \-\->#', $message, $matches, PREG_PATTERN_ORDER);
|
||||
@@ -1232,8 +1330,7 @@ function parse_attachments($forum_id, &$message, &$attachments, &$update_count,
|
||||
$replace = array();
|
||||
foreach ($matches[0] as $num => $capture)
|
||||
{
|
||||
// Flip index if we are displaying the reverse way
|
||||
$index = ($config['display_order']) ? ($tpl_size-($matches[1][$num] + 1)) : $matches[1][$num];
|
||||
$index = $matches[1][$num];
|
||||
|
||||
$replace['from'][] = $matches[0][$num];
|
||||
$replace['to'][] = (isset($attachments[$index])) ? $attachments[$index] : sprintf($user->lang['MISSING_INLINE_ATTACHMENT'], $matches[2][array_search($index, $matches[1])]);
|
||||
@@ -1248,6 +1345,18 @@ function parse_attachments($forum_id, &$message, &$attachments, &$update_count,
|
||||
|
||||
$unset_tpl = array_unique($unset_tpl);
|
||||
|
||||
// Sort correctly
|
||||
if ($config['display_order'])
|
||||
{
|
||||
// Ascending sort
|
||||
krsort($attachments);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Descending sort
|
||||
ksort($attachments);
|
||||
}
|
||||
|
||||
// Needed to let not display the inlined attachments at the end of the post again
|
||||
foreach ($unset_tpl as $index)
|
||||
{
|
||||
|
@@ -479,7 +479,7 @@ function import_avatar_gallery($gallery_name = '', $subdirs_as_galleries = false
|
||||
$dir->close();
|
||||
}
|
||||
|
||||
for ($i = 0; $i < sizeof($dirlist); ++$i)
|
||||
for ($i = 0, $end = sizeof($dirlist); $i < $end; ++$i)
|
||||
{
|
||||
$dir = $dirlist[$i];
|
||||
|
||||
@@ -1427,7 +1427,7 @@ function get_path($src_path, $src_url, $test_file)
|
||||
$path_array = array();
|
||||
|
||||
$phpbb_parts = explode('/', $script_path);
|
||||
for ($i = 0; $i < sizeof($url_parts); ++$i)
|
||||
for ($i = 0, $end = sizeof($url_parts); $i < $end; ++$i)
|
||||
{
|
||||
if ($i < sizeof($phpbb_parts[$i]) && $url_parts[$i] == $phpbb_parts[$i])
|
||||
{
|
||||
@@ -1437,7 +1437,7 @@ function get_path($src_path, $src_url, $test_file)
|
||||
else
|
||||
{
|
||||
$path = '';
|
||||
for ($j = $i; $j < sizeof($phpbb_parts); ++$j)
|
||||
for ($j = $i, $end2 = sizeof($phpbb_parts); $j < $end2; ++$j)
|
||||
{
|
||||
$path .= '../';
|
||||
}
|
||||
@@ -2269,7 +2269,7 @@ function convert_bbcode($message, $convert_size = true, $extended_bbcodes = fals
|
||||
"\n\n"
|
||||
);
|
||||
|
||||
for ($i = 0; $i < sizeof($str_from); ++$i)
|
||||
for ($i = 0, $end = sizeof($str_from); $i < $end; ++$i)
|
||||
{
|
||||
$origx[] = '#\\' . str_replace(']', '\\]', $str_from[$i]) . '#is';
|
||||
$replx[] = $str_to[$i];
|
||||
@@ -2278,7 +2278,7 @@ function convert_bbcode($message, $convert_size = true, $extended_bbcodes = fals
|
||||
|
||||
if (preg_match_all('#\[email=([^\]]+)\](.*?)\[/email\]#i', $message, $m))
|
||||
{
|
||||
for ($i = 0; $i < sizeof($m[1]); ++$i)
|
||||
for ($i = 0, $end = sizeof($m[1]); $i < $end; ++$i)
|
||||
{
|
||||
if ($m[1][$i] == $m[2][$i])
|
||||
{
|
||||
@@ -2339,7 +2339,7 @@ function copy_file($src, $trg, $overwrite = false, $die_on_failure = true, $sour
|
||||
$parts = explode('/', $trg);
|
||||
unset($parts[sizeof($parts) - 1]);
|
||||
|
||||
for ($i = 0; $i < sizeof($parts); ++$i)
|
||||
for ($i = 0, $end = sizeof($parts); $i < $end; ++$i)
|
||||
{
|
||||
$path .= $parts[$i] . '/';
|
||||
|
||||
@@ -2436,7 +2436,7 @@ function copy_dir($src, $trg, $copy_subdirs = true, $overwrite = false, $die_on_
|
||||
|
||||
if ($copy_subdirs)
|
||||
{
|
||||
for ($i = 0; $i < sizeof($dirlist); ++$i)
|
||||
for ($i = 0, $end = sizeof($dirlist); $i < $end; ++$i)
|
||||
{
|
||||
$dir = $dirlist[$i];
|
||||
|
||||
@@ -2471,7 +2471,7 @@ function copy_dir($src, $trg, $copy_subdirs = true, $overwrite = false, $die_on_
|
||||
$convert->p_master->error(sprintf($str, implode('<br />', $bad_dirs)), __LINE__, __FILE__);
|
||||
}
|
||||
|
||||
for ($i = 0; $i < sizeof($filelist); ++$i)
|
||||
for ($i = 0, $end = sizeof($filelist); $i < $end; ++$i)
|
||||
{
|
||||
copy_file($src . $filelist[$i], $trg . $filelist[$i], $overwrite, $die_on_failure, $source_relative_path);
|
||||
}
|
||||
|
@@ -646,7 +646,7 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod
|
||||
* @var array row The data of the forum
|
||||
* @var array subforums_row Template data of subforums
|
||||
* @since 3.1.0-a1
|
||||
* @change 3.1.0-b5 Added var subforums_row
|
||||
* @changed 3.1.0-b5 Added var subforums_row
|
||||
*/
|
||||
$vars = array('forum_row', 'row', 'subforums_row');
|
||||
extract($phpbb_dispatcher->trigger_event('core.display_forums_modify_template_vars', compact($vars)));
|
||||
@@ -1554,6 +1554,23 @@ function phpbb_get_user_rank($user_data, $user_posts)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Modify a user's rank before displaying
|
||||
*
|
||||
* @event core.get_user_rank_after
|
||||
* @var array user_data Array with user's data
|
||||
* @var int user_posts User_posts to change
|
||||
* @var array user_rank_data User rank data
|
||||
* @since 3.1.11-RC1
|
||||
*/
|
||||
|
||||
$vars = array(
|
||||
'user_data',
|
||||
'user_posts',
|
||||
'user_rank_data',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.get_user_rank_after', compact($vars)));
|
||||
|
||||
return $user_rank_data;
|
||||
}
|
||||
|
||||
|
@@ -108,6 +108,7 @@ function wrap_img_in_html($src, $title)
|
||||
echo '<html>';
|
||||
echo '<head>';
|
||||
echo '<meta charset="utf-8">';
|
||||
echo '<meta http-equiv="X-UA-Compatible" content="IE=edge">';
|
||||
echo '<title>' . $title . '</title>';
|
||||
echo '</head>';
|
||||
echo '<body>';
|
||||
@@ -123,7 +124,7 @@ function wrap_img_in_html($src, $title)
|
||||
*/
|
||||
function send_file_to_browser($attachment, $upload_dir, $category)
|
||||
{
|
||||
global $user, $db, $config, $phpbb_root_path;
|
||||
global $user, $db, $config, $phpbb_dispatcher, $phpbb_root_path;
|
||||
|
||||
$filename = $phpbb_root_path . $upload_dir . '/' . $attachment['physical_filename'];
|
||||
|
||||
@@ -148,6 +149,26 @@ function send_file_to_browser($attachment, $upload_dir, $category)
|
||||
// Now send the File Contents to the Browser
|
||||
$size = @filesize($filename);
|
||||
|
||||
/**
|
||||
* Event to alter attachment before it is sent to browser.
|
||||
*
|
||||
* @event core.send_file_to_browser_before
|
||||
* @var array attachment Attachment data
|
||||
* @var string upload_dir Relative path of upload directory
|
||||
* @var int category Attachment category
|
||||
* @var string filename Path to file, including filename
|
||||
* @var int size File size
|
||||
* @since 3.1.11-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'attachment',
|
||||
'upload_dir',
|
||||
'category',
|
||||
'filename',
|
||||
'size',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.send_file_to_browser_before', compact($vars)));
|
||||
|
||||
// To correctly display further errors we need to make sure we are using the correct headers for both (unsetting content-length may not work)
|
||||
|
||||
// Check if headers already sent or not able to get the file contents.
|
||||
@@ -165,7 +186,7 @@ function send_file_to_browser($attachment, $upload_dir, $category)
|
||||
}
|
||||
|
||||
// Make sure the database record for the filesize is correct
|
||||
if ($size > 0 && $size != $attachment['filesize'])
|
||||
if ($size > 0 && $size != $attachment['filesize'] && strpos($attachment['physical_filename'], 'thumb_') === false)
|
||||
{
|
||||
// Update database record
|
||||
$sql = 'UPDATE ' . ATTACHMENTS_TABLE . '
|
||||
@@ -283,7 +304,7 @@ function header_filename($file)
|
||||
|
||||
// There be dragons here.
|
||||
// Not many follows the RFC...
|
||||
if (strpos($user_agent, 'MSIE') !== false || strpos($user_agent, 'Safari') !== false || strpos($user_agent, 'Konqueror') !== false)
|
||||
if (strpos($user_agent, 'MSIE') !== false || strpos($user_agent, 'Konqueror') !== false)
|
||||
{
|
||||
return "filename=" . rawurlencode($file);
|
||||
}
|
||||
@@ -412,7 +433,7 @@ function set_modified_headers($stamp, $browser)
|
||||
global $request;
|
||||
|
||||
// let's see if we have to send the file at all
|
||||
$last_load = $request->header('Modified-Since') ? strtotime(trim($request->header('Modified-Since'))) : false;
|
||||
$last_load = $request->header('If-Modified-Since') ? strtotime(trim($request->header('If-Modified-Since'))) : false;
|
||||
|
||||
if (strpos(strtolower($browser), 'msie 6.0') === false && !phpbb_is_greater_ie_version($browser, 7))
|
||||
{
|
||||
@@ -676,6 +697,8 @@ function phpbb_download_handle_forum_auth($db, $auth, $topic_id)
|
||||
*/
|
||||
function phpbb_download_handle_pm_auth($db, $auth, $user_id, $msg_id)
|
||||
{
|
||||
global $phpbb_dispatcher;
|
||||
|
||||
if (!$auth->acl_get('u_pm_download'))
|
||||
{
|
||||
send_status_line(403, 'Forbidden');
|
||||
@@ -684,6 +707,18 @@ function phpbb_download_handle_pm_auth($db, $auth, $user_id, $msg_id)
|
||||
|
||||
$allowed = phpbb_download_check_pm_auth($db, $user_id, $msg_id);
|
||||
|
||||
/**
|
||||
* Event to modify PM attachments download auth
|
||||
*
|
||||
* @event core.modify_pm_attach_download_auth
|
||||
* @var bool allowed Whether the user is allowed to download from that PM or not
|
||||
* @var int msg_id The id of the PM to download from
|
||||
* @var int user_id The user id for auth check
|
||||
* @since 3.1.11-RC1
|
||||
*/
|
||||
$vars = array('allowed', 'msg_id', 'user_id');
|
||||
extract($phpbb_dispatcher->trigger_event('core.modify_pm_attach_download_auth', compact($vars)));
|
||||
|
||||
if (!$allowed)
|
||||
{
|
||||
send_status_line(403, 'Forbidden');
|
||||
|
@@ -41,6 +41,9 @@ class jabber
|
||||
var $username;
|
||||
var $password;
|
||||
var $use_ssl;
|
||||
var $verify_peer;
|
||||
var $verify_peer_name;
|
||||
var $allow_self_signed;
|
||||
var $resource = 'functions_jabber.phpbb.php';
|
||||
|
||||
var $enable_logging;
|
||||
@@ -49,8 +52,18 @@ class jabber
|
||||
var $features = array();
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param string $server Jabber server
|
||||
* @param int $port Jabber server port
|
||||
* @param string $username Jabber username or JID
|
||||
* @param string $password Jabber password
|
||||
* @param boold $use_ssl Use ssl
|
||||
* @param bool $verify_peer Verify SSL certificate
|
||||
* @param bool $verify_peer_name Verify Jabber peer name
|
||||
* @param bool $allow_self_signed Allow self signed certificates
|
||||
*/
|
||||
function jabber($server, $port, $username, $password, $use_ssl = false)
|
||||
function __construct($server, $port, $username, $password, $use_ssl = false, $verify_peer = true, $verify_peer_name = true, $allow_self_signed = false)
|
||||
{
|
||||
$this->connect_server = ($server) ? $server : 'localhost';
|
||||
$this->port = ($port) ? $port : 5222;
|
||||
@@ -71,6 +84,9 @@ class jabber
|
||||
|
||||
$this->password = $password;
|
||||
$this->use_ssl = ($use_ssl && self::can_use_ssl()) ? true : false;
|
||||
$this->verify_peer = $verify_peer;
|
||||
$this->verify_peer_name = $verify_peer_name;
|
||||
$this->allow_self_signed = $allow_self_signed;
|
||||
|
||||
// Change port if we use SSL
|
||||
if ($this->port == 5222 && $this->use_ssl)
|
||||
@@ -96,7 +112,7 @@ class jabber
|
||||
*/
|
||||
static public function can_use_tls()
|
||||
{
|
||||
if (!@extension_loaded('openssl') || !function_exists('stream_socket_enable_crypto') || !function_exists('stream_get_meta_data') || !function_exists('socket_set_blocking') || !function_exists('stream_get_wrappers'))
|
||||
if (!@extension_loaded('openssl') || !function_exists('stream_socket_enable_crypto') || !function_exists('stream_get_meta_data') || !function_exists('stream_set_blocking') || !function_exists('stream_get_wrappers'))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -139,7 +155,7 @@ class jabber
|
||||
|
||||
$this->session['ssl'] = $this->use_ssl;
|
||||
|
||||
if ($this->open_socket($this->connect_server, $this->port, $this->use_ssl))
|
||||
if ($this->open_socket($this->connect_server, $this->port, $this->use_ssl, $this->verify_peer, $this->verify_peer_name, $this->allow_self_signed))
|
||||
{
|
||||
$this->send("<?xml version='1.0' encoding='UTF-8' ?" . ">\n");
|
||||
$this->send("<stream:stream to='{$this->server}' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>\n");
|
||||
@@ -227,10 +243,13 @@ class jabber
|
||||
* @param string $server host to connect to
|
||||
* @param int $port port number
|
||||
* @param bool $use_ssl use ssl or not
|
||||
* @param bool $verify_peer verify ssl certificate
|
||||
* @param bool $verify_peer_name verify peer name
|
||||
* @param bool $allow_self_signed allow self-signed ssl certificates
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
function open_socket($server, $port, $use_ssl = false)
|
||||
function open_socket($server, $port, $use_ssl, $verify_peer, $verify_peer_name, $allow_self_signed)
|
||||
{
|
||||
if (@function_exists('dns_get_record'))
|
||||
{
|
||||
@@ -241,12 +260,26 @@ class jabber
|
||||
}
|
||||
}
|
||||
|
||||
$server = $use_ssl ? 'ssl://' . $server : $server;
|
||||
$options = array();
|
||||
|
||||
if ($this->connection = @fsockopen($server, $port, $errorno, $errorstr, $this->timeout))
|
||||
if ($use_ssl)
|
||||
{
|
||||
socket_set_blocking($this->connection, 0);
|
||||
socket_set_timeout($this->connection, 60);
|
||||
$remote_socket = 'ssl://' . $server . ':' . $port;
|
||||
|
||||
// Set ssl context options, see http://php.net/manual/en/context.ssl.php
|
||||
$options['ssl'] = array('verify_peer' => $verify_peer, 'verify_peer_name' => $verify_peer_name, 'allow_self_signed' => $allow_self_signed);
|
||||
}
|
||||
else
|
||||
{
|
||||
$remote_socket = $server . ':' . $port;
|
||||
}
|
||||
|
||||
$socket_context = stream_context_create($options);
|
||||
|
||||
if ($this->connection = @stream_socket_client($remote_socket, $errorno, $errorstr, $this->timeout, STREAM_CLIENT_CONNECT, $socket_context))
|
||||
{
|
||||
stream_set_blocking($this->connection, 0);
|
||||
stream_set_timeout($this->connection, 60);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -563,7 +596,7 @@ class jabber
|
||||
case 'proceed':
|
||||
// continue switching to TLS
|
||||
$meta = stream_get_meta_data($this->connection);
|
||||
socket_set_blocking($this->connection, 1);
|
||||
stream_set_blocking($this->connection, 1);
|
||||
|
||||
if (!stream_socket_enable_crypto($this->connection, true, STREAM_CRYPTO_METHOD_TLS_CLIENT))
|
||||
{
|
||||
@@ -571,7 +604,7 @@ class jabber
|
||||
return false;
|
||||
}
|
||||
|
||||
socket_set_blocking($this->connection, $meta['blocked']);
|
||||
stream_set_blocking($this->connection, $meta['blocked']);
|
||||
$this->session['tls'] = true;
|
||||
|
||||
// new stream
|
||||
|
@@ -210,10 +210,12 @@ class messenger
|
||||
/**
|
||||
* Set email template to use
|
||||
*/
|
||||
function template($template_file, $template_lang = '', $template_path = '')
|
||||
function template($template_file, $template_lang = '', $template_path = '', $template_dir_prefix = '')
|
||||
{
|
||||
global $config, $phpbb_root_path, $phpEx, $user, $phpbb_extension_manager;
|
||||
|
||||
$template_dir_prefix = (!$template_dir_prefix || $template_dir_prefix[0] === '/') ? $template_dir_prefix : '/' . $template_dir_prefix;
|
||||
|
||||
$this->setup_template();
|
||||
|
||||
if (!trim($template_file))
|
||||
@@ -229,10 +231,17 @@ class messenger
|
||||
$template_lang = basename($config['default_lang']);
|
||||
}
|
||||
|
||||
$ext_template_paths = array(
|
||||
array(
|
||||
'name' => $template_lang . '_email',
|
||||
'ext_path' => 'language/' . $template_lang . '/email' . $template_dir_prefix,
|
||||
),
|
||||
);
|
||||
|
||||
if ($template_path)
|
||||
{
|
||||
$template_paths = array(
|
||||
$template_path,
|
||||
$template_path . $template_dir_prefix,
|
||||
);
|
||||
}
|
||||
else
|
||||
@@ -241,26 +250,41 @@ class messenger
|
||||
$template_path .= $template_lang . '/email';
|
||||
|
||||
$template_paths = array(
|
||||
$template_path,
|
||||
$template_path . $template_dir_prefix,
|
||||
);
|
||||
|
||||
$board_language = basename($config['default_lang']);
|
||||
|
||||
// we can only specify default language fallback when the path is not a custom one for which we
|
||||
// do not know the default language alternative
|
||||
if ($template_lang !== basename($config['default_lang']))
|
||||
if ($template_lang !== $board_language)
|
||||
{
|
||||
$fallback_template_path = (!empty($user->lang_path)) ? $user->lang_path : $phpbb_root_path . 'language/';
|
||||
$fallback_template_path .= basename($config['default_lang']) . '/email';
|
||||
$fallback_template_path .= $board_language . '/email';
|
||||
|
||||
$template_paths[] = $fallback_template_path;
|
||||
$template_paths[] = $fallback_template_path . $template_dir_prefix;
|
||||
|
||||
$ext_template_paths[] = array(
|
||||
'name' => $board_language . '_email',
|
||||
'ext_path' => 'language/' . $board_language . '/email' . $template_dir_prefix,
|
||||
);
|
||||
}
|
||||
// If everything fails just fall back to en template
|
||||
if ($template_lang !== 'en' && $board_language !== 'en')
|
||||
{
|
||||
$fallback_template_path = (!empty($user->lang_path)) ? $user->lang_path : $phpbb_root_path . 'language/';
|
||||
$fallback_template_path .= 'en/email';
|
||||
|
||||
$template_paths[] = $fallback_template_path . $template_dir_prefix;
|
||||
|
||||
$ext_template_paths[] = array(
|
||||
'name' => 'en_email',
|
||||
'ext_path' => 'language/en/email' . $template_dir_prefix,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$this->set_template_paths(array(
|
||||
array(
|
||||
'name' => $template_lang . '_email',
|
||||
'ext_path' => 'language/' . $template_lang . '/email'
|
||||
),
|
||||
), $template_paths);
|
||||
$this->set_template_paths($ext_template_paths, $template_paths);
|
||||
|
||||
$this->template->set_filenames(array(
|
||||
'body' => $template_file . '.txt',
|
||||
@@ -288,10 +312,16 @@ class messenger
|
||||
|
||||
/**
|
||||
* Send the mail out to the recipients set previously in var $this->addresses
|
||||
*
|
||||
* @param int $method User notification method NOTIFY_EMAIL|NOTIFY_IM|NOTIFY_BOTH
|
||||
* @param bool $break Flag indicating if the function only formats the subject
|
||||
* and the message without sending it
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
function send($method = NOTIFY_EMAIL, $break = false)
|
||||
{
|
||||
global $config, $user;
|
||||
global $config, $user, $phpbb_dispatcher;
|
||||
|
||||
// We add some standard variables we always use, no need to specify them always
|
||||
$this->assign_vars(array(
|
||||
@@ -300,6 +330,30 @@ class messenger
|
||||
'SITENAME' => htmlspecialchars_decode($config['sitename']),
|
||||
));
|
||||
|
||||
$subject = $this->subject;
|
||||
$message = $this->msg;
|
||||
/**
|
||||
* Event to modify notification message text before parsing
|
||||
*
|
||||
* @event core.modify_notification_message
|
||||
* @var int method User notification method NOTIFY_EMAIL|NOTIFY_IM|NOTIFY_BOTH
|
||||
* @var bool break Flag indicating if the function only formats the subject
|
||||
* and the message without sending it
|
||||
* @var string subject The message subject
|
||||
* @var string message The message text
|
||||
* @since 3.1.11-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'method',
|
||||
'break',
|
||||
'subject',
|
||||
'message',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.modify_notification_message', compact($vars)));
|
||||
$this->subject = $subject;
|
||||
$this->msg = $message;
|
||||
unset($subject, $message);
|
||||
|
||||
// Parse message through template
|
||||
$this->msg = trim($this->template->assign_display('body'));
|
||||
|
||||
@@ -414,7 +468,7 @@ class messenger
|
||||
*/
|
||||
function build_header($to, $cc, $bcc)
|
||||
{
|
||||
global $config;
|
||||
global $config, $phpbb_dispatcher;
|
||||
|
||||
// We could use keys here, but we won't do this for 3.0.x to retain backwards compatibility
|
||||
$headers = array();
|
||||
@@ -446,6 +500,16 @@ class messenger
|
||||
$headers[] = 'X-MimeOLE: phpBB3';
|
||||
$headers[] = 'X-phpBB-Origin: phpbb://' . str_replace(array('http://', 'https://'), array('', ''), generate_board_url());
|
||||
|
||||
/**
|
||||
* Event to modify email header entries
|
||||
*
|
||||
* @event core.modify_email_headers
|
||||
* @var array headers Array containing email header entries
|
||||
* @since 3.1.11-RC1
|
||||
*/
|
||||
$vars = array('headers');
|
||||
extract($phpbb_dispatcher->trigger_event('core.modify_email_headers', compact($vars)));
|
||||
|
||||
if (sizeof($this->extra_headers))
|
||||
{
|
||||
$headers = array_merge($headers, $this->extra_headers);
|
||||
@@ -591,7 +655,7 @@ class messenger
|
||||
if (!$use_queue)
|
||||
{
|
||||
include_once($phpbb_root_path . 'includes/functions_jabber.' . $phpEx);
|
||||
$this->jabber = new jabber($config['jab_host'], $config['jab_port'], $config['jab_username'], htmlspecialchars_decode($config['jab_password']), $config['jab_use_ssl']);
|
||||
$this->jabber = new jabber($config['jab_host'], $config['jab_port'], $config['jab_username'], htmlspecialchars_decode($config['jab_password']), $config['jab_use_ssl'], $config['jab_verify_peer'], $config['jab_verify_peer_name'], $config['jab_allow_self_signed']);
|
||||
|
||||
if (!$this->jabber->connect())
|
||||
{
|
||||
@@ -766,7 +830,7 @@ class queue
|
||||
}
|
||||
|
||||
include_once($phpbb_root_path . 'includes/functions_jabber.' . $phpEx);
|
||||
$this->jabber = new jabber($config['jab_host'], $config['jab_port'], $config['jab_username'], htmlspecialchars_decode($config['jab_password']), $config['jab_use_ssl']);
|
||||
$this->jabber = new jabber($config['jab_host'], $config['jab_port'], $config['jab_username'], htmlspecialchars_decode($config['jab_password']), $config['jab_use_ssl'], $config['jab_verify_peer'], $config['jab_verify_peer_name'], $config['jab_allow_self_signed']);
|
||||
|
||||
if (!$this->jabber->connect())
|
||||
{
|
||||
@@ -859,6 +923,11 @@ class queue
|
||||
fwrite($fp, "<?php\nif (!defined('IN_PHPBB')) exit;\n\$this->queue_data = unserialize(" . var_export(serialize($this->queue_data), true) . ");\n\n?>");
|
||||
fclose($fp);
|
||||
|
||||
if (function_exists('opcache_invalidate'))
|
||||
{
|
||||
@opcache_invalidate($this->cache_file);
|
||||
}
|
||||
|
||||
phpbb_chmod($this->cache_file, CHMOD_READ | CHMOD_WRITE);
|
||||
}
|
||||
}
|
||||
@@ -901,6 +970,11 @@ class queue
|
||||
fwrite($fp, "<?php\nif (!defined('IN_PHPBB')) exit;\n\$this->queue_data = unserialize(" . var_export(serialize($this->data), true) . ");\n\n?>");
|
||||
fclose($fp);
|
||||
|
||||
if (function_exists('opcache_invalidate'))
|
||||
{
|
||||
@opcache_invalidate($this->cache_file);
|
||||
}
|
||||
|
||||
phpbb_chmod($this->cache_file, CHMOD_READ | CHMOD_WRITE);
|
||||
|
||||
$this->data = array();
|
||||
@@ -1002,7 +1076,18 @@ function smtpmail($addresses, $subject, $message, &$err_msg, $headers = false)
|
||||
}
|
||||
$collector = new \phpbb\error_collector;
|
||||
$collector->install();
|
||||
$smtp->socket = fsockopen($config['smtp_host'], $config['smtp_port'], $errno, $errstr, 20);
|
||||
|
||||
$options = array();
|
||||
$verify_peer = (bool) $config['smtp_verify_peer'];
|
||||
$verify_peer_name = (bool) $config['smtp_verify_peer_name'];
|
||||
$allow_self_signed = (bool) $config['smtp_allow_self_signed'];
|
||||
$remote_socket = $config['smtp_host'] . ':' . $config['smtp_port'];
|
||||
|
||||
// Set ssl context options, see http://php.net/manual/en/context.ssl.php
|
||||
$options['ssl'] = array('verify_peer' => $verify_peer, 'verify_peer_name' => $verify_peer_name, 'allow_self_signed' => $allow_self_signed);
|
||||
$socket_context = stream_context_create($options);
|
||||
|
||||
$smtp->socket = @stream_socket_client($remote_socket, $errno, $errstr, 20, STREAM_CLIENT_CONNECT, $socket_context);
|
||||
$collector->uninstall();
|
||||
$error_contents = $collector->format_errors();
|
||||
|
||||
|
@@ -119,6 +119,15 @@ function generate_smilies($mode, $forum_id)
|
||||
|
||||
foreach ($smilies as $row)
|
||||
{
|
||||
/**
|
||||
* Modify smiley root path before populating smiley list
|
||||
*
|
||||
* @event core.generate_smilies_before
|
||||
* @var string root_path root_path for smilies
|
||||
* @since 3.1.11-RC1
|
||||
*/
|
||||
$vars = array('root_path');
|
||||
extract($phpbb_dispatcher->trigger_event('core.generate_smilies_before', compact($vars)));
|
||||
$template->assign_block_vars('smiley', array(
|
||||
'SMILEY_CODE' => $row['code'],
|
||||
'A_SMILEY_CODE' => addslashes($row['code']),
|
||||
@@ -702,7 +711,7 @@ function create_thumbnail($source, $destination, $mimetype)
|
||||
|
||||
$used_imagick = false;
|
||||
|
||||
// Only use imagemagick if defined and the passthru function not disabled
|
||||
// Only use ImageMagick if defined and the passthru function not disabled
|
||||
if ($config['img_imagick'] && function_exists('passthru'))
|
||||
{
|
||||
if (substr($config['img_imagick'], -1) !== '/')
|
||||
@@ -1074,7 +1083,7 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id
|
||||
}
|
||||
|
||||
$sql_ary = array(
|
||||
'SELECT' => 'u.username, u.user_id, u.user_colour, p.*, z.friend, z.foe',
|
||||
'SELECT' => 'u.username, u.user_id, u.user_colour, p.*, z.friend, z.foe, uu.username as post_delete_username, uu.user_colour as post_delete_user_colour',
|
||||
|
||||
'FROM' => array(
|
||||
USERS_TABLE => 'u',
|
||||
@@ -1086,6 +1095,10 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id
|
||||
'FROM' => array(ZEBRA_TABLE => 'z'),
|
||||
'ON' => 'z.user_id = ' . $user->data['user_id'] . ' AND z.zebra_id = p.poster_id',
|
||||
),
|
||||
array(
|
||||
'FROM' => array(USERS_TABLE => 'uu'),
|
||||
'ON' => 'uu.user_id = p.post_delete_user',
|
||||
),
|
||||
),
|
||||
|
||||
'WHERE' => $db->sql_in_set('p.post_id', $post_list) . '
|
||||
@@ -1129,6 +1142,32 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id
|
||||
$db->sql_freeresult($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Event to modify the posts list for topic reviews
|
||||
*
|
||||
* @event core.topic_review_modify_post_list
|
||||
* @var array attachments Array with the post attachments data
|
||||
* @var int cur_post_id Post offset ID
|
||||
* @var int forum_id The topic's forum ID
|
||||
* @var string mode The topic review mode
|
||||
* @var array post_list Array with the post IDs
|
||||
* @var array rowset Array with the posts data
|
||||
* @var bool show_quote_button Flag indicating if the quote button should be displayed
|
||||
* @var int topic_id The topic ID that is being reviewed
|
||||
* @since 3.1.9-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'attachments',
|
||||
'cur_post_id',
|
||||
'forum_id',
|
||||
'mode',
|
||||
'post_list',
|
||||
'rowset',
|
||||
'show_quote_button',
|
||||
'topic_id',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.topic_review_modify_post_list', compact($vars)));
|
||||
|
||||
for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i)
|
||||
{
|
||||
// A non-existing rowset only happens if there was no user present for the entered poster_id
|
||||
@@ -1168,6 +1207,31 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id
|
||||
$post_anchor = ($mode == 'post_review') ? 'ppr' . $row['post_id'] : 'pr' . $row['post_id'];
|
||||
$u_show_post = append_sid($phpbb_root_path . 'viewtopic.' . $phpEx, "f=$forum_id&t=$topic_id&p={$row['post_id']}&view=show#p{$row['post_id']}");
|
||||
|
||||
$l_deleted_message = '';
|
||||
if ($row['post_visibility'] == ITEM_DELETED)
|
||||
{
|
||||
$display_postername = get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username']);
|
||||
|
||||
// User having deleted the post also being the post author?
|
||||
if (!$row['post_delete_user'] || $row['post_delete_user'] == $poster_id)
|
||||
{
|
||||
$display_username = $display_postername;
|
||||
}
|
||||
else
|
||||
{
|
||||
$display_username = get_username_string('full', $row['post_delete_user'], $row['post_delete_username'], $row['post_delete_user_colour']);
|
||||
}
|
||||
|
||||
if ($row['post_delete_reason'])
|
||||
{
|
||||
$l_deleted_message = $user->lang('POST_DELETED_BY_REASON', $display_postername, $display_username, $user->format_date($row['post_delete_time'], false, true), $row['post_delete_reason']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$l_deleted_message = $user->lang('POST_DELETED_BY', $display_postername, $display_username, $user->format_date($row['post_delete_time'], false, true));
|
||||
}
|
||||
}
|
||||
|
||||
$post_row = array(
|
||||
'POST_AUTHOR_FULL' => get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username']),
|
||||
'POST_AUTHOR_COLOUR' => get_username_string('colour', $poster_id, $row['username'], $row['user_colour'], $row['post_username']),
|
||||
@@ -1178,6 +1242,8 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id
|
||||
'S_FRIEND' => ($row['friend']) ? true : false,
|
||||
'S_IGNORE_POST' => ($row['foe']) ? true : false,
|
||||
'L_IGNORE_POST' => ($row['foe']) ? sprintf($user->lang['POST_BY_FOE'], get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username']), "<a href=\"{$u_show_post}\" onclick=\"phpbb.toggleDisplay('{$post_anchor}', 1); return false;\">", '</a>') : '',
|
||||
'S_POST_DELETED' => ($row['post_visibility'] == ITEM_DELETED) ? true : false,
|
||||
'L_DELETE_POST' => $l_deleted_message,
|
||||
|
||||
'POST_SUBJECT' => $post_subject,
|
||||
'MINI_POST_IMG' => $user->img('icon_post_target', $user->lang['POST']),
|
||||
@@ -1249,7 +1315,7 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id
|
||||
*/
|
||||
function delete_post($forum_id, $topic_id, $post_id, &$data, $is_soft = false, $softdelete_reason = '')
|
||||
{
|
||||
global $db, $user, $auth, $phpbb_container;
|
||||
global $db, $user, $auth, $phpbb_container, $phpbb_dispatcher;
|
||||
global $config, $phpEx, $phpbb_root_path;
|
||||
|
||||
// Specify our post mode
|
||||
@@ -1500,6 +1566,34 @@ function delete_post($forum_id, $topic_id, $post_id, &$data, $is_soft = false, $
|
||||
sync('topic_reported', 'topic_id', array($topic_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* This event is used for performing actions directly after a post or topic
|
||||
* has been deleted.
|
||||
*
|
||||
* @event core.delete_post_after
|
||||
* @var int forum_id Post forum ID
|
||||
* @var int topic_id Post topic ID
|
||||
* @var int post_id Post ID
|
||||
* @var array data Post data
|
||||
* @var bool is_soft Soft delete flag
|
||||
* @var string softdelete_reason Soft delete reason
|
||||
* @var string post_mode delete_topic, delete_first_post, delete_last_post or delete
|
||||
* @var mixed next_post_id Next post ID in the topic (post ID or false)
|
||||
*
|
||||
* @since 3.1.11-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'forum_id',
|
||||
'topic_id',
|
||||
'post_id',
|
||||
'data',
|
||||
'is_soft',
|
||||
'softdelete_reason',
|
||||
'post_mode',
|
||||
'next_post_id',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.delete_post_after', compact($vars)));
|
||||
|
||||
return $next_post_id;
|
||||
}
|
||||
|
||||
@@ -1610,6 +1704,10 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (isset($data['post_visibility']) && $data['post_visibility'] !== false)
|
||||
{
|
||||
$post_visibility = $data['post_visibility'];
|
||||
}
|
||||
|
||||
// MODs/Extensions are able to force any visibility on posts
|
||||
if (isset($data['force_approved_state']))
|
||||
@@ -2403,7 +2501,9 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
|
||||
|
||||
$params = $add_anchor = '';
|
||||
|
||||
if ($post_visibility == ITEM_APPROVED)
|
||||
if ($post_visibility == ITEM_APPROVED ||
|
||||
($auth->acl_get('m_softdelete', $data['forum_id']) && $post_visibility == ITEM_DELETED) ||
|
||||
($auth->acl_get('m_approve', $data['forum_id']) && in_array($post_visibility, array(ITEM_UNAPPROVED, ITEM_REAPPROVE))))
|
||||
{
|
||||
$params .= '&t=' . $data['topic_id'];
|
||||
|
||||
@@ -2442,7 +2542,7 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
|
||||
* @var string url The "Return to topic" URL
|
||||
*
|
||||
* @since 3.1.0-a3
|
||||
* @change 3.1.0-RC3 Added vars mode, subject, username, topic_type,
|
||||
* @changed 3.1.0-RC3 Added vars mode, subject, username, topic_type,
|
||||
* poll, update_message, update_search_index
|
||||
*/
|
||||
$vars = array(
|
||||
@@ -2591,16 +2691,54 @@ function phpbb_upload_popup($forum_style = 0)
|
||||
|
||||
/**
|
||||
* Do the various checks required for removing posts as well as removing it
|
||||
*
|
||||
* @param int $forum_id The id of the forum
|
||||
* @param int $topic_id The id of the topic
|
||||
* @param int $post_id The id of the post
|
||||
* @param array $post_data Array with the post data
|
||||
* @param bool $is_soft The flag indicating whether it is the soft delete mode
|
||||
* @param string $delete_reason Description for the post deletion reason
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
function phpbb_handle_post_delete($forum_id, $topic_id, $post_id, &$post_data, $is_soft = false, $delete_reason = '')
|
||||
{
|
||||
global $user, $auth, $config, $request;
|
||||
global $phpbb_root_path, $phpEx;
|
||||
global $phpbb_root_path, $phpEx, $phpbb_dispatcher;
|
||||
|
||||
$force_delete_allowed = $force_softdelete_allowed = false;
|
||||
$perm_check = ($is_soft) ? 'softdelete' : 'delete';
|
||||
|
||||
/**
|
||||
* This event allows to modify the conditions for the post deletion
|
||||
*
|
||||
* @event core.handle_post_delete_conditions
|
||||
* @var int forum_id The id of the forum
|
||||
* @var int topic_id The id of the topic
|
||||
* @var int post_id The id of the post
|
||||
* @var array post_data Array with the post data
|
||||
* @var bool is_soft The flag indicating whether it is the soft delete mode
|
||||
* @var string delete_reason Description for the post deletion reason
|
||||
* @var bool force_delete_allowed Allow the user to delete the post (all permissions and conditions are ignored)
|
||||
* @var bool force_softdelete_allowed Allow the user to softdelete the post (all permissions and conditions are ignored)
|
||||
* @var string perm_check The deletion mode softdelete|delete
|
||||
* @since 3.1.11-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'forum_id',
|
||||
'topic_id',
|
||||
'post_id',
|
||||
'post_data',
|
||||
'is_soft',
|
||||
'delete_reason',
|
||||
'force_delete_allowed',
|
||||
'force_softdelete_allowed',
|
||||
'perm_check',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.handle_post_delete_conditions', compact($vars)));
|
||||
|
||||
// If moderator removing post or user itself removing post, present a confirmation screen
|
||||
if ($auth->acl_get("m_$perm_check", $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get("f_$perm_check", $forum_id) && $post_id == $post_data['topic_last_post_id'] && !$post_data['post_edit_locked'] && ($post_data['post_time'] > time() - ($config['delete_time'] * 60) || !$config['delete_time'])))
|
||||
if ($force_delete_allowed || ($is_soft && $force_softdelete_allowed) || $auth->acl_get("m_$perm_check", $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get("f_$perm_check", $forum_id) && $post_id == $post_data['topic_last_post_id'] && !$post_data['post_edit_locked'] && ($post_data['post_time'] > time() - ($config['delete_time'] * 60) || !$config['delete_time'])))
|
||||
{
|
||||
$s_hidden_fields = array(
|
||||
'p' => $post_id,
|
||||
@@ -2657,10 +2795,10 @@ function phpbb_handle_post_delete($forum_id, $topic_id, $post_id, &$post_data, $
|
||||
}
|
||||
else
|
||||
{
|
||||
global $user, $template, $request;
|
||||
global $template;
|
||||
|
||||
$can_delete = $auth->acl_get('m_delete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_delete', $forum_id));
|
||||
$can_softdelete = $auth->acl_get('m_softdelete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_softdelete', $forum_id));
|
||||
$can_delete = $force_delete_allowed || ($auth->acl_get('m_delete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_delete', $forum_id)));
|
||||
$can_softdelete = $force_softdelete_allowed || ($auth->acl_get('m_softdelete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_softdelete', $forum_id)));
|
||||
|
||||
$template->assign_vars(array(
|
||||
'S_SOFTDELETED' => $post_data['post_visibility'] == ITEM_DELETED,
|
||||
|
@@ -889,9 +889,16 @@ function update_unread_status($unread, $msg_id, $user_id, $folder_id)
|
||||
SET pm_unread = 0
|
||||
WHERE msg_id = $msg_id
|
||||
AND user_id = $user_id
|
||||
AND folder_id = $folder_id";
|
||||
AND folder_id = $folder_id
|
||||
AND pm_unread = 1";
|
||||
$db->sql_query($sql);
|
||||
|
||||
// If the message is already marked as read, we just skip the rest to avoid negative PM count
|
||||
if (!$db->sql_affectedrows())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$sql = 'UPDATE ' . USERS_TABLE . "
|
||||
SET user_unread_privmsg = user_unread_privmsg - 1
|
||||
WHERE user_id = $user_id";
|
||||
|
@@ -776,9 +776,18 @@ class fileupload
|
||||
|
||||
$url = parse_url($upload_url);
|
||||
|
||||
$default_port = 80;
|
||||
$hostname = $url['host'];
|
||||
|
||||
if ($url['scheme'] == 'https')
|
||||
{
|
||||
$default_port = 443;
|
||||
$hostname = 'tls://' . $url['host'];
|
||||
}
|
||||
|
||||
$host = $url['host'];
|
||||
$path = $url['path'];
|
||||
$port = (!empty($url['port'])) ? (int) $url['port'] : 80;
|
||||
$port = (!empty($url['port'])) ? (int) $url['port'] : $default_port;
|
||||
|
||||
$upload_ary['type'] = 'application/octet-stream';
|
||||
|
||||
@@ -818,7 +827,7 @@ class fileupload
|
||||
$errno = 0;
|
||||
$errstr = '';
|
||||
|
||||
if (!($fsock = @fsockopen($host, $port, $errno, $errstr)))
|
||||
if (!($fsock = @fsockopen($hostname, $port, $errno, $errstr)))
|
||||
{
|
||||
$file = new fileerror($user->lang[$this->error_prefix . 'NOT_UPLOADED']);
|
||||
return $file;
|
||||
@@ -919,7 +928,7 @@ class fileupload
|
||||
return $file;
|
||||
}
|
||||
|
||||
$tmp_path = (!@ini_get('safe_mode') || strtolower(@ini_get('safe_mode')) == 'off') ? false : $phpbb_root_path . 'cache';
|
||||
$tmp_path = (!@ini_get('safe_mode') || strtolower(@ini_get('safe_mode')) == 'off') ? sys_get_temp_dir() : $phpbb_root_path . 'cache';
|
||||
$filename = tempnam($tmp_path, unique_id() . '-');
|
||||
|
||||
if (!($fp = @fopen($filename, 'wb')))
|
||||
|
@@ -119,19 +119,29 @@ function user_update_name($old_name, $new_name)
|
||||
global $config, $db, $cache, $phpbb_dispatcher;
|
||||
|
||||
$update_ary = array(
|
||||
FORUMS_TABLE => array('forum_last_poster_name'),
|
||||
MODERATOR_CACHE_TABLE => array('username'),
|
||||
POSTS_TABLE => array('post_username'),
|
||||
TOPICS_TABLE => array('topic_first_poster_name', 'topic_last_poster_name'),
|
||||
FORUMS_TABLE => array(
|
||||
'forum_last_poster_id' => 'forum_last_poster_name',
|
||||
),
|
||||
MODERATOR_CACHE_TABLE => array(
|
||||
'user_id' => 'username',
|
||||
),
|
||||
POSTS_TABLE => array(
|
||||
'poster_id' => 'post_username',
|
||||
),
|
||||
TOPICS_TABLE => array(
|
||||
'topic_poster' => 'topic_first_poster_name',
|
||||
'topic_last_poster_id' => 'topic_last_poster_name',
|
||||
),
|
||||
);
|
||||
|
||||
foreach ($update_ary as $table => $field_ary)
|
||||
{
|
||||
foreach ($field_ary as $field)
|
||||
foreach ($field_ary as $id_field => $name_field)
|
||||
{
|
||||
$sql = "UPDATE $table
|
||||
SET $field = '" . $db->sql_escape($new_name) . "'
|
||||
WHERE $field = '" . $db->sql_escape($old_name) . "'";
|
||||
SET $name_field = '" . $db->sql_escape($new_name) . "'
|
||||
WHERE $name_field = '" . $db->sql_escape($old_name) . "'
|
||||
AND $id_field <> " . ANONYMOUS;
|
||||
$db->sql_query($sql);
|
||||
}
|
||||
}
|
||||
@@ -262,13 +272,15 @@ function user_add($user_row, $cp_data = false, $notifications_data = null)
|
||||
* Use this event to modify the values to be inserted when a user is added
|
||||
*
|
||||
* @event core.user_add_modify_data
|
||||
* @var array user_row Array of user details submited to user_add
|
||||
* @var array cp_data Array of Custom profile fields submited to user_add
|
||||
* @var array sql_ary Array of data to be inserted when a user is added
|
||||
* @var array user_row Array of user details submited to user_add
|
||||
* @var array cp_data Array of Custom profile fields submited to user_add
|
||||
* @var array sql_ary Array of data to be inserted when a user is added
|
||||
* @var array notifications_data Array of notification data to be inserted when a user is added
|
||||
* @since 3.1.0-a1
|
||||
* @change 3.1.0-b5
|
||||
* @changed 3.1.0-b5 Added user_row and cp_data
|
||||
* @changed 3.1.11-RC1 Added notifications_data
|
||||
*/
|
||||
$vars = array('user_row', 'cp_data', 'sql_ary');
|
||||
$vars = array('user_row', 'cp_data', 'sql_ary', 'notifications_data');
|
||||
extract($phpbb_dispatcher->trigger_event('core.user_add_modify_data', compact($vars)));
|
||||
|
||||
$sql = 'INSERT INTO ' . USERS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
|
||||
@@ -1281,7 +1293,7 @@ function user_ban($mode, $ban, $ban_len, $ban_len_other, $ban_exclude, $ban_reas
|
||||
*/
|
||||
function user_unban($mode, $ban)
|
||||
{
|
||||
global $db, $user, $auth, $cache;
|
||||
global $db, $user, $auth, $cache, $phpbb_dispatcher;
|
||||
|
||||
// Delete stale bans
|
||||
$sql = 'DELETE FROM ' . BANLIST_TABLE . '
|
||||
@@ -1348,6 +1360,20 @@ function user_unban($mode, $ban)
|
||||
add_log('user', $user_id, 'LOG_UNBAN_' . strtoupper($mode), $l_unban_list);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Use this event to perform actions after the unban has been performed
|
||||
*
|
||||
* @event core.user_unban
|
||||
* @var string mode One of the following: user, ip, email
|
||||
* @var array user_ids_ary Array with user_ids
|
||||
* @since 3.1.11-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'mode',
|
||||
'user_ids_ary',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.user_unban', compact($vars)));
|
||||
}
|
||||
|
||||
$cache->destroy('sql', BANLIST_TABLE);
|
||||
@@ -2269,7 +2295,7 @@ function phpbb_avatar_explanation_string()
|
||||
{
|
||||
global $config, $user;
|
||||
|
||||
return $user->lang('AVATAR_EXPLAIN',
|
||||
return $user->lang(($config['avatar_filesize'] == 0) ? 'AVATAR_EXPLAIN_NO_FILESIZE' : 'AVATAR_EXPLAIN',
|
||||
$user->lang('PIXELS', (int) $config['avatar_max_width']),
|
||||
$user->lang('PIXELS', (int) $config['avatar_max_height']),
|
||||
round($config['avatar_filesize'] / 1024));
|
||||
@@ -2831,7 +2857,7 @@ function group_user_add($group_id, $user_id_ary = false, $username_ary = false,
|
||||
*
|
||||
* @return false if no errors occurred, else the user lang string for the relevant error, for example 'NO_USER'
|
||||
*/
|
||||
function group_user_del($group_id, $user_id_ary = false, $username_ary = false, $group_name = false)
|
||||
function group_user_del($group_id, $user_id_ary = false, $username_ary = false, $group_name = false, $log_action = true)
|
||||
{
|
||||
global $db, $auth, $config, $phpbb_dispatcher, $phpbb_container;
|
||||
|
||||
@@ -2966,16 +2992,19 @@ function group_user_del($group_id, $user_id_ary = false, $username_ary = false,
|
||||
$vars = array('group_id', 'group_name', 'user_id_ary', 'username_ary');
|
||||
extract($phpbb_dispatcher->trigger_event('core.group_delete_user_after', compact($vars)));
|
||||
|
||||
if (!$group_name)
|
||||
if ($log_action)
|
||||
{
|
||||
$group_name = get_group_name($group_id);
|
||||
}
|
||||
if (!$group_name)
|
||||
{
|
||||
$group_name = get_group_name($group_id);
|
||||
}
|
||||
|
||||
$log = 'LOG_GROUP_REMOVE';
|
||||
$log = 'LOG_GROUP_REMOVE';
|
||||
|
||||
if ($group_name)
|
||||
{
|
||||
add_log('admin', $log, $group_name, implode(', ', $username_ary));
|
||||
if ($group_name)
|
||||
{
|
||||
add_log('admin', $log, $group_name, implode(', ', $username_ary));
|
||||
}
|
||||
}
|
||||
|
||||
group_update_listings($group_id);
|
||||
@@ -3073,7 +3102,7 @@ function remove_default_rank($group_id, $user_ids)
|
||||
*/
|
||||
function group_user_attributes($action, $group_id, $user_id_ary = false, $username_ary = false, $group_name = false, $group_attributes = false)
|
||||
{
|
||||
global $db, $auth, $phpbb_root_path, $phpEx, $config, $phpbb_container;
|
||||
global $db, $auth, $phpbb_root_path, $phpEx, $config, $phpbb_container, $phpbb_dispatcher;
|
||||
|
||||
// We need both username and user_id info
|
||||
$result = user_get_id_name($user_id_ary, $username_ary);
|
||||
@@ -3204,6 +3233,28 @@ function group_user_attributes($action, $group_id, $user_id_ary = false, $userna
|
||||
break;
|
||||
}
|
||||
|
||||
/**
|
||||
* Event to perform additional actions on setting user group attributes
|
||||
*
|
||||
* @event core.user_set_group_attributes
|
||||
* @var int group_id ID of the group
|
||||
* @var string group_name Name of the group
|
||||
* @var array user_id_ary IDs of the users to set group attributes
|
||||
* @var array username_ary Names of the users to set group attributes
|
||||
* @var array group_attributes Group attributes which were changed
|
||||
* @var string action Action to perform over the group members
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'group_id',
|
||||
'group_name',
|
||||
'user_id_ary',
|
||||
'username_ary',
|
||||
'group_attributes',
|
||||
'action',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.user_set_group_attributes', compact($vars)));
|
||||
|
||||
// Clear permissions cache of relevant users
|
||||
$auth->acl_clear_prefetch($user_id_ary);
|
||||
|
||||
@@ -3619,8 +3670,8 @@ function remove_newly_registered($user_id, $user_data = false)
|
||||
}
|
||||
|
||||
// We need to call group_user_del here, because this function makes sure everything is correctly changed.
|
||||
// A downside for a call within the session handler is that the language is not set up yet - so no log entry
|
||||
group_user_del($group_id, $user_id);
|
||||
// Force function to not log the removal of users from newly registered users group
|
||||
group_user_del($group_id, $user_id, false, false, false);
|
||||
|
||||
// Set user_new to 0 to let this not be triggered again
|
||||
$sql = 'UPDATE ' . USERS_TABLE . '
|
||||
|
@@ -28,7 +28,10 @@ class mcp_ban
|
||||
global $db, $user, $auth, $template, $request, $phpbb_dispatcher;
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
|
||||
if (!function_exists('user_ban'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
|
||||
}
|
||||
|
||||
// Include the admin banning interface...
|
||||
include($phpbb_root_path . 'includes/acp/acp_ban.' . $phpEx);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user