mirror of
https://github.com/phpbb/phpbb.git
synced 2025-09-12 01:00:43 +02:00
Compare commits
2049 Commits
release-3.
...
release-3.
Author | SHA1 | Date | |
---|---|---|---|
|
ece4a2edb7 | ||
|
9f073e4c75 | ||
|
9279c8f5ee | ||
|
296fadfca4 | ||
|
3c64cccecc | ||
|
2f5692d4bb | ||
|
3da72e9864 | ||
|
19237f5613 | ||
|
10172887fd | ||
|
55aaa596d7 | ||
|
6ed63088fe | ||
|
3dfcb212dc | ||
|
3036db481a | ||
|
a3517232f9 | ||
|
a9c091fad4 | ||
|
a65b432165 | ||
|
d9a32ce614 | ||
|
35e18a49a9 | ||
|
d883535b10 | ||
|
e68c1fb9e4 | ||
|
dd6955f833 | ||
|
36a568fd56 | ||
|
338d29072f | ||
|
5c8c7b1352 | ||
|
7988045bda | ||
|
5d0aa8e516 | ||
|
2c12f31cdf | ||
|
81d5327e44 | ||
|
e5364088c3 | ||
|
625333ea2e | ||
|
6203ef0c61 | ||
|
c9f9e66328 | ||
|
d30dc11f3e | ||
|
49afc1f2dc | ||
|
30475856c4 | ||
|
fce385e5bc | ||
|
9c2930178f | ||
|
a50d1a3576 | ||
|
2a76b7e869 | ||
|
35b18676cd | ||
|
ac8ebfabc7 | ||
|
f1414386d7 | ||
|
80fafdeb1a | ||
|
155c93d71a | ||
|
d26606f986 | ||
|
19a47dfbbc | ||
|
2011085c29 | ||
|
d8ddda5121 | ||
|
791c4136f7 | ||
|
d22e7ce9df | ||
|
f616c4e7a0 | ||
|
7eaedcc8de | ||
|
b10757ef14 | ||
|
f6f300d3f9 | ||
|
b789758f1b | ||
|
9ab5ad2986 | ||
|
643a86504a | ||
|
0261a9acff | ||
|
037b95eccc | ||
|
de4dff8bb0 | ||
|
9240ddbfa7 | ||
|
515c27270f | ||
|
6036b948ff | ||
|
275dabbc4f | ||
|
9ead56acb3 | ||
|
c494abc8c7 | ||
|
701bf571df | ||
|
42dd60edad | ||
|
13f30e8d9d | ||
|
efa96e1817 | ||
|
8cb9004ab3 | ||
|
440e699bc5 | ||
|
bad91d8e74 | ||
|
5d5049710c | ||
|
09d15db1fa | ||
|
819accedc8 | ||
|
b96c050695 | ||
|
8bfe1b2f54 | ||
|
a97ebe78bf | ||
|
3503d7f47b | ||
|
d0b9864563 | ||
|
1c7b568771 | ||
|
ea1e2ed362 | ||
|
896b43aa5b | ||
|
efbf14f029 | ||
|
ee875c0a43 | ||
|
7ec6254078 | ||
|
70be7e109f | ||
|
86fa185a1b | ||
|
95e1d4e9db | ||
|
f71a9d369c | ||
|
92d17cbff3 | ||
|
f81e8e9901 | ||
|
725db1ba29 | ||
|
2592fbf8e9 | ||
|
44b509b2b2 | ||
|
07fb16edb5 | ||
|
3a60414592 | ||
|
8861e26034 | ||
|
1960629240 | ||
|
b0e273b95f | ||
|
e5afe39987 | ||
|
e6791e376d | ||
|
b5b65c214d | ||
|
1fcb269616 | ||
|
74e9245df3 | ||
|
1019226dfa | ||
|
041b7be77e | ||
|
4b3d807293 | ||
|
8393b8e755 | ||
|
12bf9b42fa | ||
|
cf556f92c9 | ||
|
23ea588880 | ||
|
164054f067 | ||
|
cf303c3478 | ||
|
faf232219e | ||
|
59177a86c4 | ||
|
8f7e85604b | ||
|
239e6016a3 | ||
|
643970dce4 | ||
|
226743d10b | ||
|
0488d70062 | ||
|
12dbcc7f1e | ||
|
09d49fb7b2 | ||
|
afbaa6979b | ||
|
e52d23848a | ||
|
8d15f1b02e | ||
|
c0718fae96 | ||
|
a960bd6790 | ||
|
9d542aec1e | ||
|
5ccbe06911 | ||
|
c34ee343ba | ||
|
58842b5ca8 | ||
|
8cb0e30afc | ||
|
2dd71f6520 | ||
|
665f38d42f | ||
|
8d45901657 | ||
|
3a67604900 | ||
|
1a8db76a20 | ||
|
b82c77b38f | ||
|
8cf0b79a47 | ||
|
a21b367b21 | ||
|
cdf7ff1797 | ||
|
6293bbf099 | ||
|
2aa994b5ad | ||
|
de70b17b1d | ||
|
29a6aec9ad | ||
|
4788705a9a | ||
|
31fbc40a09 | ||
|
bc0453c93a | ||
|
edf60bcd55 | ||
|
6e77ca7c99 | ||
|
57547c7e20 | ||
|
90fc8fe59f | ||
|
00c54f8a7c | ||
|
aceca2566b | ||
|
45b910f9b4 | ||
|
1ce8a1d7ee | ||
|
bdf21e45ca | ||
|
09621342a5 | ||
|
7a6d3ec61b | ||
|
249d8ede12 | ||
|
7a4b4c7599 | ||
|
4b6b41a1e5 | ||
|
f1f2ab92b1 | ||
|
f394fd250e | ||
|
534d966957 | ||
|
ef297ec63e | ||
|
ef8160e8a2 | ||
|
41ef41ac63 | ||
|
156ae40d6f | ||
|
2a48284fc9 | ||
|
8442b19e59 | ||
|
9bce716081 | ||
|
4e630ef160 | ||
|
3ec941937a | ||
|
a14d00b8e9 | ||
|
03a35581c4 | ||
|
1808a61fe3 | ||
|
ea5ae09c7d | ||
|
04bb44ce33 | ||
|
293f66d4ed | ||
|
2b2286a46c | ||
|
de1e343c5b | ||
|
03e382f99c | ||
|
be9eb57785 | ||
|
30093d6e86 | ||
|
018419b36c | ||
|
444fa29beb | ||
|
21639d5d54 | ||
|
dc63db1860 | ||
|
efdd1e623e | ||
|
6536a36208 | ||
|
f2967b6669 | ||
|
0ceb77fb99 | ||
|
a0da2408e7 | ||
|
b803fc4351 | ||
|
786fcbf212 | ||
|
57209a1e68 | ||
|
14e727b834 | ||
|
0df3f1c5d0 | ||
|
a84b97f58e | ||
|
c5481371b9 | ||
|
b81a5afc25 | ||
|
084e1ae560 | ||
|
51bc9540cf | ||
|
17e050e109 | ||
|
42101fe8d4 | ||
|
b1b530f92c | ||
|
3477b5e5a8 | ||
|
b8b342be2d | ||
|
313cf7297c | ||
|
9391d423c0 | ||
|
dc4d0677b9 | ||
|
10d4f8c35e | ||
|
ccf83dd69b | ||
|
fff9f6611e | ||
|
2516b1e8f1 | ||
|
a820ff1ebc | ||
|
1789e0948b | ||
|
b9324577ac | ||
|
0397b46217 | ||
|
9c8aab4d32 | ||
|
ad073d22b9 | ||
|
dd53d0576d | ||
|
9040f18d7c | ||
|
dbc7a69ad2 | ||
|
2203bc204e | ||
|
e8830f605f | ||
|
a618e22fca | ||
|
2768db44f5 | ||
|
9c85c6c318 | ||
|
5bcdfe94dd | ||
|
57eb50812f | ||
|
1337f86123 | ||
|
841d11c6cd | ||
|
992b58d468 | ||
|
0ed66ad0e8 | ||
|
6f809416ba | ||
|
115ee7f3b8 | ||
|
c7f65fba62 | ||
|
d1980f6ad6 | ||
|
5a9dd1994f | ||
|
99a271f34b | ||
|
e5205ba2f8 | ||
|
4325bbf4c6 | ||
|
9120c7691e | ||
|
4dafcc2525 | ||
|
c2169f6899 | ||
|
2005c339ff | ||
|
70d88965c7 | ||
|
97d4f168f5 | ||
|
dad37a4329 | ||
|
c551b46115 | ||
|
81eeafbb8d | ||
|
95e011ccbe | ||
|
5efdbfa5e4 | ||
|
71afba0ded | ||
|
ba6943a6a0 | ||
|
3b7a6a3efa | ||
|
ff8d523768 | ||
|
da395edbca | ||
|
321d0d9b56 | ||
|
b652e1a1bb | ||
|
24f1896b3c | ||
|
a79b3490c2 | ||
|
668c61686b | ||
|
aee79c6cdb | ||
|
89a6cb2886 | ||
|
fbe8086697 | ||
|
f563647e4b | ||
|
bd1fb91dd2 | ||
|
0ec8e9dbff | ||
|
cd61de4bfd | ||
|
ee6783109a | ||
|
025de9ee19 | ||
|
bb7e86c2b1 | ||
|
d380a1a36f | ||
|
c11607bdd1 | ||
|
01d90e59a8 | ||
|
89a0cbc57e | ||
|
785c75254e | ||
|
f3af5945e3 | ||
|
6df721b215 | ||
|
f9953fc339 | ||
|
97cf433dea | ||
|
efe25a0b49 | ||
|
d67fae0f09 | ||
|
b74530259f | ||
|
470b79c9e3 | ||
|
2f95a67765 | ||
|
f6cf8782c8 | ||
|
17dc8c6c5c | ||
|
d3091da5ea | ||
|
45f39c6d1f | ||
|
b2d589634a | ||
|
d3d8793c1f | ||
|
8910ec98d7 | ||
|
7a061cfc6e | ||
|
6548a3094f | ||
|
459e8dc095 | ||
|
8f3fba8858 | ||
|
20d3d279ce | ||
|
825aef72e8 | ||
|
8cb95b3b84 | ||
|
8e1e48a7b6 | ||
|
340a8f19d6 | ||
|
cd5c01ac2d | ||
|
ef154b78a1 | ||
|
afcf9cbc86 | ||
|
c3265c9138 | ||
|
11c5a66213 | ||
|
17f5c6bf71 | ||
|
4b2690f792 | ||
|
e047b286d8 | ||
|
ed6bd50ab8 | ||
|
9c2d73c3f9 | ||
|
345e8e084f | ||
|
a962e78854 | ||
|
35d5d527db | ||
|
f894da0d25 | ||
|
62288b3c05 | ||
|
3feeb382c5 | ||
|
f832f5a4ee | ||
|
c0b3239bf3 | ||
|
508b06063f | ||
|
225892f506 | ||
|
326ff46ef7 | ||
|
4aef6ea979 | ||
|
d2a3496149 | ||
|
879c92e8a2 | ||
|
2ae6b8a5ed | ||
|
2cf586a372 | ||
|
99164cd20b | ||
|
1628a28e0c | ||
|
aa21bc2a73 | ||
|
cb7bb31129 | ||
|
c9733ad719 | ||
|
d7aa3aab5e | ||
|
95a74c7472 | ||
|
23363efaaa | ||
|
3e7a0a3746 | ||
|
24cf7f1d29 | ||
|
fd55d64996 | ||
|
5e52734c24 | ||
|
0fc37fb397 | ||
|
17991823ea | ||
|
3f91405acb | ||
|
e14c3f3b77 | ||
|
d5dc70cbe3 | ||
|
5cc1eb27c7 | ||
|
a45f03a5af | ||
|
b0fd3b2bf0 | ||
|
10453b6752 | ||
|
99c102344e | ||
|
16ae99eec8 | ||
|
38c2d4da35 | ||
|
ccd2ca55d4 | ||
|
fa003bb5fd | ||
|
b6999237f4 | ||
|
d9fef488af | ||
|
519db8e3b2 | ||
|
02f7baa0a5 | ||
|
b8ddd32922 | ||
|
7779dae2cc | ||
|
fa2edf5187 | ||
|
37fa5e56f3 | ||
|
82fff947c6 | ||
|
51f8f642de | ||
|
ba576f823b | ||
|
74c4b92760 | ||
|
6bfca76f1c | ||
|
8f690d3475 | ||
|
56c3a66c28 | ||
|
f4bdfda69d | ||
|
1d9fb6b4ec | ||
|
0cfa843677 | ||
|
2bf4e8d3d0 | ||
|
730d2d5d19 | ||
|
80149d0c87 | ||
|
cd4958f72c | ||
|
2c7495e1c7 | ||
|
57ba746f51 | ||
|
dfb7cc625a | ||
|
8af9a0054c | ||
|
e3d81812fa | ||
|
1a09f9005c | ||
|
7ae12df3d2 | ||
|
48d767a36e | ||
|
1842323ca9 | ||
|
1ce0c76e14 | ||
|
bf6d501ab1 | ||
|
138f123bd8 | ||
|
69cbb4ac1d | ||
|
9b9f30bbb9 | ||
|
6f81a2f5b8 | ||
|
74bc2d130d | ||
|
5b9c835127 | ||
|
0ad81a4cdc | ||
|
8e59699424 | ||
|
88cad5523e | ||
|
cafe74a88d | ||
|
7f8968595b | ||
|
29723c97c6 | ||
|
74ae7d0339 | ||
|
050fb83dfe | ||
|
e596d2ca7e | ||
|
f351914137 | ||
|
4cf059e38f | ||
|
8f1f42cc6c | ||
|
895501743d | ||
|
593ac9ed43 | ||
|
cb4e72298b | ||
|
f88e89900f | ||
|
fc47fa06a3 | ||
|
799be4469a | ||
|
ede3963951 | ||
|
b89320ad39 | ||
|
77e00d14a1 | ||
|
92cdf08d48 | ||
|
6a3ee0996e | ||
|
26d01d4408 | ||
|
0cb83f99ab | ||
|
7520b27639 | ||
|
007457f182 | ||
|
f856cc2ef6 | ||
|
3ce5b1d386 | ||
|
372698218a | ||
|
e08e22ca12 | ||
|
58e35759d9 | ||
|
b531e02871 | ||
|
a29a9266e3 | ||
|
39c62cd175 | ||
|
6f41f96444 | ||
|
3eda9cfc07 | ||
|
d13ce7f560 | ||
|
74bca1d97b | ||
|
cd60073a52 | ||
|
4cd88199c9 | ||
|
a72ea2bc98 | ||
|
6f40960071 | ||
|
43818289fe | ||
|
0d3697e40c | ||
|
c67633577f | ||
|
aef3652d7a | ||
|
a9d7b1f9a1 | ||
|
c4d3c5320e | ||
|
f5633d281e | ||
|
3e43b53a63 | ||
|
06ae98b1e5 | ||
|
92e1681761 | ||
|
37c7668193 | ||
|
a7077c9149 | ||
|
c68973a9e0 | ||
|
64d62038cd | ||
|
6155707071 | ||
|
2359d1e268 | ||
|
fb43029935 | ||
|
d03366fba2 | ||
|
eb1f15bc8b | ||
|
810016ce94 | ||
|
4be9c70827 | ||
|
4fae5eef68 | ||
|
6894477b60 | ||
|
665982bb32 | ||
|
cfaf0e1e96 | ||
|
93c4cdd1de | ||
|
a7d7083d75 | ||
|
aeb896399c | ||
|
3091efc501 | ||
|
b2b057910e | ||
|
3d893c8222 | ||
|
e8686d9dad | ||
|
815dd3591b | ||
|
39f8592312 | ||
|
f1a53659bd | ||
|
f7286e1abe | ||
|
c0ffc8386c | ||
|
69f943c8d6 | ||
|
14af18cb1b | ||
|
9830453487 | ||
|
f31da015fc | ||
|
3302305cd4 | ||
|
9d7b144c54 | ||
|
e543effc64 | ||
|
cf044c363b | ||
|
4d760630c3 | ||
|
c79992d1cc | ||
|
dee836315c | ||
|
9553b2239c | ||
|
0a5d2a84d1 | ||
|
0579795a17 | ||
|
65921ae67a | ||
|
b371d62dd3 | ||
|
00f792f16f | ||
|
4c765bb206 | ||
|
6370ef2705 | ||
|
52bd8c307f | ||
|
f00f3ad8ea | ||
|
91155d1330 | ||
|
2d989d4322 | ||
|
edd5866a6e | ||
|
2b3effb13c | ||
|
f3c9133a6c | ||
|
0d3e9bf446 | ||
|
1a19388aa3 | ||
|
2918fbc970 | ||
|
945a63d204 | ||
|
0b1199f7b2 | ||
|
18ca3a32bc | ||
|
d6c3e7785d | ||
|
a63490f744 | ||
|
75a44a6970 | ||
|
bb40789552 | ||
|
baac9e5d15 | ||
|
cf49b5f46f | ||
|
da8cac280c | ||
|
6d913d3646 | ||
|
319d12bedf | ||
|
d0bbb3f7f0 | ||
|
020106eeb9 | ||
|
17451e0842 | ||
|
5e3f73c498 | ||
|
983b3d7f64 | ||
|
219bdbaf70 | ||
|
2e9e0a7d78 | ||
|
fa23def774 | ||
|
8b99f04943 | ||
|
8795362879 | ||
|
ba1464b6e0 | ||
|
cd184e4912 | ||
|
c8399b8e30 | ||
|
88b31c2ab3 | ||
|
8f6cfc77d2 | ||
|
cfb5135805 | ||
|
ff0839e76b | ||
|
cc227cc6f6 | ||
|
fa1d9a4571 | ||
|
8d33dea2cd | ||
|
7813135365 | ||
|
cafefe9379 | ||
|
27279afa1e | ||
|
607761e830 | ||
|
7e18d2b861 | ||
|
4effe8fb8b | ||
|
234edf674c | ||
|
e40abfbde9 | ||
|
1657339e6d | ||
|
d86fccf9c9 | ||
|
893469c652 | ||
|
c3f3435228 | ||
|
ab8ecf5b92 | ||
|
3100b9bb7c | ||
|
768932a3f2 | ||
|
8cf22f5529 | ||
|
7fa14e654a | ||
|
d16b160d5c | ||
|
cdacbd07f8 | ||
|
dda1e13126 | ||
|
1f677d5de3 | ||
|
4e69fe6859 | ||
|
3ad5c45097 | ||
|
39f6d58315 | ||
|
f7c1341402 | ||
|
e43b7813a5 | ||
|
1dc1583b92 | ||
|
091119605a | ||
|
75ef0fde82 | ||
|
b957639abb | ||
|
8017469e59 | ||
|
57d157a723 | ||
|
3a92623dfa | ||
|
ee91656968 | ||
|
4c1bde350a | ||
|
4b42646f36 | ||
|
6d9e9d1901 | ||
|
3cd8c2507d | ||
|
6698a9cbd6 | ||
|
88aacd0f2c | ||
|
b515f5462e | ||
|
f94f872624 | ||
|
d4bbfae0d5 | ||
|
cacb9f2ec5 | ||
|
b38fbc6d25 | ||
|
12882084d4 | ||
|
b4dcd4193e | ||
|
26e84b12e8 | ||
|
86f8851c40 | ||
|
b197ea56c2 | ||
|
dad7aa9593 | ||
|
13b718e720 | ||
|
b571b3e032 | ||
|
81f9385477 | ||
|
e0869b39a3 | ||
|
138d1050fc | ||
|
a1febdd429 | ||
|
4bc11db0ff | ||
|
5b66413f69 | ||
|
cc2ecc9171 | ||
|
79ad3a3f32 | ||
|
fc2af460ee | ||
|
19ce73c884 | ||
|
8a84f42f7d | ||
|
7965387201 | ||
|
0df7e5eefa | ||
|
12530a763b | ||
|
9c0f75fd65 | ||
|
410028eecf | ||
|
94fead702a | ||
|
1b390f0b49 | ||
|
c8564e6ce9 | ||
|
1ad97424a4 | ||
|
9006984d5a | ||
|
7b3f6cb219 | ||
|
05515e0510 | ||
|
eb8b1c333f | ||
|
94a0b7ef2e | ||
|
92373e6d46 | ||
|
d28ec48675 | ||
|
3801101f3b | ||
|
4e2437a6c1 | ||
|
85bdc65df1 | ||
|
cf5f0cce83 | ||
|
1061e881bd | ||
|
5c7f5f0516 | ||
|
d938d5d399 | ||
|
bcaf65d7cd | ||
|
8e5eacf692 | ||
|
1daefc6177 | ||
|
a73bc353d6 | ||
|
6cde745e28 | ||
|
0f2e45800e | ||
|
0d41385344 | ||
|
dc9a771473 | ||
|
0d4089da7f | ||
|
d602f74866 | ||
|
34491f5569 | ||
|
7ae871dfae | ||
|
afc35f610d | ||
|
e4e854863f | ||
|
c0507c6a9e | ||
|
29a23ae217 | ||
|
2ffdf56bfe | ||
|
d221d2f7e8 | ||
|
4499be5795 | ||
|
4f8bb02a57 | ||
|
4491746c73 | ||
|
7a36c3b34b | ||
|
81f682a812 | ||
|
53e0e3240c | ||
|
efc443aac9 | ||
|
03da3c7c4c | ||
|
d4f1b92479 | ||
|
0d104b00c8 | ||
|
e7ab7f5f7a | ||
|
fa5c7f6440 | ||
|
5d66faafc1 | ||
|
540ca1a8d8 | ||
|
91b415dd01 | ||
|
4592076366 | ||
|
9f9e4ad3d8 | ||
|
15d0fe7d9f | ||
|
dc149a43e4 | ||
|
3c7dfc7e19 | ||
|
57accade85 | ||
|
1680b3a2a7 | ||
|
b18b3363e9 | ||
|
6330153937 | ||
|
106cec9a92 | ||
|
a91131c55e | ||
|
a6dd3d0c65 | ||
|
02a8cebd65 | ||
|
702985c927 | ||
|
a7e709d920 | ||
|
2a0c9e4026 | ||
|
c211492092 | ||
|
2973ccbd48 | ||
|
386883cda1 | ||
|
7a40ab8f7a | ||
|
83fa6cffc3 | ||
|
18f19b03ab | ||
|
66553fb857 | ||
|
cad3e4cb45 | ||
|
3df8b214cc | ||
|
f9dbe33fa7 | ||
|
b85cd7a431 | ||
|
32e15315a8 | ||
|
abc0c336af | ||
|
43fc8142f5 | ||
|
04e8468d28 | ||
|
eb4660f4ef | ||
|
f997199679 | ||
|
ec3f4db425 | ||
|
66867b5ac0 | ||
|
cc87d553d0 | ||
|
08ca84a3e7 | ||
|
bb7e8bb424 | ||
|
edb745e951 | ||
|
5653be8e16 | ||
|
7ebec68616 | ||
|
e0bb46c852 | ||
|
d59a894cd3 | ||
|
25902c3bfc | ||
|
bd2fd4ec1d | ||
|
9c6339fb57 | ||
|
b960dd4e0d | ||
|
381ebcf195 | ||
|
c38b083057 | ||
|
65ec47abfa | ||
|
7e01850a42 | ||
|
efc7aa00cd | ||
|
f51b2f8fec | ||
|
0648923b19 | ||
|
49c89023fc | ||
|
106cf14d27 | ||
|
b4949675bf | ||
|
627e2644a2 | ||
|
13ca659f1f | ||
|
afa377d028 | ||
|
7c84cb5f5f | ||
|
d80be455b9 | ||
|
e9ae88338b | ||
|
82fa4eff7e | ||
|
825d44fcc2 | ||
|
03b1f500e7 | ||
|
0f86034f03 | ||
|
b3cdd1d169 | ||
|
dcceeb8012 | ||
|
83f955a2c5 | ||
|
e327baaa89 | ||
|
2bba22e9d3 | ||
|
2231488543 | ||
|
0690e9f103 | ||
|
7f56c05f24 | ||
|
b0940f52e5 | ||
|
91b20ddba5 | ||
|
16c5352a12 | ||
|
1ace10ab92 | ||
|
7f7a0d8b9f | ||
|
e9319ee2aa | ||
|
bb733b0204 | ||
|
8ebc8ec182 | ||
|
4b2ff05a3b | ||
|
1ff0f221fa | ||
|
b7459cc5f7 | ||
|
b1608ae860 | ||
|
fdfd4ce5fd | ||
|
f926acf1b8 | ||
|
e11f9afdce | ||
|
271c277ecc | ||
|
ae8eee16cc | ||
|
99db533524 | ||
|
0e85704d75 | ||
|
91fd6df430 | ||
|
db352c17f8 | ||
|
d60ffdd55c | ||
|
773561f862 | ||
|
e4707a8be7 | ||
|
e6572b766f | ||
|
9efb080875 | ||
|
00f7db66f2 | ||
|
fd728c2815 | ||
|
5b5c227423 | ||
|
919ba8eb3f | ||
|
f2110183e0 | ||
|
1fa77c2fd5 | ||
|
787245a113 | ||
|
71df03960c | ||
|
5fefdecc50 | ||
|
b2a65ac76d | ||
|
cf4e6d8a3e | ||
|
02bba23844 | ||
|
a275d17625 | ||
|
f22081d21e | ||
|
b261a1a31a | ||
|
5eeb870442 | ||
|
ca2d6a01f1 | ||
|
8ec737e9c4 | ||
|
f610f44a4e | ||
|
0c93e92eef | ||
|
77c9422630 | ||
|
7e4460dbc9 | ||
|
c916d49ddd | ||
|
0d602e1722 | ||
|
fa253b8b58 | ||
|
7ca9c33157 | ||
|
d8ac2cc5f0 | ||
|
f5d86d0604 | ||
|
cb7604dcd8 | ||
|
96eab49a7a | ||
|
984fd07319 | ||
|
cf4b639be5 | ||
|
b9b1e13e70 | ||
|
ffa6f3448f | ||
|
44c8126323 | ||
|
172e3c07d6 | ||
|
fe0932fdf0 | ||
|
84ff04056a | ||
|
1ae42ae6ba | ||
|
cdc23a9877 | ||
|
f249287dc9 | ||
|
a5ef6c3b20 | ||
|
d59482366a | ||
|
0e067ec3c2 | ||
|
fc5a68c2cf | ||
|
9f3b159998 | ||
|
29df4b5c60 | ||
|
1ffa586583 | ||
|
237af043d6 | ||
|
18fb3d86cd | ||
|
578f9dffa6 | ||
|
fd7e29131e | ||
|
b7069f395b | ||
|
e0ecd3e118 | ||
|
d5c2bbf620 | ||
|
8c01ed578d | ||
|
ad5ed9d0ee | ||
|
1320bb7bf8 | ||
|
6a4ca8cad9 | ||
|
67fde80fbb | ||
|
ee2d4f627a | ||
|
b43907d69e | ||
|
e2fe25fbdc | ||
|
4e85731a5f | ||
|
c4c22d4421 | ||
|
7de078b26e | ||
|
d37e8dd6d3 | ||
|
d3f1b60292 | ||
|
6458a1a16a | ||
|
4ac9bde2d1 | ||
|
882cb084d7 | ||
|
dd0606a317 | ||
|
1b0821a11b | ||
|
bb1b52947e | ||
|
2bae5298e0 | ||
|
bd6e27d9c5 | ||
|
1d349ee5a8 | ||
|
63b9b91dee | ||
|
aa0c70058b | ||
|
48e5e56146 | ||
|
79f757d4b7 | ||
|
2d6df4c7fc | ||
|
1e8c257bd4 | ||
|
d2eebd7682 | ||
|
bf3bac8772 | ||
|
74785a8bda | ||
|
62a51e681e | ||
|
4bb98fb046 | ||
|
bc7aebe0fb | ||
|
f8eb154714 | ||
|
bf61602a28 | ||
|
5223f7558b | ||
|
c090e1c9e9 | ||
|
7cc45ee0d5 | ||
|
47edadfc9e | ||
|
25bd58d2f9 | ||
|
c9e22ac509 | ||
|
d724c3afac | ||
|
b65cf4c8d6 | ||
|
cab3b1bf7b | ||
|
939bb65b17 | ||
|
7232ca4102 | ||
|
b774520621 | ||
|
a9d7c90f2a | ||
|
8475a8bec5 | ||
|
4adfa46850 | ||
|
4e0717b4d7 | ||
|
11750bdccc | ||
|
76cc7be4d2 | ||
|
2569d7460a | ||
|
ef977abe59 | ||
|
cd3d23810f | ||
|
6cab45b28e | ||
|
32f37bf938 | ||
|
025649e14c | ||
|
ef544ee095 | ||
|
8a5e3781d5 | ||
|
418c3d546a | ||
|
bf2125f0f7 | ||
|
76167c6b91 | ||
|
a33b0f015a | ||
|
41250044f8 | ||
|
eaf5ba7f50 | ||
|
f1998ddbc7 | ||
|
b9f4240c10 | ||
|
cbcc48b8e3 | ||
|
065bcde662 | ||
|
b5cefc400e | ||
|
c8828473a8 | ||
|
2dee57fd43 | ||
|
fc9b126691 | ||
|
57879d508a | ||
|
28801d0198 | ||
|
a4f7002995 | ||
|
72479e13ab | ||
|
eb0ffd3503 | ||
|
cdfbd82504 | ||
|
5b701dc3ed | ||
|
7f3d6150fc | ||
|
4f4c3220ad | ||
|
928ee43881 | ||
|
d783211f82 | ||
|
e03e213d0b | ||
|
905d93ccee | ||
|
5b5ed96bc5 | ||
|
b64159c001 | ||
|
c6e946c65f | ||
|
fe425dedff | ||
|
f7578e29b3 | ||
|
60811a507e | ||
|
3c60cfd863 | ||
|
a7258fc6ce | ||
|
d2b5d77b2c | ||
|
c07540163c | ||
|
c93164db58 | ||
|
2d1e426ba7 | ||
|
759f8d5c2c | ||
|
d44b6ba5ca | ||
|
6585d938d2 | ||
|
16ab0d8c26 | ||
|
26e052bb26 | ||
|
893d0ae96f | ||
|
ffc137986f | ||
|
a9f4e00234 | ||
|
27e1f1319f | ||
|
6b6705b852 | ||
|
b1ae6f6407 | ||
|
f11ef89c65 | ||
|
4ddd116cd4 | ||
|
116744d4e5 | ||
|
7a2fb9f123 | ||
|
a2b6605ce8 | ||
|
57eb02bf2c | ||
|
b1a4de3166 | ||
|
6e8b59dce3 | ||
|
d270f736e3 | ||
|
7b10f859de | ||
|
324c913ac9 | ||
|
f0287f7e57 | ||
|
2159e4f285 | ||
|
ebe83769e6 | ||
|
83dfe0d22c | ||
|
7da88f9103 | ||
|
e0ce73e3b8 | ||
|
67449f8f1b | ||
|
b5e5ed0033 | ||
|
e4681f0929 | ||
|
00a4ace573 | ||
|
44cc8153cd | ||
|
9b62500a10 | ||
|
94c28efe07 | ||
|
5e81b058cf | ||
|
46110d8cef | ||
|
f6fa52540c | ||
|
0d407f10d0 | ||
|
f670aefd36 | ||
|
5a4a1e3c25 | ||
|
eded608a53 | ||
|
2c0c8a580f | ||
|
46fcf9c8e4 | ||
|
ca981b6d18 | ||
|
7faabfb532 | ||
|
820ed7a17d | ||
|
ccb78f74a4 | ||
|
4038091382 | ||
|
2d35e60443 | ||
|
437013194a | ||
|
52316bb3f5 | ||
|
4d1f6352e6 | ||
|
d987c0a118 | ||
|
129f70bf95 | ||
|
963a67332a | ||
|
0d234cabf4 | ||
|
e7dd37910c | ||
|
65d956bd81 | ||
|
3a70cb478c | ||
|
c651948cb3 | ||
|
5254ec2795 | ||
|
aa7be58d41 | ||
|
8155bc5a9d | ||
|
1e2c19f4b4 | ||
|
85549fad83 | ||
|
55ff5da70b | ||
|
761e3dd36f | ||
|
9f34aa0b79 | ||
|
3cb1b90ca6 | ||
|
e6eb11bb11 | ||
|
850741ee16 | ||
|
569a4b2091 | ||
|
a3a70e13b5 | ||
|
8a97722464 | ||
|
a8ecd30fe1 | ||
|
bc48fe1704 | ||
|
9cb6a69861 | ||
|
0a8893498d | ||
|
ff5274181c | ||
|
f49656986c | ||
|
8c3cfbb40e | ||
|
78fa3a3b03 | ||
|
6ee6245e5b | ||
|
b1367bce48 | ||
|
11dd4b54fa | ||
|
d1f1d8ade7 | ||
|
5ca7121ed2 | ||
|
bef2540d9c | ||
|
fd80535859 | ||
|
ee6167879e | ||
|
1d2201902f | ||
|
682814180c | ||
|
32bc980ca0 | ||
|
76bc4c24a5 | ||
|
d4e938b25b | ||
|
bdb84452f5 | ||
|
5f05899588 | ||
|
259929ad4e | ||
|
d3b5df2548 | ||
|
5798c8f02e | ||
|
c910ce1cc6 | ||
|
851bb9fcd8 | ||
|
a72fe8acaf | ||
|
df622a1fab | ||
|
f96cb431a9 | ||
|
59d75c1ae6 | ||
|
b8adad0d48 | ||
|
6ddb92c41e | ||
|
d1bd5962c7 | ||
|
25ae46b8df | ||
|
646d3e10d2 | ||
|
f392f55d9b | ||
|
4dce53628c | ||
|
7cc32d3843 | ||
|
dba8cf12fd | ||
|
a835189823 | ||
|
564ce6c7f6 | ||
|
ec5ca9df6b | ||
|
ddda094d3a | ||
|
9891f5a8d2 | ||
|
f18d93756c | ||
|
fad7333e72 | ||
|
657971754b | ||
|
83ca730544 | ||
|
6ac93d8a00 | ||
|
df6ce22fa3 | ||
|
c53c255c64 | ||
|
0793b49212 | ||
|
03017a8946 | ||
|
2f6b046f4b | ||
|
ae8131077e | ||
|
1564c01c38 | ||
|
200c7e3c44 | ||
|
51fb493edc | ||
|
4c3cc152c8 | ||
|
5586bcf813 | ||
|
cd9355e4dd | ||
|
d36f78b9f1 | ||
|
087e7642e7 | ||
|
c24408f6ed | ||
|
a3e8f74f72 | ||
|
f8384b7302 | ||
|
48ba841be0 | ||
|
784132d7e8 | ||
|
91b3195255 | ||
|
c75b299eb1 | ||
|
4f1056ad72 | ||
|
4dd7b4cb8f | ||
|
64657ee366 | ||
|
1d2634f0ee | ||
|
4d231112b6 | ||
|
3dd5c95b6c | ||
|
388171b482 | ||
|
bc42cbd94b | ||
|
7a39bdef89 | ||
|
9a48045254 | ||
|
a8f2e79fbc | ||
|
79d209824f | ||
|
ec15ac92f3 | ||
|
2f57bfb6f2 | ||
|
81d281f9e5 | ||
|
94e09ac041 | ||
|
7cf134c73d | ||
|
33c38b37d8 | ||
|
2fb9bfe3b3 | ||
|
67fa589ba2 | ||
|
dfbd8f7de9 | ||
|
aa8f4000d3 | ||
|
c78637da1a | ||
|
87e3560c30 | ||
|
34929033b4 | ||
|
1277d04659 | ||
|
5646d65712 | ||
|
b835f364f5 | ||
|
7147382e9e | ||
|
f6c6de4539 | ||
|
a229dd9896 | ||
|
21c5e6f149 | ||
|
dec9d24392 | ||
|
9a9b156a8e | ||
|
020d06cdaa | ||
|
7acbf98692 | ||
|
e5aa2c9ac1 | ||
|
40468a5adc | ||
|
65580f7901 | ||
|
98388b2921 | ||
|
edc1deaa3a | ||
|
4d92f9bb2e | ||
|
af43ed655b | ||
|
22004fa7d6 | ||
|
24834543ee | ||
|
17693c2802 | ||
|
a4100fe709 | ||
|
fc5be6928f | ||
|
d69a7c620a | ||
|
ac90190682 | ||
|
0f16fd3519 | ||
|
405ef39828 | ||
|
f7723b3e95 | ||
|
b343920071 | ||
|
f08cbc73de | ||
|
7027489c8e | ||
|
12721f654e | ||
|
18daf6345f | ||
|
c6c2a23ecb | ||
|
9cdeb51a52 | ||
|
841061426d | ||
|
5ab4dc2983 | ||
|
32af9e8865 | ||
|
df76799d4b | ||
|
1dd25ce62d | ||
|
1b60613319 | ||
|
afae883619 | ||
|
57ab0816e2 | ||
|
1b97506ec5 | ||
|
4c565774bf | ||
|
e552287128 | ||
|
d7a38fd7ef | ||
|
b90e01392c | ||
|
c489b189df | ||
|
36e96bbc6a | ||
|
9bed2b119c | ||
|
16a46e6a24 | ||
|
51b985399d | ||
|
25c738ccdb | ||
|
bda64edae8 | ||
|
ffe691db10 | ||
|
23475abab3 | ||
|
dc112092e0 | ||
|
dd1c12c758 | ||
|
80a335f538 | ||
|
2163059632 | ||
|
921603b09e | ||
|
7255ef4f6d | ||
|
bbf3864cb4 | ||
|
3d65c3c104 | ||
|
b1d6c0a7a1 | ||
|
14fc25b252 | ||
|
3b15fe0a5b | ||
|
0c23d6c069 | ||
|
c8ad006b71 | ||
|
904bcb86a0 | ||
|
e6ed55a9c1 | ||
|
47dc492839 | ||
|
441755bf17 | ||
|
a25238e0c1 | ||
|
5a5560d200 | ||
|
9399c7c46b | ||
|
c4b3d3a089 | ||
|
e4497f4a15 | ||
|
e6219c83c7 | ||
|
a875075cc8 | ||
|
5e2bbdb22b | ||
|
b10654e9a5 | ||
|
df92b7bdf2 | ||
|
5dee60e54e | ||
|
1b88f5a316 | ||
|
a7bc76d246 | ||
|
a0f6e185ca | ||
|
786078d423 | ||
|
510248da28 | ||
|
cb56ab2dbd | ||
|
11262afa93 | ||
|
15a5d2c4bf | ||
|
d11a0097d0 | ||
|
366107a54c | ||
|
361f6fc16c | ||
|
df93856ac4 | ||
|
24520f26ad | ||
|
69449417ba | ||
|
53a6cd607e | ||
|
6902ecf6a9 | ||
|
c1e198e721 | ||
|
f3ab9da0e9 | ||
|
26b922ac3f | ||
|
0cf741f343 | ||
|
1abf7ad809 | ||
|
aba31aeff9 | ||
|
676daf3076 | ||
|
622da172d2 | ||
|
5af3cfe9ca | ||
|
f3a3ec438f | ||
|
bd8e5ff79e | ||
|
ed53cef0aa | ||
|
bf137b7005 | ||
|
30c46a6e0c | ||
|
0f3378ca28 | ||
|
bcbbeacaf8 | ||
|
d3718bf5d4 | ||
|
17b17bc939 | ||
|
6c7f49f561 | ||
|
ecb29e6027 | ||
|
c717e44094 | ||
|
42707053a2 | ||
|
23d2798b6d | ||
|
0588ba25cb | ||
|
5c009997b2 | ||
|
0e861ac3ab | ||
|
65020fd5c1 | ||
|
0e02f5cb0b | ||
|
18fedfce17 | ||
|
ffcd307746 | ||
|
df78a3a62d | ||
|
3c04e6db97 | ||
|
36a4c410ce | ||
|
181f2551cf | ||
|
d13efa41c5 | ||
|
15992ceff9 | ||
|
50bdb5da89 | ||
|
67fe441f7e | ||
|
e1ae8c6a71 | ||
|
8eee36dc0f | ||
|
57bd0c74e5 | ||
|
b414a4d107 | ||
|
e685c1c005 | ||
|
14891cdf4e | ||
|
c3a4312650 | ||
|
b32bf5aa35 | ||
|
01fb5532cf | ||
|
92f99c97f4 | ||
|
72fbd4dffa | ||
|
90f5e4e2b1 | ||
|
56c202127c | ||
|
5e97dd74c7 | ||
|
9dfb059e2e | ||
|
ee478ec4f4 | ||
|
03f117ea30 | ||
|
4890006cbb | ||
|
afc856417f | ||
|
a970219d61 | ||
|
e1e84f9bd0 | ||
|
4229490725 | ||
|
ab9d4b3b63 | ||
|
cd694e9b9d | ||
|
8538561b31 | ||
|
74f537e89d | ||
|
ba5c7d8e63 | ||
|
e9c584af6a | ||
|
2b37a4fe56 | ||
|
97be6e7946 | ||
|
8c1866bc0c | ||
|
60eff4e59a | ||
|
180e97abdc | ||
|
732fd5980e | ||
|
c617400f95 | ||
|
2a703b4055 | ||
|
be3a0b269a | ||
|
1359cf6547 | ||
|
42cf9a9895 | ||
|
e00c5544d2 | ||
|
c9b9016ca8 | ||
|
d7299f5071 | ||
|
01fe91c5c4 | ||
|
0a945100fd | ||
|
6a7c853828 | ||
|
69616db1ed | ||
|
a469e80493 | ||
|
95cf47c4ef | ||
|
951b7b22e0 | ||
|
9a25e4ad89 | ||
|
7a2348bf7f | ||
|
c3fe0d99f9 | ||
|
480978db41 | ||
|
a1731d5e6e | ||
|
5b752a2fed | ||
|
b48b909773 | ||
|
b4f95deefc | ||
|
b720edb05b | ||
|
d968d35271 | ||
|
cdeffdd59f | ||
|
9a52bd0301 | ||
|
c54683be8c | ||
|
54ef781d72 | ||
|
410f1fdbc0 | ||
|
7442cd214c | ||
|
90c8803d59 | ||
|
7f0f08bcc4 | ||
|
4c076bfdc1 | ||
|
c298c9d6d0 | ||
|
cdbb609c20 | ||
|
ea3d755962 | ||
|
3f27cb2ea7 | ||
|
c1d6aceb03 | ||
|
8a07e8a4f8 | ||
|
d1cf7ff24a | ||
|
fc9516a2e3 | ||
|
e4488fe788 | ||
|
5e258a0a90 | ||
|
5d8ddc7480 | ||
|
b1c594229e | ||
|
7c9002398a | ||
|
2c25a4bbb2 | ||
|
b88582199d | ||
|
03c52e79b9 | ||
|
41184e5d76 | ||
|
d7287ec633 | ||
|
500f0c05db | ||
|
7dd06e8113 | ||
|
f6a48b495e | ||
|
0491bfbc2d | ||
|
5a4938c270 | ||
|
7a3d6a8168 | ||
|
e6a6f00562 | ||
|
e80253209f | ||
|
b86289fdd3 | ||
|
59d4e905ba | ||
|
bbde10b410 | ||
|
8b3d068e83 | ||
|
b017f54ac9 | ||
|
84c59a1c20 | ||
|
90ff30b7a0 | ||
|
23765fa668 | ||
|
5ec1c88795 | ||
|
053cf790a9 | ||
|
f204ce6825 | ||
|
7e934c6362 | ||
|
217e77d16b | ||
|
d2778e67ea | ||
|
af4c2a3eb1 | ||
|
2831a3a9a9 | ||
|
49b639dd95 | ||
|
bce138ca14 | ||
|
e043dc316a | ||
|
fbca4e9c7b | ||
|
d917b2d737 | ||
|
bb9c8ca563 | ||
|
6c45754a43 | ||
|
859149f5c3 | ||
|
291a1fff1f | ||
|
b02cec86d4 | ||
|
396af3853f | ||
|
87aa611a8e | ||
|
7b4cdc94a8 | ||
|
cdb57aaa64 | ||
|
cb94085323 | ||
|
4340e5a217 | ||
|
9d55794e33 | ||
|
88602d138c | ||
|
2ed9b3e1d5 | ||
|
1b12884c7d | ||
|
c9c19874d6 | ||
|
d722eeb64b | ||
|
05dce726d0 | ||
|
1a637a3860 | ||
|
b88f35caef | ||
|
794c0f6b68 | ||
|
f7e37dae86 | ||
|
e71911a8d2 | ||
|
fd03ecad01 | ||
|
6f3b06e2b5 | ||
|
babfd0075d | ||
|
0e731ca5dd | ||
|
2847b2125e | ||
|
6c04e7ed80 | ||
|
81ca3d202e | ||
|
371e54e054 | ||
|
5cdf27edef | ||
|
2e5217f773 | ||
|
7b1d9fbbe2 | ||
|
225482c06a | ||
|
dd1532a72c | ||
576de284a7 | |||
|
48e6126094 | ||
71b35a924f | |||
|
e1aff2841b | ||
|
5d9a9d6874 | ||
2299c40137 | |||
|
f7180f4430 | ||
|
516282dfa9 | ||
|
414d8a41e5 | ||
|
46dbdfdef4 | ||
|
3b7414fca8 | ||
|
e3b460a518 | ||
|
857271ebbd | ||
|
ec3dac0595 | ||
a009614afb | |||
|
ac26bb458f | ||
|
6ff403c9f8 | ||
|
9819700247 | ||
|
01ef46a510 | ||
|
832b09d60d | ||
|
52546e8d15 | ||
|
a5bc7c90f5 | ||
|
257e264af7 | ||
|
76e8a9466e | ||
|
fa8dca2400 | ||
|
9b4da98653 | ||
|
ee0993a8a6 | ||
|
801f66b4a2 | ||
|
832035f744 | ||
|
a397f81a2b | ||
|
9dbbfea5fd | ||
|
ee846c461c | ||
|
5c5b0fc4be | ||
|
e87a8ef02c | ||
|
294c2c63c0 | ||
|
b9afa26280 | ||
|
d503272645 | ||
|
5f0f8c25be | ||
|
c4dfe24fec | ||
|
5ad5930c8f | ||
|
435636e626 | ||
|
9950fa34c6 | ||
|
b27b69cf37 | ||
|
4091f873ea | ||
|
b6a60d4d64 | ||
|
acabe5a013 | ||
|
6236cfc9fa | ||
|
d6aa25ede1 | ||
|
6eb061ef0c | ||
|
d56bf3b060 | ||
|
e195c91b1d | ||
|
642f940bc8 | ||
|
1722c1c819 | ||
|
2e26f86f02 | ||
|
8ac0efce65 | ||
|
f6db95914b | ||
|
2895ade566 | ||
|
6582455e5d | ||
|
0aecbfa806 | ||
|
003fe87080 | ||
|
e2d57fb4da | ||
|
5d9aef4794 | ||
|
880bace355 | ||
|
07a8d5a3dd | ||
|
940191973f | ||
|
6e9cf09adb | ||
|
105de6b637 | ||
|
931bd25e34 | ||
|
2c4c1f9257 | ||
|
0452da2bf1 | ||
|
32ee8955b2 | ||
|
59e62d271c | ||
|
d485664404 | ||
|
b8f37a5024 | ||
|
7ac8838b69 | ||
|
c439cdc618 | ||
|
8e7f2e179e | ||
|
e081531a21 | ||
|
f6700815a8 | ||
|
68b35b5845 | ||
|
41245f9f7a | ||
|
ed783506c6 | ||
|
81d3f382a9 | ||
|
46810f8747 | ||
|
9015e03d05 | ||
|
3465c5e48d | ||
|
6b5d5e1f63 | ||
|
6bfae1cd1a | ||
|
ac753fa853 | ||
|
d874c32374 | ||
|
a4742f795e | ||
|
20460dc12c | ||
|
b4b3efa45b | ||
|
ffd9437948 | ||
|
a81c857c96 | ||
|
05c88bb00d | ||
|
4776952959 | ||
|
161be96c66 | ||
|
20505ff326 | ||
|
e08395745b | ||
|
e51e7701cd | ||
|
566ddf8a4b | ||
|
4fd45adfc5 | ||
|
bef108a5cc | ||
|
a235f770f6 | ||
|
fecca4ef21 | ||
|
264ef66c5c | ||
|
2e891c5eba | ||
|
e08e1e0d9a | ||
|
8ce2f63d73 | ||
|
a27811b1d4 | ||
|
1b3b79b694 | ||
|
7de1fc40b3 | ||
|
e7b86871f0 | ||
|
1b7c840bc8 | ||
|
58bdd91d61 | ||
|
bb191a1d69 | ||
|
fdd04eef49 | ||
|
ba0072080d | ||
|
ebb4a50d9b | ||
|
bb4eb41088 | ||
|
f9764c684f | ||
|
b83163634f | ||
|
f1d5005797 | ||
|
dbe8fb6488 | ||
|
098ff47602 | ||
|
250c04c8d5 | ||
|
dfd3c4a5df | ||
|
3c02a1cff7 | ||
|
c71236ff4d | ||
|
2a59e6d486 | ||
|
3afd2c6948 | ||
|
50c6af0216 | ||
|
cd46b39967 | ||
|
e4a1f08364 | ||
|
aa4519fb44 | ||
|
889eace41c | ||
|
3cbcff56b2 | ||
|
9731f2492f | ||
|
32bffe1a32 | ||
|
7474b69175 | ||
|
2455a744e6 | ||
|
81db8a8644 | ||
|
4222510e9c | ||
|
c3a5fd30ee | ||
|
bcf4f4fbdf | ||
|
34c3732856 | ||
|
31144ed4c5 | ||
|
de8c334aeb | ||
|
e09d6c6d71 | ||
|
c901a9eb70 | ||
|
d533121741 | ||
|
b73d45ffc8 | ||
|
932b35ab7a | ||
|
cc9a1952d9 | ||
|
5e330044b8 | ||
|
0ee49ca432 | ||
|
44125f5533 | ||
|
3eb01d50cb | ||
|
f0aaecd6cc | ||
|
6343e67fab | ||
|
90d8fc7e86 | ||
|
5eb175cefd | ||
|
68744484c8 | ||
|
91a60aa878 | ||
|
25c579c00d | ||
|
46d2d97a37 | ||
|
89b35f7ab9 | ||
|
884cc2ac9b | ||
|
4c95ed0eeb | ||
|
64e6faa877 | ||
|
59a0bcd38f | ||
|
d66aadc33f | ||
|
19599b4c69 | ||
|
19d9d12339 | ||
|
1778b53f12 | ||
|
e17ffa01e6 | ||
|
a9046e5608 | ||
|
db13dc2d43 | ||
|
66e58234ec | ||
|
bfa7b28734 | ||
|
b7a1add009 | ||
|
42e7c8a440 | ||
|
013f0b62b8 | ||
|
76348ce43f | ||
|
dd63f57344 | ||
|
24e23755cf | ||
|
4707b0c18e | ||
|
3e111bb41a | ||
|
8045f63b41 | ||
|
e1328e87ce | ||
|
f179987f64 | ||
|
ccb4182d29 | ||
|
4d61788843 | ||
|
d0d9122165 | ||
|
4de440826d | ||
|
c8bb9a2d37 | ||
|
47557fd4d2 | ||
|
15d7010d46 | ||
|
ac56b71c3e | ||
|
8ea0309ed1 | ||
|
18079d01b3 | ||
|
843d6e53fb | ||
|
4880305436 | ||
|
4d0a53b5ee | ||
|
66fc086742 | ||
|
95e0340daf | ||
|
2f67eafd34 | ||
|
aca0e024fa | ||
|
e5d5d58172 | ||
|
2f312b2175 | ||
|
c284ffade9 | ||
|
fc25fe694a | ||
|
0f5814ac4f | ||
|
fada2ad261 | ||
|
cfe0b5356f | ||
|
afff4f7923 | ||
|
72dddf3aa3 | ||
|
875fcda506 | ||
|
16c95b4f83 | ||
|
0dc05a2d84 | ||
|
cb043b0e61 | ||
|
1363ee109b | ||
|
8690d25b4f | ||
|
e7e98f1de5 | ||
|
954b3c3484 | ||
|
54713dcdc7 | ||
|
14e5da90c3 | ||
|
6b2f4b6a85 | ||
|
f0509e4620 | ||
|
da256b33d9 | ||
|
d869fc9804 | ||
|
88f6caf012 | ||
|
eb7254a0c4 | ||
|
2ba6360e43 | ||
|
593e193bdc | ||
|
a0b9f7806a | ||
|
6724b79967 | ||
|
5d9948e39c | ||
|
062d8fda04 | ||
|
b939ce5940 | ||
|
2d9aa45aef | ||
|
9c61455d26 | ||
|
08a34ebe94 | ||
|
c40b2c7601 | ||
|
c0183cabd0 | ||
|
ed44235d26 | ||
|
e46745ed34 | ||
|
e629929958 | ||
|
0c2512bea2 | ||
|
bbc3105466 | ||
|
df99bdbd53 | ||
|
fc89d5d7db | ||
|
c6c4d01fe9 | ||
|
ae967d16f1 | ||
|
6da582e8be | ||
|
29716cd5d5 | ||
|
7a0b554724 | ||
|
c3db21bfa2 | ||
|
f92c96d424 | ||
|
c86f9eb25a | ||
|
58cb46d344 | ||
|
c79df9700d | ||
|
c592cab989 | ||
|
f22f89888d | ||
|
c091a04a55 | ||
|
e3fe4d7b56 | ||
|
ef753d046d | ||
|
9764a32138 | ||
|
d00f2ec183 | ||
|
e130a6bad9 | ||
|
030f9c03c6 | ||
|
4ac5d5e352 | ||
|
b64f456c40 | ||
|
097854ca85 | ||
|
24cc3fd0f9 | ||
|
0db657381b | ||
|
0e93d8386b | ||
|
881c74688b | ||
|
32882fd798 | ||
|
38cc9ce72f | ||
|
b7ae0fe4e9 | ||
|
352c69f7b2 | ||
|
d537dc60ce | ||
|
b91950d413 | ||
|
3496948b94 | ||
|
6b1f7a2d9d | ||
|
ac45f07402 | ||
|
52c3b51c95 | ||
|
6221ba4dd1 | ||
|
6d248097e5 | ||
|
4eac7dca6d | ||
|
876a6e4686 | ||
|
26057fe3ff | ||
|
4bc2158235 | ||
|
f9105084b0 | ||
|
9975d24b9d | ||
|
84e58260ae | ||
|
8d18b98e15 | ||
|
ef69f22698 | ||
|
e3420de295 | ||
|
d9c2e6cbcf | ||
|
c4b0814c62 | ||
|
539ae0ffaf | ||
|
b03a7a2c83 | ||
|
82db1c9c50 | ||
|
e66c089626 | ||
|
6c7d16894b | ||
|
7c789795fb | ||
|
d6551b1233 | ||
|
46cae83264 | ||
|
e942af5331 | ||
|
38fc35a497 | ||
|
30891ffb46 | ||
|
bb32daab63 | ||
|
879bc89524 | ||
|
b4df815547 | ||
|
a5b238019b | ||
|
491fc0516e | ||
|
c38cb1761c | ||
|
8f91e6ce8b | ||
|
a6b07eef5a | ||
|
760957e7e7 | ||
|
b7afeadd6d | ||
|
26c2efc083 | ||
|
801a44b3f0 | ||
|
4637709f0a | ||
|
160d1bfd07 | ||
|
4746a60d22 | ||
|
9e24993855 | ||
|
aaaa4f9abe | ||
|
646b16f5db | ||
|
6a5ad05d8a | ||
|
12e92fc45e | ||
|
1c59f3dbd0 | ||
|
222173adae | ||
|
c7a25c58b8 | ||
|
b6df5bdb14 | ||
|
877d852a52 | ||
|
c185e45e09 | ||
|
d819ee343a | ||
|
c2b29c317f | ||
|
af21e38c1d | ||
|
d721e94b88 | ||
|
691f682fc2 | ||
|
c1a4cb1d01 | ||
|
327f9afbc0 | ||
|
6d7e30ae99 | ||
|
0bf2c3eed5 | ||
|
cc8d22bed6 | ||
|
e36da18b1c | ||
|
82ce29ac58 | ||
|
321f7a9946 | ||
|
a11fa9c738 | ||
|
d147bdcd73 | ||
|
b1f9b39475 | ||
|
fe9c5019b6 | ||
|
b308cfe5ea | ||
|
d555e83b80 | ||
|
7499c7c884 | ||
|
9fa8bb82e4 | ||
|
0da86964d5 | ||
|
41498fe3ee | ||
|
8ade14a036 | ||
|
273d926b08 | ||
|
1d2b4ffc65 | ||
|
e6b9178c44 | ||
|
ed0a26ab16 | ||
|
63d172e379 | ||
|
36c1986986 | ||
|
2a806ddbaf | ||
|
d8b4c0db0c | ||
|
ffe17fa426 | ||
|
a625e4b48a | ||
|
a3874c2cd6 | ||
|
355d4b8ff8 | ||
|
18e0b07487 | ||
|
1326264823 | ||
|
97d180ab66 | ||
|
0f35101c49 | ||
|
d8b5594c14 | ||
|
e477b3acc8 | ||
|
e3ba934cd7 | ||
|
478708346e | ||
|
fa5845e8c5 | ||
|
58dc5a191c | ||
|
be1c550344 | ||
|
99482e9555 | ||
|
39770de921 | ||
|
032a9f58f9 | ||
|
823f2571f5 | ||
|
928fbb0126 | ||
|
cb642cff11 | ||
|
c7e8e7e0bc | ||
|
970848409d | ||
|
8196d7d711 | ||
|
528816dcbd | ||
|
9ce0873bd1 | ||
|
b3bbe57603 | ||
|
3a515bffb9 | ||
|
5fb945c220 | ||
|
e4398ef42e | ||
|
d19565756a | ||
|
3e9d15a25d | ||
|
91399fd357 | ||
|
ad93eaaaf3 | ||
|
11d097fc1a | ||
e95faaeb68 | |||
a20576fdd4 | |||
5739426136 | |||
171807213f | |||
|
38ba3dcdd9 | ||
|
43f47dba4c | ||
|
8612fc23d4 | ||
|
e11e53e11b | ||
|
9ac7c492ed | ||
|
cdd9ecdd68 | ||
|
fd23bccd4d | ||
|
e09ab8a4c5 | ||
|
abacc2d07d | ||
|
b3028567c8 | ||
|
cb3cf71805 | ||
|
5f4c6e9c91 | ||
|
b22a651c5c | ||
|
f6dd150ed8 | ||
|
9674214b2f | ||
|
9afe2c9b6e | ||
|
5a3ec9901d | ||
|
03d50a2e83 | ||
|
cc127d8217 | ||
|
a2fe71a6d3 | ||
|
f9946de5b3 | ||
|
839f464b78 | ||
|
02aed4b66f | ||
|
eaa591046f | ||
|
584206b8ae | ||
|
925a135613 | ||
|
560a1b3ad4 | ||
|
1af1a96501 | ||
|
feb3987802 | ||
|
5b5463a981 | ||
|
f07c9fab2b | ||
|
fa9510be23 | ||
|
39f26c5cfd | ||
|
5f044a015e | ||
|
19c7ea3c16 | ||
|
9b596faa39 | ||
|
46f85329da | ||
|
11de6a46b1 | ||
|
8091e31666 | ||
|
738914ac83 | ||
|
492d86000e | ||
|
0d4daeb615 | ||
|
8d0c0dcbcd | ||
|
e3ebdbd79b | ||
|
3e5236dcd6 | ||
|
b6920b7ca8 | ||
|
5568b2134b | ||
|
a06ec8c7fd | ||
|
43774ef423 | ||
|
4a2a84d7a2 | ||
|
e9de68f9a3 | ||
|
a2545d1203 | ||
|
6d9d2b6be6 | ||
|
2bbfa9c29f | ||
|
53ab8886b1 | ||
|
23beaceadd | ||
|
f97d0e0195 | ||
|
2b696cc632 | ||
|
e35392cb4f | ||
|
b111e4d927 | ||
|
9be61f9e53 | ||
|
6cfb4c82dd | ||
|
472739bcbc | ||
|
53d316dc9e | ||
|
147d6fd590 | ||
|
c6442ce640 | ||
|
d79cff235c | ||
|
4515a45e0c | ||
|
a7581085e0 | ||
|
af654814f6 | ||
|
94bc65e203 | ||
|
c71b1245ec | ||
|
eca2db4afe | ||
|
a5057c9f25 | ||
|
b3ff3be0dc | ||
|
c6870ac3fe | ||
|
b64686073a | ||
|
492063cec6 | ||
|
a3a8fb989c | ||
|
5193160546 | ||
|
f7c41e1db7 | ||
|
da5c36fdeb | ||
|
c57c1f3fc6 | ||
|
559313eda6 | ||
|
ae48c8ee9e | ||
|
10f81ee79f | ||
|
144effd74c | ||
|
6a9304021f | ||
|
4349bec316 | ||
|
d07e152ea7 | ||
|
f9192bed79 | ||
|
6df10358aa | ||
|
3dd9040cc1 | ||
|
db8c557e4c | ||
|
60bd1edcb5 | ||
|
d9567f121b | ||
|
0a6db697e6 | ||
|
9f8d258de4 | ||
|
d0d1ab5471 | ||
|
23141a2c51 | ||
|
62e0c325b4 | ||
|
c52a7e9a08 | ||
|
865123ffda | ||
|
5cfa354433 | ||
|
568fb83373 | ||
|
5d1d32a65b | ||
|
9d005973b0 | ||
|
0307d1f4aa | ||
|
c4e02a1916 | ||
|
2e1cd98a5a | ||
|
39490abfff | ||
|
c8fd9f4266 | ||
|
b1ab74b043 | ||
|
07fd270530 | ||
|
f0a82396d4 | ||
|
7f991e8480 | ||
|
ac32927566 | ||
|
b853845069 | ||
|
be78817d27 | ||
|
965ab55394 | ||
|
f493509eb2 | ||
|
93a2407f65 | ||
|
5003595ed6 | ||
|
72e2af08e1 | ||
|
24fda6671d | ||
|
2f6c8a0164 | ||
|
ca8cc03763 | ||
|
35a62ed008 | ||
|
3b46681652 | ||
|
6606e4bffe | ||
|
723e38ece2 | ||
|
6ebc26e330 | ||
|
f0eb18fffd | ||
|
021c186be9 | ||
|
4f9c3b8f5c | ||
|
a45bca7c49 | ||
|
1f3498c0d6 | ||
|
a0b5877217 | ||
|
6482e72e7c | ||
|
25052e1f67 | ||
|
4cc06650d4 | ||
|
92271af9cd | ||
|
ee781806eb | ||
|
5324afeffd | ||
|
0434ccf303 | ||
|
2ba97da524 | ||
|
aa4495b8ad | ||
|
8a3c323933 | ||
|
54f94e0d42 | ||
|
1a09d0e238 | ||
|
75e7ffc317 | ||
|
1ceddd9eec | ||
|
0e0c8d7819 | ||
|
bae824e818 | ||
|
517f253532 | ||
|
89b37954f9 | ||
|
07633a66e8 | ||
|
ee82970d96 | ||
|
f7a28642fe | ||
|
d62068cfad | ||
|
872ad322ec | ||
|
a6f2f7e9a9 | ||
|
c089fe8e39 | ||
|
cb2d1bd4fc | ||
|
5bd9d461e0 | ||
|
33de245e64 | ||
|
e5c6cac09a | ||
|
bba33ead30 | ||
|
1d098379d9 | ||
|
c115ad2b8f | ||
|
df3ac64083 | ||
|
204b5f579e | ||
|
9e389e8a5b | ||
|
f03e986f81 | ||
|
df24e4feaf | ||
|
c2f2bff2ae | ||
|
cdc96b0c7d | ||
|
27fa1a69e8 | ||
|
e57981d1f5 | ||
|
9e64c3bd84 | ||
|
8f5155d272 | ||
|
47ce0f2a93 | ||
|
2ec1d92388 | ||
|
2c3c97b8ee | ||
|
83cf74de2b | ||
|
e8f01ff74b | ||
|
e01171ca85 | ||
|
22621e0439 | ||
|
6b99b85c8f | ||
|
a4727a0f81 | ||
|
14e21a1a38 | ||
|
14b5aab07f | ||
|
d49806a043 | ||
|
576722cead | ||
|
c02fedb6c7 | ||
|
9bcb25cd10 | ||
|
30b83896a1 | ||
|
68cac354aa | ||
|
c0e9bc5126 | ||
|
e1ae09a787 | ||
|
68393ecc1c | ||
|
a0531a990b | ||
|
c6e176d88e | ||
|
7332b3b741 | ||
|
1802b9ff92 | ||
|
6c321c53a1 | ||
|
964e9cf3ef | ||
|
e3b07a88f4 | ||
|
037aea067b | ||
|
d26f66703b | ||
|
64b4a8bd44 | ||
|
4bb3266cc6 | ||
|
c0836e8835 | ||
|
aec50a4328 | ||
|
52c13bc741 | ||
|
8adf583bdf | ||
|
99c608e88c | ||
|
63be6762f3 | ||
|
67e8cbdd00 | ||
|
6b519c8bdf | ||
|
f90bab90c7 | ||
|
5a429ee61e | ||
|
338559baca | ||
|
98a2e3b938 | ||
|
7bf1e08a35 | ||
|
46a07c94ba | ||
|
0cdf46db0f | ||
|
43598d7727 | ||
|
700347738c | ||
|
d5a7d20579 | ||
|
199bb13660 | ||
|
8d12b40fc4 | ||
|
ac5995551b | ||
|
3ddedd5ff2 | ||
|
6c2760a736 | ||
|
6485d66743 | ||
|
a94c760650 | ||
|
d78df35da9 | ||
|
141eeec915 | ||
|
615b0d4e37 | ||
|
b0e185e7db | ||
|
b21ca5be71 | ||
|
7e97da5285 | ||
|
e2ef990121 | ||
|
4ff33f5d49 | ||
|
21ce021519 | ||
|
7ecd17a993 | ||
|
0aef1e57a7 | ||
|
438f31326a | ||
|
b5535db081 | ||
|
f1e54d97fc | ||
|
e02e530204 | ||
|
aadda93973 | ||
|
4319ebbaf6 | ||
|
19c923cf1b | ||
|
7068d8b462 | ||
|
80d429a02d | ||
|
5cfa0ec0c3 | ||
|
108312d52a | ||
|
c9f68f0b5c |
18
.gitignore
vendored
Normal file
18
.gitignore
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
*~
|
||||
/phpunit.xml
|
||||
/phpBB/cache/*.html
|
||||
/phpBB/cache/*.php
|
||||
/phpBB/cache/queue.php.lock
|
||||
/phpBB/composer.phar
|
||||
/phpBB/config.php
|
||||
/phpBB/config_dev.php
|
||||
/phpBB/config_test.php
|
||||
/phpBB/ext/*
|
||||
/phpBB/files/*
|
||||
/phpBB/images/avatars/gallery/*
|
||||
/phpBB/images/avatars/upload/*
|
||||
/phpBB/store/*
|
||||
/phpBB/vendor
|
||||
/tests/phpbb_unit_tests.sqlite2
|
||||
/tests/test_config.php
|
||||
/tests/tmp/*
|
27
.travis.yml
Normal file
27
.travis.yml
Normal file
@@ -0,0 +1,27 @@
|
||||
language: php
|
||||
php:
|
||||
- 5.2
|
||||
- 5.3.3
|
||||
- 5.3
|
||||
- 5.4
|
||||
|
||||
env:
|
||||
- DB=mysql
|
||||
- DB=postgres
|
||||
|
||||
before_script:
|
||||
- sh -c "if [ '$DB' = 'pgsql' ]; then psql -c 'DROP DATABASE IF EXISTS phpbb_tests;' -U postgres; fi"
|
||||
- sh -c "if [ '$DB' = 'pgsql' ]; then psql -c 'create database phpbb_tests;' -U postgres; fi"
|
||||
- sh -c "if [ '$DB' = 'mysql' ]; then mysql -e 'create database IF NOT EXISTS phpbb_tests;'; fi"
|
||||
- sh -c "if [ '$TRAVIS_PHP_VERSION' = '5.2' ]; then pear install --force phpunit/DbUnit; else pyrus install --force phpunit/DbUnit; fi"
|
||||
- phpenv rehash
|
||||
|
||||
script:
|
||||
- phpunit --configuration travis/phpunit-$DB-travis.xml
|
||||
|
||||
notifications:
|
||||
email:
|
||||
recipients:
|
||||
- dev-team@phpbb.com
|
||||
on_success: change
|
||||
on_failure: change
|
26
README.md
Normal file
26
README.md
Normal file
@@ -0,0 +1,26 @@
|
||||
[](http://www.phpbb.com)
|
||||
|
||||
## ABOUT
|
||||
|
||||
phpBB is a free 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).
|
||||
|
||||
## 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)
|
||||
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.
|
||||
develop - [](http://travis-ci.org/phpbb/phpbb3)
|
||||
develop-olympus - [](http://travis-ci.org/phpbb/phpbb3)
|
||||
|
||||
## LICENSE
|
||||
|
||||
[GNU General Public License v2](http://opensource.org/licenses/gpl-2.0.php)
|
181
build/build.xml
Normal file
181
build/build.xml
Normal file
@@ -0,0 +1,181 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<project name="phpBB" description="The phpBB forum software" default="all" basedir="../">
|
||||
<!-- a few settings for the build -->
|
||||
<property name="newversion" value="3.0.11-RC2" />
|
||||
<property name="prevversion" value="3.0.10" />
|
||||
<property name="olderversions" value="3.0.2, 3.0.3, 3.0.4, 3.0.5, 3.0.6, 3.0.7, 3.0.7-PL1, 3.0.8, 3.0.9, 3.0.11-RC1" />
|
||||
<!-- no configuration should be needed beyond this point -->
|
||||
|
||||
<property name="oldversions" value="${olderversions}, ${prevversion}" />
|
||||
<property name="versions" value="${oldversions}, ${newversion}" />
|
||||
|
||||
<!-- These are the main targets which you will probably want to use -->
|
||||
<target name="package" depends="clean,prepare,create-package" />
|
||||
<target name="all" depends="clean,prepare,test,docs,create-package" />
|
||||
<target name="build" depends="clean,prepare,test,docs" />
|
||||
|
||||
<target name="prepare">
|
||||
<mkdir dir="build/logs" />
|
||||
<mkdir dir="build/api" />
|
||||
<mkdir dir="build/codebrowser" />
|
||||
<mkdir dir="build/coverage" />
|
||||
<mkdir dir="build/cpd" />
|
||||
<mkdir dir="build/dependencies" />
|
||||
<mkdir dir="build/new_version" />
|
||||
<mkdir dir="build/new_version/files" />
|
||||
<mkdir dir="build/new_version/patches" />
|
||||
<mkdir dir="build/new_version/release_files" />
|
||||
<mkdir dir="build/new_version/update" />
|
||||
<mkdir dir="build/old_versions" />
|
||||
<mkdir dir="build/save" />
|
||||
</target>
|
||||
|
||||
<target name="clean">
|
||||
<delete dir="build/logs" />
|
||||
<delete dir="build/api" />
|
||||
<delete dir="build/codebrowser" />
|
||||
<delete dir="build/coverage" />
|
||||
<delete dir="build/cpd" />
|
||||
<delete dir="build/dependencies" />
|
||||
<delete dir="build/new_version" />
|
||||
<delete dir="build/old_versions" />
|
||||
<delete dir="build/save" />
|
||||
</target>
|
||||
|
||||
<target name="test" depends="clean,prepare">
|
||||
<exec dir="."
|
||||
command="phpunit --log-junit build/logs/phpunit.xml
|
||||
--coverage-clover build/logs/clover.xml
|
||||
--coverage-html build/coverage"
|
||||
passthru="true" />
|
||||
</target>
|
||||
|
||||
<target name="test-slow" depends="clean,prepare">
|
||||
<exec dir="."
|
||||
command="phpunit --log-junit build/logs/phpunit.xml
|
||||
--configuration phpunit.xml.all
|
||||
--group slow
|
||||
--coverage-clover build/logs/clover-slow.xml
|
||||
--coverage-html build/coverage-slow"
|
||||
passthru="true" />
|
||||
</target>
|
||||
|
||||
<target name="docs">
|
||||
<!-- only works if you setup phpdoctor:
|
||||
git clone https://github.com/peej/phpdoctor.git
|
||||
and then create an executable phpdoctor in your path containing
|
||||
#!/bin/sh
|
||||
php -f /path/to/phpdoctor/phpdoc.php $@
|
||||
-->
|
||||
<exec dir="build"
|
||||
command="phpdoctor phpdoc-phpbb.ini"
|
||||
passthru="true" />
|
||||
</target>
|
||||
|
||||
<target name="old-version-diffs">
|
||||
<foreach list="${oldversions}" param="version" target="old-version-diff" />
|
||||
</target>
|
||||
|
||||
<!-- This target retrieves an old version from the git tag release-${version}
|
||||
and creates a diff between that release and the new one -->
|
||||
<target name="old-version-diff">
|
||||
<echo msg="Retrieving version ${version}" />
|
||||
<mkdir dir="build/old_versions/release-${version}" />
|
||||
|
||||
<phingcall target="export">
|
||||
<property name="revision" value="release-${version}" />
|
||||
<property name="dir" value="build/old_versions/release-${version}" />
|
||||
</phingcall>
|
||||
|
||||
<phingcall target="clean-diff-dir">
|
||||
<property name="dir" value="build/old_versions/release-${version}" />
|
||||
</phingcall>
|
||||
|
||||
<exec dir="build/old_versions" command="diff -crNEBwd release-${version} release-${newversion} >
|
||||
../new_version/patches/phpBB-${version}_to_${newversion}.patch" escape="false" />
|
||||
</target>
|
||||
|
||||
<target name="prepare-new-version">
|
||||
<!-- select the currently checked out commit (HEAD) for packaging -->
|
||||
<mkdir dir="build/new_version/phpBB3" />
|
||||
<phingcall target="export">
|
||||
<property name="revision" value="HEAD" />
|
||||
<property name="dir" value="build/new_version/phpBB3" />
|
||||
</phingcall>
|
||||
|
||||
<!-- copy into directory for diffs -->
|
||||
<exec dir="build" command="cp -rp new_version/phpBB3 old_versions/release-${newversion}" />
|
||||
<!-- and clean up -->
|
||||
<phingcall target="clean-diff-dir">
|
||||
<property name="dir" value="build/old_versions/release-${newversion}" />
|
||||
</phingcall>
|
||||
|
||||
<!-- create an empty config.php file (not for diffs) -->
|
||||
<touch file="build/new_version/phpBB3/config.php" />
|
||||
|
||||
</target>
|
||||
|
||||
<target name="create-package" depends="prepare-new-version,old-version-diffs">
|
||||
<exec dir="build" command="php -f package.php '${versions}' > logs/package.log" escape="false" />
|
||||
<exec dir="build" command="php -f build_diff.php '${prevversion}' '${newversion}' > logs/build_diff.log" escape="false" />
|
||||
|
||||
<exec dir="build" escape="false"
|
||||
command="diff -crNEBwd old_versions/release-${prevversion}/language new_version/phpBB3/language >
|
||||
save/save_${prevversion}_to_${newversion}/language/phpbb-${prevversion}_to_${newversion}_language.patch" />
|
||||
<exec dir="build" escape="false"
|
||||
command="diff -crNEBwd old_versions/release-${prevversion}/styles/prosilver new_version/phpBB3/styles/prosilver >
|
||||
save/save_${prevversion}_to_${newversion}/prosilver/phpbb-${prevversion}_to_${newversion}_prosilver.patch" />
|
||||
<exec dir="build" escape="false"
|
||||
command="diff -crNEBwd old_versions/release-${prevversion}/styles/subsilver2 new_version/phpBB3/styles/subsilver2 >
|
||||
save/save_${prevversion}_to_${newversion}/subsilver2/phpbb-${prevversion}_to_${newversion}_subsilver2.patch" />
|
||||
|
||||
<exec dir="build" escape="false"
|
||||
command="git shortlog --summary --numbered release-${prevversion}...HEAD >
|
||||
save/save_${prevversion}_to_${newversion}/phpbb-${prevversion}_to_${newversion}_git_shortlog.txt" />
|
||||
<exec dir="build" escape="false"
|
||||
command="git diff --stat release-${prevversion}...HEAD >
|
||||
save/save_${prevversion}_to_${newversion}/phpbb-${prevversion}_to_${newversion}_git_diffstat.txt" />
|
||||
</target>
|
||||
|
||||
<target name="changelog" depends="prepare">
|
||||
<exec dir="build" escape="false"
|
||||
command="php -f build_changelog.php '${newversion}' >
|
||||
save/changelog_${newversion}.html" />
|
||||
</target>
|
||||
|
||||
<!--
|
||||
This target can be called using phingcall to retrieve a clean
|
||||
checkout of a commit from git. It will only export the phpBB directory.
|
||||
The properties revision and dir are required.
|
||||
This target will remove directories that are not needed in distribution
|
||||
and set correct permissions.
|
||||
-->
|
||||
<target name="export">
|
||||
<exec dir="phpBB"
|
||||
command="git archive ${revision} | tar -xf - -C ../${dir}"
|
||||
checkreturn="true" />
|
||||
<delete file="${dir}/config.php" />
|
||||
<delete dir="${dir}/develop" />
|
||||
<delete dir="${dir}/install/data" />
|
||||
|
||||
<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" />
|
||||
<exec dir="${dir}" command="find . -type d|xargs chmod 755" escape="false" />
|
||||
<!-- set permissions of some directories to 777 -->
|
||||
<chmod mode="0777" file="${dir}/cache" />
|
||||
<chmod mode="0777" file="${dir}/store" />
|
||||
<chmod mode="0777" file="${dir}/files" />
|
||||
<chmod mode="0777" file="${dir}/images/avatars/upload" />
|
||||
</target>
|
||||
|
||||
<target name="clean-diff-dir">
|
||||
<delete dir="${dir}/cache" />
|
||||
<delete dir="${dir}/docs" />
|
||||
<delete dir="${dir}/files" />
|
||||
<delete dir="${dir}/install" />
|
||||
<delete dir="${dir}/store" />
|
||||
</target>
|
||||
|
||||
</project>
|
53
build/build_changelog.php
Executable file
53
build/build_changelog.php
Executable file
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package build
|
||||
* @copyright (c) 2011 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
if ($_SERVER['argc'] != 2)
|
||||
{
|
||||
echo "Please specify the new version as argument (e.g. build_changelog.php '1.0.2').\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$fixVersion = $_SERVER['argv'][1];
|
||||
|
||||
$query = 'project = PHPBB3
|
||||
AND resolution = Fixed
|
||||
AND fixVersion = "' . $fixVersion . '"
|
||||
AND status IN ("Unverified Fix", Closed)';
|
||||
|
||||
$url = 'http://tracker.phpbb.com/sr/jira.issueviews:searchrequest-xml/temp/SearchRequest.xml?jqlQuery=' . urlencode($query) . '&tempMax=1000';
|
||||
$xml = simplexml_load_string(file_get_contents($url));
|
||||
|
||||
foreach ($xml->xpath('//item') as $item)
|
||||
{
|
||||
$key = (string) $item->key;
|
||||
|
||||
$keyUrl = 'http://tracker.phpbb.com/browse/' . $key;
|
||||
$keyLink = '<a href="' . $keyUrl . '">' . $key . '</a>';
|
||||
|
||||
$value = str_replace($key, $keyLink, htmlspecialchars($item->title));
|
||||
$value = str_replace(']', '] -', $value);
|
||||
|
||||
$types[(string) $item->type][$key] = $value;
|
||||
}
|
||||
|
||||
ksort($types);
|
||||
foreach ($types as $type => $tickets)
|
||||
{
|
||||
echo "<h4>$type</h4>\n";
|
||||
echo "<ul>\n";
|
||||
|
||||
uksort($tickets, 'strnatcasecmp');
|
||||
|
||||
foreach ($tickets as $ticket)
|
||||
{
|
||||
echo "<li>$ticket</li>\n";
|
||||
}
|
||||
echo "</ul>\n";
|
||||
}
|
@@ -3,22 +3,31 @@
|
||||
/**
|
||||
*
|
||||
* @package build
|
||||
* @version $Id$
|
||||
* @copyright (c) 2010 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
// CONFIG - Begin
|
||||
$substitute_old = '3.0.6';
|
||||
$substitute_new = '3.0.7-RC2';
|
||||
$simple_name_old = 'phpbb306';
|
||||
$simple_name_new = 'phpbb307-RC2';
|
||||
if ($_SERVER['argc'] != 3)
|
||||
{
|
||||
die("Please specify the previous and current version as arguments (e.g. build_diff.php '1.0.2' '1.0.3').");
|
||||
}
|
||||
|
||||
$old_version = trim($_SERVER['argv'][1]);
|
||||
$new_version = trim($_SERVER['argv'][2]);
|
||||
|
||||
$substitute_old = $old_version;
|
||||
$substitute_new = $new_version;
|
||||
$simple_name_old = 'release-' . $old_version;
|
||||
$simple_name_new = 'release-' . $new_version;
|
||||
$echo_changes = false;
|
||||
|
||||
// DO NOT EVER USE THE FOLLOWING! Fix the script to generate proper changes,
|
||||
// do NOT manually create them.
|
||||
|
||||
// Set this to true to just compress the changes and do not build them again
|
||||
// This should be used for building custom modified txt file. ;)
|
||||
$package_changed_files = false;
|
||||
// CONFIG - End
|
||||
|
||||
//$debug_file = 'includes/functions_user.php'; //'styles/prosilver/style.cfg';
|
||||
$debug_file = false;
|
||||
@@ -36,9 +45,6 @@ if (!$package_changed_files)
|
||||
{
|
||||
if (!$echo_changes)
|
||||
{
|
||||
// Cleanup...
|
||||
run_command("rm -R $location/save/*");
|
||||
|
||||
// Create directory...
|
||||
run_command("mkdir $location/save/{$s_name}");
|
||||
run_command("mkdir $location/save/{$s_name}/language");
|
||||
@@ -72,14 +78,14 @@ if (!$echo_changes)
|
||||
foreach ($compress_programs as $extension => $compress_command)
|
||||
{
|
||||
echo "Packaging code changes for $extension\n";
|
||||
run_command("rm ./../../release_files/{$code_changes_filename}.{$extension}");
|
||||
run_command("rm ./../../new_version/release_files/{$code_changes_filename}.{$extension}");
|
||||
flush();
|
||||
|
||||
// Build Package
|
||||
run_command("$compress_command ./../../release_files/{$code_changes_filename}.{$extension} *");
|
||||
run_command("$compress_command ./../../new_version/release_files/{$code_changes_filename}.{$extension} *");
|
||||
|
||||
// Build MD5 Sum
|
||||
run_command("md5sum ./../../release_files/{$code_changes_filename}.{$extension} > ./../../release_files/{$code_changes_filename}.{$extension}.md5");
|
||||
run_command("md5sum ./../../new_version/release_files/{$code_changes_filename}.{$extension} > ./../../new_version/release_files/{$code_changes_filename}.{$extension}.md5");
|
||||
flush();
|
||||
}
|
||||
}
|
||||
@@ -381,7 +387,7 @@ function build_header($mode, $filenames, $header)
|
||||
$html .= "## {$filename['phpbb_filename']}\n";
|
||||
}
|
||||
}
|
||||
$html .= "## License: http://opensource.org/licenses/gpl-license.php GNU General Public License v2 \n";
|
||||
$html .= "## License: http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 \n";
|
||||
$html .= "############################################################## \n";
|
||||
$html .= "\n";
|
||||
|
||||
|
@@ -2,9 +2,8 @@
|
||||
/**
|
||||
*
|
||||
* @package build
|
||||
* @version $Id$
|
||||
* @copyright (c) 2010 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -14,10 +13,6 @@ class build_package
|
||||
var $old_packages;
|
||||
var $versions;
|
||||
var $locations;
|
||||
var $clean_directory_structure;
|
||||
var $files_to_copy;
|
||||
var $files_to_remove;
|
||||
var $remove_from_diff_structure;
|
||||
|
||||
// -c - context diff
|
||||
// -r - compare recursive
|
||||
@@ -53,11 +48,11 @@ class build_package
|
||||
$this->package_infos = array(
|
||||
'package_name' => 'phpBB3',
|
||||
'name_prefix' => 'phpbb',
|
||||
'simple_name' => 'phpbb' . str_replace('.', '', $_latest),
|
||||
'simple_name' => 'release-' . $_latest,
|
||||
'new_version_number' => $_latest,
|
||||
'short_version_number' => str_replace('.', '', $_latest),
|
||||
'release_filename' => 'phpBB-' . $_latest,
|
||||
'last_version' => 'phpbb' . str_replace('.', '', $_before),
|
||||
'last_version' => 'release-' . $_before,
|
||||
'last_version_number' => $_before,
|
||||
);
|
||||
|
||||
@@ -78,112 +73,7 @@ class build_package
|
||||
continue;
|
||||
}
|
||||
|
||||
$this->old_packages['phpbb' . str_replace('.', '', $package_version)] = $package_version . '_to_';
|
||||
}
|
||||
|
||||
// We need to make sure this is up to date with the latest version
|
||||
$this->clean_directory_structure = array(
|
||||
'adm' => array(
|
||||
'images' => '',
|
||||
'style' => '',
|
||||
),
|
||||
'cache' => '',
|
||||
'docs' => '',
|
||||
'download' => '',
|
||||
'files' => '',
|
||||
'images' => array(
|
||||
'avatars' => array(
|
||||
'gallery' => '',
|
||||
'upload' => '',
|
||||
),
|
||||
'icons' => array(
|
||||
'misc' => '',
|
||||
'smile' => '',
|
||||
),
|
||||
'ranks' => '',
|
||||
'smilies' => '',
|
||||
'upload_icons' => '',
|
||||
),
|
||||
'includes' => array(
|
||||
'acm' => '',
|
||||
'acp' => array(
|
||||
'info' => '',
|
||||
),
|
||||
'auth' => '',
|
||||
'captcha' => array(
|
||||
'plugins' => '',
|
||||
),
|
||||
'diff' => '',
|
||||
'db' => '',
|
||||
'hooks' => '',
|
||||
'mcp' => array(
|
||||
'info' => '',
|
||||
),
|
||||
'questionnaire' => '',
|
||||
'search' => '',
|
||||
'ucp' => array(
|
||||
'info' => '',
|
||||
),
|
||||
'utf' => array(
|
||||
'data' => '',
|
||||
),
|
||||
),
|
||||
'install' => array(
|
||||
'convertors'=> '',
|
||||
'schemas' => '',
|
||||
// 'data' => '',
|
||||
),
|
||||
'language' => array(
|
||||
'en' => array(
|
||||
'acp' => '',
|
||||
'email' => '',
|
||||
'mods' => '',
|
||||
),
|
||||
),
|
||||
'store' => '',
|
||||
'styles' => array(
|
||||
'subsilver2' => array(
|
||||
'imageset' => array(
|
||||
'en' => '',
|
||||
),
|
||||
'template' => '',
|
||||
'theme' => array(
|
||||
'images' => '',
|
||||
),
|
||||
),
|
||||
'prosilver' => array(
|
||||
'imageset' => array(
|
||||
'en' => '',
|
||||
),
|
||||
'template' => '',
|
||||
'theme' => array(
|
||||
'images' => '',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
// Files to remove (not include within package)
|
||||
$this->files_to_remove = array(); //array('includes/utf/data/recode_cjk.php');
|
||||
|
||||
// Files within the main directory to copy - do not include config.php
|
||||
$this->files_to_copy = array(
|
||||
'.htaccess', 'common.php', 'cron.php', 'faq.php', 'feed.php', 'index.php', 'mcp.php', 'memberlist.php', 'posting.php', 'report.php',
|
||||
'search.php', 'style.php', 'ucp.php', 'viewforum.php', 'viewonline.php', 'viewtopic.php'
|
||||
);
|
||||
|
||||
// These files/directories will be removed and not used for creating the patch files
|
||||
$this->remove_from_diff_structure = array(
|
||||
'config.php', 'cache', 'docs', 'files', 'install', 'store', 'develop'
|
||||
);
|
||||
|
||||
// Writeable directories
|
||||
$this->writeable = array('cache', 'store', 'images/avatars/upload', 'files');
|
||||
|
||||
// Fill the rest of the files_to_copy array
|
||||
foreach ($this->clean_directory_structure as $cur_dir => $dir_struct)
|
||||
{
|
||||
$this->_fill_files_to_copy($this->locations['new_version'] . $cur_dir, $cur_dir, $dir_struct);
|
||||
$this->old_packages['release-' . $package_version] = $package_version . '_to_';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -192,66 +82,6 @@ class build_package
|
||||
return $this->package_infos[$var];
|
||||
}
|
||||
|
||||
function _fill_files_to_copy($directory, $cur_dir, $dir_struct)
|
||||
{
|
||||
$dh = opendir($directory);
|
||||
|
||||
while ($file = readdir($dh))
|
||||
{
|
||||
if (is_file($directory . '/' . $file) && $file != '.' && $file != '..')
|
||||
{
|
||||
$_loc = str_replace($this->locations['new_version'], '', $directory . '/' . $file);
|
||||
|
||||
if (in_array($_loc, $this->files_to_remove))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$this->files_to_copy[] = $cur_dir . '/' . $file;
|
||||
}
|
||||
}
|
||||
closedir($dh);
|
||||
|
||||
if (is_array($dir_struct))
|
||||
{
|
||||
foreach ($dir_struct as $_cur_dir => $_dir_struct)
|
||||
{
|
||||
$this->_fill_files_to_copy($directory . '/' . $_cur_dir, $cur_dir . '/' . $_cur_dir, $_dir_struct);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function adjust_permissions($directory)
|
||||
{
|
||||
$dh = opendir($directory);
|
||||
|
||||
while ($file = readdir($dh))
|
||||
{
|
||||
if ($file == '.' || $file == '..' || $file == '.svn')
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// If file, then 644
|
||||
if (is_file($directory . '/' . $file))
|
||||
{
|
||||
chmod($directory . '/' . $file, 0644);
|
||||
}
|
||||
else if (is_dir($directory . '/' . $file))
|
||||
{
|
||||
$_loc = str_replace($this->package_infos['dest_dir'] . '/', '', $directory . '/' . $file);
|
||||
|
||||
// If directory is within the writeable chmod to 777, else 755
|
||||
$mode = (in_array($_loc, $this->writeable)) ? 0777 : 0755;
|
||||
chmod($directory . '/' . $file, $mode);
|
||||
|
||||
// Now traverse to the directory
|
||||
$this->adjust_permissions($directory . '/' . $file);
|
||||
}
|
||||
}
|
||||
closedir($dh);
|
||||
}
|
||||
|
||||
function begin_status($headline)
|
||||
{
|
||||
if ($this->status_begun)
|
||||
@@ -346,7 +176,7 @@ class build_package
|
||||
}
|
||||
|
||||
// Is binary?
|
||||
if (preg_match('/^Binary files ' . $package_name . '\/(.*) and [a-z0-9_-]+\/\1 differ/i', $line, $match))
|
||||
if (preg_match('/^Binary files ' . $package_name . '\/(.*) and [a-z0-9._-]+\/\1 differ/i', $line, $match))
|
||||
{
|
||||
$binary[] = trim($match[1]);
|
||||
}
|
||||
|
39
build/compare.sh
Executable file
39
build/compare.sh
Executable file
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env bash
|
||||
orig_dir="../../phpBB"
|
||||
|
||||
|
||||
rm -rf test_release_files
|
||||
mkdir test_release_files
|
||||
cd test_release_files
|
||||
|
||||
for ext in "tar.bz2" "zip"
|
||||
do
|
||||
cp "../new_version/release_files/$1.$ext" ./
|
||||
|
||||
if [ "$ext" = "tar.bz2" ]
|
||||
then
|
||||
command="tar -xjf"
|
||||
else
|
||||
command="unzip -q"
|
||||
fi
|
||||
|
||||
$command "$1.$ext"
|
||||
|
||||
for file in `find phpBB3 -name '.svn' -prune -o -type f -print`
|
||||
do
|
||||
orig_file="${file/#phpBB3/$orig_dir}"
|
||||
diff_result=`diff $orig_file $file`
|
||||
|
||||
if [ -n "$diff_result" ]
|
||||
then
|
||||
echo "Difference in package $1.$ext"
|
||||
echo $diff_result
|
||||
fi
|
||||
done
|
||||
|
||||
rm -rf phpBB3
|
||||
done
|
||||
|
||||
cd ..
|
||||
rm -rf test_release_files
|
||||
|
@@ -2,10 +2,9 @@
|
||||
/**
|
||||
*
|
||||
* @package build
|
||||
* @version $Id$
|
||||
* @copyright (c) 2000 Geoffrey T. Dairiki <dairiki@dairiki.org>
|
||||
* @copyright (c) 2010 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
|
@@ -3,20 +3,22 @@
|
||||
/**
|
||||
*
|
||||
* @package build
|
||||
* @version $Id$
|
||||
* @copyright (c) 2010 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
// The only thing i need to adjust. ;)
|
||||
// Please always add the latest version number to the end
|
||||
// Only have 5 releases here...
|
||||
// If RC8 drops remove the install/data directory
|
||||
//$versions = array('3.0.2', '3.0.3-RC1', '3.0.3', '3.0.4-RC1', '3.0.4', '3.0.5-RC1', '3.0.5', '3.0.6-RC1', '3.0.6-RC2', '3.0.6-RC3');
|
||||
//$versions = array('3.0.2', '3.0.3', '3.0.4', '3.0.5', '3.0.6', '3.0.7-RC1', '3.0.7');
|
||||
$versions = array('3.0.2', '3.0.3-RC1', '3.0.3', '3.0.4-RC1', '3.0.4', '3.0.5-RC1', '3.0.5', '3.0.6-RC1', '3.0.6-RC2', '3.0.6-RC3', '3.0.6-RC4', '3.0.6', '3.0.7-RC1', '3.0.7-RC2');
|
||||
$verbose = false;
|
||||
//$versions = array('3.0.2', '3.0.3', '3.0.4', '3.0.5', '3.0.6', '3.0.7-RC1', '3.0.7-RC2', '3.0.7', '3.0.7-PL1');
|
||||
|
||||
if ($_SERVER['argc'] < 2)
|
||||
{
|
||||
die("Please specify a list of versions as the first argument (e.g. package.php '1.0.0, 1.0.1, 1.0.2').");
|
||||
}
|
||||
|
||||
$versions = explode(',', $_SERVER['argv'][1]);
|
||||
$versions = array_map('trim', $versions);
|
||||
|
||||
$verbose = true;
|
||||
|
||||
require('build_helper.php');
|
||||
|
||||
@@ -25,130 +27,6 @@ $package = new build_package($versions, $verbose);
|
||||
echo "Building Release Packages\n";
|
||||
echo "Now all three package types (patch, files, release) are built as well as the update package (update).\n";
|
||||
|
||||
$package->begin_status('Remove temporary files');
|
||||
|
||||
// Cleanup...
|
||||
$package->run_command('rm -Rv ' . $package->get('dest_dir'));
|
||||
$package->run_command('rm -Rv ' . $package->get('diff_dir'));
|
||||
$package->run_command('rm -Rv ' . $package->get('patch_directory'));
|
||||
$package->run_command('rm -Rv ' . $package->get('files_directory'));
|
||||
$package->run_command('rm -Rv ' . $package->get('update_directory'));
|
||||
$package->run_command('rm -Rv ' . $package->get('release_directory'));
|
||||
|
||||
$package->begin_status('Create new directories');
|
||||
|
||||
// Make sure the directories got removed
|
||||
while (file_exists($package->get('update_directory')))
|
||||
{
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
if (!file_exists($package->get('dest_dir')))
|
||||
{
|
||||
$package->run_command('mkdir ' . $package->get('dest_dir'));
|
||||
}
|
||||
|
||||
if (!file_exists($package->get('diff_dir')))
|
||||
{
|
||||
$package->run_command('mkdir ' . $package->get('diff_dir'));
|
||||
}
|
||||
|
||||
if (!file_exists($package->get('patch_directory')))
|
||||
{
|
||||
$package->run_command('mkdir ' . $package->get('patch_directory'));
|
||||
}
|
||||
|
||||
if (!file_exists($package->get('files_directory')))
|
||||
{
|
||||
$package->run_command('mkdir ' . $package->get('files_directory'));
|
||||
}
|
||||
|
||||
if (!file_exists($package->get('update_directory')))
|
||||
{
|
||||
$package->run_command('mkdir ' . $package->get('update_directory'));
|
||||
}
|
||||
|
||||
if (!file_exists($package->get('release_directory')))
|
||||
{
|
||||
$package->run_command('mkdir ' . $package->get('release_directory'));
|
||||
}
|
||||
|
||||
$package->begin_status('Copy release files to clean release directory');
|
||||
|
||||
// Create config.php file
|
||||
$package->run_command('touch ' . $package->get('dest_dir') . '/config.php');
|
||||
//$package->run_command('sudo chown www-data:www-data ' . $package->get('dest_dir') . '/config.php');
|
||||
|
||||
// Create new directory structure
|
||||
foreach ($package->clean_directory_structure as $dir => $dir_struct)
|
||||
{
|
||||
$package->create_directory($package->get('dest_dir') . '/' . $dir, $dir_struct);
|
||||
}
|
||||
|
||||
// First step is to copy the new version over (clean structure)
|
||||
foreach ($package->files_to_copy as $file)
|
||||
{
|
||||
$source_file = $package->locations['new_version'] . $file;
|
||||
$dest_file = $package->get('dest_dir') . '/' . $file;
|
||||
|
||||
$package->run_command("cp -p $source_file $dest_file");
|
||||
}
|
||||
|
||||
// fix line endings
|
||||
chdir($package->get('dest_dir'));
|
||||
$package->run_command($package->locations['new_version'] . 'develop/fix_files.sh');
|
||||
|
||||
// Now clean up the permissions
|
||||
$package->begin_status('Adjust permissions');
|
||||
|
||||
$package->adjust_permissions($package->get('dest_dir'));
|
||||
|
||||
// Now create a version for diffing the version - copy the tree over to old_versions...
|
||||
$package->begin_status('Create diff directory for obtaining file differences');
|
||||
|
||||
$package->run_command('cp -Rp ' . $package->get('dest_dir') . '/* ' . $package->get('diff_dir'));
|
||||
$package->run_command('cp -Rp ' . $package->get('dest_dir') . '/.htaccess ' . $package->get('diff_dir'));
|
||||
|
||||
// Cleanup diff directory (only contents to diff)
|
||||
foreach ($package->remove_from_diff_structure as $remove_dir)
|
||||
{
|
||||
$package->run_command('rm -Rv ' . $package->get('diff_dir') . '/' . $remove_dir);
|
||||
}
|
||||
|
||||
// Now, first of all we need to rebuild all old packages we want to support
|
||||
foreach ($package->old_packages as $package_name => $tag_name)
|
||||
{
|
||||
$package->begin_status('Create old packages directory for diffing to ' . $package_name);
|
||||
|
||||
chdir($package->locations['old_versions']);
|
||||
|
||||
if (is_dir($package->locations['old_versions'] . $package_name))
|
||||
{
|
||||
$package->run_command('rm -Rv ' . $package->locations['old_versions'] . $package_name);
|
||||
}
|
||||
|
||||
// Now, create a new one...
|
||||
$tag_name = 'release_' . str_replace(array('.', '_to_'), array('_', ''), $tag_name);
|
||||
|
||||
$package->run_command('svn export --non-interactive http://code.phpbb.com/svn/phpbb/tags/' . $tag_name . '/phpBB/ ' . $package_name);
|
||||
|
||||
$location = $package->locations['old_versions'] . $package_name;
|
||||
chdir($location . '/');
|
||||
|
||||
$package->run_command($package->locations['new_version'] . 'develop/fix_files.sh');
|
||||
|
||||
// Now clean up the permissions
|
||||
$package->begin_status('Adjust permissions for package ' . $package_name);
|
||||
|
||||
$package->adjust_permissions($location);
|
||||
|
||||
// Cleanup diff directory (only contents to diff)
|
||||
foreach ($package->remove_from_diff_structure as $remove_dir)
|
||||
{
|
||||
$package->run_command('rm -Rv ' . $location . '/' . $remove_dir);
|
||||
}
|
||||
}
|
||||
|
||||
// Go trough all versions making a diff if we even have old versions
|
||||
// For phpBB 3.0.x we might choose a different update method, rendering the things below useless...
|
||||
if (sizeof($package->old_packages))
|
||||
@@ -160,13 +38,13 @@ if (sizeof($package->old_packages))
|
||||
|
||||
foreach ($package->old_packages as $_package_name => $dest_package_filename)
|
||||
{
|
||||
$package->begin_status('Creating patch/diff files for phpBB-' . $dest_package_filename . $package->get('new_version_number'));
|
||||
|
||||
$dest_package_filename = $package->get('patch_directory') . '/phpBB-' . $dest_package_filename . $package->get('new_version_number') . '.patch';
|
||||
$package->run_command('diff ' . $package->diff_options . ' ' . $_package_name . ' ' . $package->get('simple_name') . ' > ' . $dest_package_filename);
|
||||
$package->begin_status('Parsing patch/diff files for phpBB-' . $dest_package_filename . $package->get('new_version_number'));
|
||||
|
||||
// Parse this diff to determine file changes from the checked versions and save them
|
||||
$diff_file_changes[$_package_name] = $package->collect_diff_files($dest_package_filename, $_package_name);
|
||||
$diff_file_changes[$_package_name] = $package->collect_diff_files(
|
||||
$package->get('patch_directory') . '/phpBB-' . $dest_package_filename . $package->get('new_version_number') . '.patch',
|
||||
$_package_name
|
||||
);
|
||||
}
|
||||
|
||||
// Now put those files determined within the correct directories
|
||||
@@ -404,7 +282,6 @@ if (sizeof($package->old_packages))
|
||||
foreach ($compress_programs as $extension => $compress_command)
|
||||
{
|
||||
$package->begin_status('Packaging phpBB Patch Files for ' . $extension);
|
||||
$package->run_command('rm -v ../release_files/' . $package->get('release_filename') . '-patch.' . $extension);
|
||||
|
||||
// Build Package
|
||||
$package->run_command($compress_command . ' ../release_files/' . $package->get('release_filename') . '-patch.' . $extension . ' *');
|
||||
@@ -420,7 +297,6 @@ if (sizeof($package->old_packages))
|
||||
{
|
||||
$package->begin_status('Packaging phpBB Files for ' . $extension);
|
||||
|
||||
$package->run_command('rm -v ../release_files/' . $package->get('release_filename') . '-files.' . $extension);
|
||||
$package->run_command('mkdir ' . $package->get('files_directory') . '/release');
|
||||
$package->run_command('cp -Rp ' . $package->get('dest_dir') . '/docs ' . $package->get('files_directory') . '/release');
|
||||
$package->run_command('cp -Rp ' . $package->get('dest_dir') . '/install ' . $package->get('files_directory') . '/release');
|
||||
@@ -457,7 +333,6 @@ if (sizeof($package->old_packages))
|
||||
|
||||
$package->begin_status('Packaging phpBB Update for ' . $extension);
|
||||
|
||||
$package->run_command('rm -v ../release_files/' . $package->get('release_filename') . '-update.' . $extension);
|
||||
$package->run_command('mkdir ' . $package->get('update_directory') . '/release');
|
||||
|
||||
// Pack update files
|
||||
@@ -518,4 +393,16 @@ foreach ($compress_programs as $extension => $compress_command)
|
||||
$package->run_command('md5sum ./release_files/' . $package->get('release_filename') . '.' . $extension . ' > ./release_files/' . $package->get('release_filename') . '.' . $extension . '.md5');
|
||||
}
|
||||
|
||||
// Microsoft Web PI packaging
|
||||
$package->begin_status('Packaging phpBB for Microsoft WebPI');
|
||||
$file = './release_files/' . $package->get('release_filename') . '.webpi.zip';
|
||||
$package->run_command('cp -p ./release_files/' . $package->get('release_filename') . ".zip $file");
|
||||
$package->run_command('cd ./../webpi && ' . $compress_programs['zip'] . " ./../new_version/$file *");
|
||||
$package->run_command("md5sum $file > $file.md5");
|
||||
|
||||
// verify results
|
||||
chdir($package->locations['root']);
|
||||
$package->begin_status('********** Verifying packages **********');
|
||||
$package->run_command('./compare.sh ' . $package->package_infos['release_filename']);
|
||||
|
||||
echo "Done.\n";
|
||||
|
145
build/phpdoc-phpbb.ini
Normal file
145
build/phpdoc-phpbb.ini
Normal file
@@ -0,0 +1,145 @@
|
||||
; Default configuration file for PHPDoctor
|
||||
|
||||
; This config file will cause PHPDoctor to generate API documentation of
|
||||
; itself.
|
||||
|
||||
|
||||
; PHPDoctor settings
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
; Names of files to parse. This can be a single filename, or a comma separated
|
||||
; list of filenames. Wildcards are allowed.
|
||||
|
||||
files = "*.php"
|
||||
|
||||
; Names of files or directories to ignore. This can be a single filename, or a
|
||||
; comma separated list of filenames. Wildcards are NOT allowed.
|
||||
|
||||
;ignore = "CVS, .svn, .git, _compiled"
|
||||
ignore = templates_c/,*HTML/default/*,spec/,*config.php*,*CVS/,test_chora.php,testupdate/,cache/,store/,*proSilver/,develop/,includes/utf/data/,includes/captcha/fonts/,install/update/,install/update.new/,files/,*phpinfo.php*,*update_script.php*,*upgrade.php*,*convert.php*,install/converter/,language/de/,script/,*swatch.php*,*test.php*,*test2.php*,*install.php*,*functions_diff.php*,*acp_update.php*,acm_xcache.php
|
||||
|
||||
; The directory to look for files in, if not used the PHPDoctor will look in
|
||||
; the current directory (the directory it is run from).
|
||||
|
||||
source_path = "../phpBB/"
|
||||
|
||||
; If you do not want PHPDoctor to look in each sub directory for files
|
||||
; uncomment this line.
|
||||
|
||||
;subdirs = off
|
||||
|
||||
; Set how loud PHPDoctor is as it runs. Quiet mode suppresses all output other
|
||||
; than warnings and errors. Verbose mode outputs additional messages during
|
||||
; execution.
|
||||
|
||||
quiet = on
|
||||
;verbose = on
|
||||
|
||||
; Select the doclet to use for generating output.
|
||||
|
||||
doclet = standard
|
||||
;doclet = debug
|
||||
|
||||
; The directory to find the doclet in. Doclets control the HTML output of
|
||||
; phpDoctor and can be modified to suit your needs. They are expected to be
|
||||
; in a directory named after themselves at the location given.
|
||||
|
||||
;doclet_path = ./doclets
|
||||
|
||||
; Select the formatter to use for generating output.
|
||||
|
||||
;formatter = htmlStandardFormatter
|
||||
|
||||
; The directory to find the formatter in. Formatters convert textual markup
|
||||
; for use by the doclet.
|
||||
|
||||
;formatter_path = ./formatters
|
||||
|
||||
; The directory to find taglets in. Taglets allow you to make PHPDoctor handle
|
||||
; new tags and to alter the behavour of existing tags and their output.
|
||||
|
||||
;taglet_path = ./taglets
|
||||
|
||||
; If the code you are parsing does not use package tags or not all elements
|
||||
; have package tags, use this setting to place unbound elements into a
|
||||
; particular package.
|
||||
|
||||
default_package = "phpBB"
|
||||
|
||||
use_class_path_as_package = off
|
||||
|
||||
ignore_package_tags = off
|
||||
|
||||
; Specifies the name of a HTML file containing text for the overview
|
||||
; documentation to be placed on the overview page. The path is relative to
|
||||
; "source_path" unless an absolute path is given.
|
||||
|
||||
overview = ../README.md
|
||||
|
||||
; Package comments will be looked for in a file named package.html in the same
|
||||
; directory as the first source file parsed in that package or in the directory
|
||||
; given below. If package comments are placed in the directory given below then
|
||||
; they should be named "<packageName>.html".
|
||||
|
||||
package_comment_dir = ./
|
||||
|
||||
; Parse out global variables and/or global constants?
|
||||
|
||||
;globals = off
|
||||
;constants = off
|
||||
|
||||
; Generate documentation for all class members
|
||||
|
||||
;private = on
|
||||
|
||||
; Generate documentation for public and protected class members
|
||||
|
||||
;protected = on
|
||||
|
||||
; Generate documentation for only public class members
|
||||
|
||||
;public = on
|
||||
|
||||
; Use the PEAR compatible handling of the docblock first sentence
|
||||
|
||||
;pear_compat = on
|
||||
|
||||
; Standard doclet settings
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
; The directory to place generated documentation in. If the given path is
|
||||
; relative to it will be relative to "source_path".
|
||||
|
||||
d = "../build/api/"
|
||||
|
||||
; Specifies the title to be placed in the HTML <title> tag.
|
||||
|
||||
windowtitle = "phpBB3"
|
||||
|
||||
; Specifies the title to be placed near the top of the overview summary file.
|
||||
|
||||
doctitle = "phpBB3 Sourcecode Documentation"
|
||||
|
||||
; Specifies the header text to be placed at the top of each output file. The
|
||||
; header will be placed to the right of the upper navigation bar.
|
||||
|
||||
header = "phpBB3"
|
||||
|
||||
; Specifies the footer text to be placed at the bottom of each output file. The
|
||||
; footer will be placed to the right of the lower navigation bar.
|
||||
|
||||
footer = "phpBB3"
|
||||
|
||||
; Specifies the text to be placed at the bottom of each output file. The text
|
||||
; will be placed at the bottom of the page, below the lower navigation bar.
|
||||
|
||||
;bottom = "This document was generated by <a href="http://peej.github.com/phpdoctor/">PHPDoctor: The PHP Documentation Creator</a>"
|
||||
|
||||
; Create a class tree?
|
||||
|
||||
;tree = off
|
||||
|
||||
; Use GeSHi to include formatted source files in the documentation. PHPDoctor will look in the current doclet directory for a /geshi subdirectory. Unpack the GeSHi archive from http://qbnz.com/highlighter to get this directory - it will contain a php script and a subdirectory with formatting files.
|
||||
|
||||
include_source = off
|
||||
|
39
build/webpi/install/mssql.sql
Normal file
39
build/webpi/install/mssql.sql
Normal file
@@ -0,0 +1,39 @@
|
||||
/**********************************************************************/
|
||||
/* Install.SQL */
|
||||
/* Creates a login and makes the user a member of db roles */
|
||||
/* */
|
||||
/**********************************************************************/
|
||||
|
||||
-- Declare variables for database name, username and password
|
||||
DECLARE @dbName sysname,
|
||||
@dbUser sysname,
|
||||
@dbPwd nvarchar(max);
|
||||
|
||||
-- Set variables for database name, username and password
|
||||
SET @dbName = 'PlaceHolderForDb';
|
||||
SET @dbUser = 'PlaceHolderForUser';
|
||||
SET @dbPwd = 'PlaceHolderForPassword';
|
||||
|
||||
DECLARE @cmd nvarchar(max)
|
||||
|
||||
-- Create login
|
||||
IF( SUSER_SID(@dbUser) is null )
|
||||
BEGIN
|
||||
print '-- Creating login '
|
||||
SET @cmd = N'CREATE LOGIN ' + quotename(@dbUser) + N' WITH PASSWORD ='''+ replace(@dbPwd, '''', '''''') + N''''
|
||||
EXEC(@cmd)
|
||||
END
|
||||
|
||||
-- Create database user and map to login
|
||||
-- and add user to the datareader, datawriter, ddladmin and securityadmin roles
|
||||
--
|
||||
SET @cmd = N'USE ' + quotename(@DBName) + N';
|
||||
IF( NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = ''' + replace(@dbUser, '''', '''''') + N'''))
|
||||
BEGIN
|
||||
print ''-- Creating user'';
|
||||
CREATE USER ' + quotename(@dbUser) + N' FOR LOGIN ' + quotename(@dbUser) + N';
|
||||
print ''-- Adding user'';
|
||||
EXEC sp_addrolemember ''db_owner'', ''' + replace(@dbUser, '''', '''''') + N''';
|
||||
END'
|
||||
EXEC(@cmd)
|
||||
GO
|
15
build/webpi/install/mysql.sql
Normal file
15
build/webpi/install/mysql.sql
Normal file
@@ -0,0 +1,15 @@
|
||||
USE PlaceHolderForDb$$
|
||||
|
||||
DROP PROCEDURE IF EXISTS add_user $$
|
||||
|
||||
CREATE PROCEDURE add_user()
|
||||
BEGIN
|
||||
DECLARE EXIT HANDLER FOR 1044 BEGIN END;
|
||||
GRANT ALL PRIVILEGES ON PlaceHolderForDb.* to 'PlaceHolderForUser'@'PlaceHolderForServer' IDENTIFIED BY 'PlaceHolderForPassword';
|
||||
FLUSH PRIVILEGES;
|
||||
END
|
||||
$$
|
||||
|
||||
CALL add_user() $$
|
||||
|
||||
DROP PROCEDURE IF EXISTS add_user $$
|
13
build/webpi/manifest.xml
Normal file
13
build/webpi/manifest.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<msdeploy.iisapp>
|
||||
<iisapp path="phpBB3" />
|
||||
|
||||
<dbmysql path="install/mysql.sql" commandDelimiter="$$" removeCommandDelimiter="true" />
|
||||
|
||||
<dbfullsql path="install/mssql.sql" />
|
||||
|
||||
<setAcl path="phpBB3/cache" setAclAccess="Modify" setAclUser="anonymousAuthenticationUser" />
|
||||
<setAcl path="phpBB3/files" setAclAccess="Modify" setAclUser="anonymousAuthenticationUser" />
|
||||
<setAcl path="phpBB3/store" setAclAccess="Modify" setAclUser="anonymousAuthenticationUser" />
|
||||
<setAcl path="phpBB3/images/avatars/upload" setAclAccess="Modify" setAclUser="anonymousAuthenticationUser" />
|
||||
<setAcl path="phpBB3/config.php" setAclAccess="Modify" setAclUser="anonymousAuthenticationUser" setAclResourceType="File" />
|
||||
</msdeploy.iisapp>
|
256
build/webpi/parameters.xml
Normal file
256
build/webpi/parameters.xml
Normal file
@@ -0,0 +1,256 @@
|
||||
<parameters>
|
||||
<parameter
|
||||
name="AppPath"
|
||||
defaultValue="Default Web Site/phpBB3"
|
||||
tags="iisapp">
|
||||
|
||||
<parameterEntry
|
||||
type="ProviderPath"
|
||||
scope="iisapp"
|
||||
match="phpBB3" />
|
||||
</parameter>
|
||||
<!--ACLs-->
|
||||
<parameter
|
||||
name="aclCache"
|
||||
description="Sets the ACL on the cache/ folder"
|
||||
defaultValue="{AppPath}/cache"
|
||||
tags="Hidden">
|
||||
|
||||
<parameterEntry
|
||||
type="ProviderPath"
|
||||
scope="setAcl"
|
||||
match="phpBB3/cache$" />
|
||||
</parameter>
|
||||
|
||||
<parameter
|
||||
name="aclFiles"
|
||||
description="Sets the ACL on the files/ folder"
|
||||
defaultValue="{AppPath}/files"
|
||||
tags="Hidden">
|
||||
|
||||
<parameterEntry
|
||||
type="ProviderPath"
|
||||
scope="setAcl"
|
||||
match="phpBB3/files$" />
|
||||
</parameter>
|
||||
|
||||
<parameter
|
||||
name="aclStore"
|
||||
description="Sets the ACL on the store/ folder"
|
||||
defaultValue="{AppPath}/store"
|
||||
tags="Hidden">
|
||||
|
||||
<parameterEntry
|
||||
type="ProviderPath"
|
||||
scope="setAcl"
|
||||
match="phpBB3/store$" />
|
||||
</parameter>
|
||||
|
||||
<parameter
|
||||
name="aclAvatarUpload"
|
||||
description="Sets the ACL on the avatars/upload/ folder"
|
||||
defaultValue="{AppPath}/images/avatars/upload"
|
||||
tags="Hidden">
|
||||
|
||||
<parameterEntry
|
||||
type="ProviderPath"
|
||||
scope="setAcl"
|
||||
match="phpBB3/images/avatars/upload$" />
|
||||
</parameter>
|
||||
|
||||
<parameter
|
||||
name="aclConfig"
|
||||
description="Sets the ACL on the config.php file"
|
||||
defaultValue="{AppPath}/config.php"
|
||||
tags="Hidden">
|
||||
|
||||
<parameterEntry
|
||||
type="ProviderPath"
|
||||
scope="setAcl"
|
||||
match="phpBB3/config.php$" />
|
||||
</parameter>
|
||||
|
||||
<!-- SQL parameters -->
|
||||
<parameter name="SQL Database Server" description="Enter the database server (usually machine name ) " defaultValue="." tags="SQL">
|
||||
</parameter>
|
||||
|
||||
<parameter name="SQL DatabaseServer Instance" description="Enter the database instance name" defaultValue="SQLExpress" tags="SQL">
|
||||
</parameter>
|
||||
<!-- Read database server from config.php . Update 'dbhost' in config.php on publish -->
|
||||
<parameter name="SQL Automatic DatabaseServer" defaultValue="dbhost = '{SQL Database Server}\\{SQL DatabaseServer Instance}';" tags="Hidden,SQL">
|
||||
<parameterEntry kind="TextFile" scope="\\config\.php$" match="dbhost\s*=\s*'([^']*)'\s*;" />
|
||||
</parameter>
|
||||
<parameter
|
||||
name="SQL DatabaseName" description="Database name for your application." defaultValue="phpbb" tags="SQL, dbName">
|
||||
|
||||
<parameterEntry type="TextFile" scope="install/mssql.sql" match="PlaceHolderForDb" />
|
||||
</parameter>
|
||||
<!-- Read database name from config.php . Update 'dbname' in config.php on publish -->
|
||||
<parameter name="SQL Automatic DatabaseName" defaultValue="dbname = '{SQL DatabaseName}';" tags="Hidden,SQL">
|
||||
<parameterEntry kind="TextFile" scope="\\config\.php$" match="dbname\s*=\s*'([^']*)'\s*;" />
|
||||
</parameter>
|
||||
|
||||
<parameter
|
||||
name="SQL DatabaseAdministrator"
|
||||
description="Database server administartor username."
|
||||
defaultValue="sa"
|
||||
tags="SQL, DbAdminUsername" >
|
||||
</parameter>
|
||||
|
||||
<parameter
|
||||
name="SQL DatabaseAdministratorPassword"
|
||||
description="Database server administrator password."
|
||||
tags="Password,SQL,DbAdminPassword">
|
||||
</parameter>
|
||||
|
||||
<parameter
|
||||
name="SQL Database Username"
|
||||
description="Username to access your database."
|
||||
defaultValue="phpbb"
|
||||
tags="SQL, DbUsername">
|
||||
|
||||
<parameterEntry
|
||||
type="TextFile"
|
||||
scope="install/mssql.sql"
|
||||
match="PlaceHolderForUser" />
|
||||
</parameter>
|
||||
<!-- Read database user from config.php . Update 'dbuser' in config.php on publish -->
|
||||
<parameter name="SQL Automatic Database User" defaultValue="dbuser = '{SQL Database Username}';" tags="Hidden,SQL">
|
||||
<parameterEntry kind="TextFile" scope="\\config\.php$" match="dbuser\s*=\s*'([^']*)'\s*;" />
|
||||
</parameter>
|
||||
|
||||
<parameter
|
||||
name="SQL Database Password"
|
||||
description="Password for your phpBB database. (Must be at least 8 characters, contain at least one lower case letter, one upper case letter and one digit)"
|
||||
tags="New, Password,SQL, DbUserPassword">
|
||||
|
||||
<parameterValidation
|
||||
type = "RegularExpression"
|
||||
validationString = "^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$" />
|
||||
|
||||
<parameterEntry
|
||||
type="TextFile"
|
||||
scope="install/mssql.sql"
|
||||
match="PlaceHolderForPassword" />
|
||||
</parameter>
|
||||
|
||||
<!-- Read database user password from config.php . Update 'dbpasswd' in config.php on publish -->
|
||||
<parameter name="SQL Automatic Database Password" defaultValue="dbpasswd = '{SQL Database Password}';" tags="Hidden,SQL">
|
||||
<parameterEntry kind="TextFile" scope="\\config\.php$" match="dbpasswd\s*=\s*'([^']*)'\s*;" />
|
||||
</parameter>
|
||||
|
||||
<!-- SQL Connection string -->
|
||||
<parameter
|
||||
name="SQL ConnectionString"
|
||||
description="Automatically sets the connection string for the connection request."
|
||||
defaultValue="Server={SQL Database Server}\{SQL DatabaseServer Instance};Database={SQL DatabaseName};uid={SQL DatabaseAdministrator};Pwd={SQL DatabaseAdministratorPassword};"
|
||||
tags="Hidden,SQLConnectionString,Validate">
|
||||
|
||||
<parameterEntry
|
||||
type="ProviderPath"
|
||||
scope="dbfullsql"
|
||||
match="install/mssql.sql" />
|
||||
</parameter>
|
||||
|
||||
<parameter
|
||||
name="SQL Database type"
|
||||
description="SQL database type"
|
||||
defaultValue="mssql"
|
||||
tags="SQL,Hidden">
|
||||
</parameter>
|
||||
|
||||
<!-- MYSQL parameters -->
|
||||
<parameter
|
||||
name="MySQL Database Server"
|
||||
description="Enter the hostname"
|
||||
defaultValue="localhost"
|
||||
tags="MySQL, dbServer">
|
||||
|
||||
<parameterEntry
|
||||
type="TextFile"
|
||||
scope="install/mysql.sql"
|
||||
match="PlaceHolderForServer" />
|
||||
</parameter>
|
||||
|
||||
<!-- Read database server from config.php . Update 'dbhost' in config.php on publish -->
|
||||
<parameter name="Automatic MySQL DatabaseServer" defaultValue="dbhost = '{MySQL Database Server}';" tags="Hidden,MySQL">
|
||||
<parameterEntry kind="TextFile" scope="\\config\.php$" match="dbhost\s*=\s*'([^']*)'\s*;" />
|
||||
</parameter>
|
||||
|
||||
<parameter
|
||||
name="MySQL Database Name"
|
||||
description="Database Name for your application."
|
||||
defaultValue="phpbb"
|
||||
tags="MySQL, dbName">
|
||||
|
||||
<parameterEntry
|
||||
type="TextFile"
|
||||
scope="install/mysql.sql"
|
||||
match="PlaceHolderForDb" />
|
||||
</parameter>
|
||||
<!-- Read database name from config.php . Update 'dbname' in config.php on publish -->
|
||||
<parameter name="Automatic MySQL Database Name" defaultValue="dbname = '{MySQL Database Name}';" tags="Hidden,MySQL">
|
||||
<parameterEntry kind="TextFile" scope="\\config\.php$" match="dbname\s*=\s*'([^']*)'\s*;" />
|
||||
</parameter>
|
||||
|
||||
<parameter
|
||||
name="MySQL Database Username"
|
||||
description="Username to access your phpBB database."
|
||||
defaultValue="phpbb"
|
||||
tags="MySQL, DbUsername">
|
||||
|
||||
<parameterEntry
|
||||
type="TextFile"
|
||||
scope="install/mysql.sql"
|
||||
match="PlaceHolderForUser" />
|
||||
</parameter>
|
||||
<!-- Read database user from config.php . Update 'dbuser' in config.php on publish -->
|
||||
<parameter name="Automatic MySQL Database User" defaultValue="dbuser = '{MySQL Database Username}';" tags="Hidden,MySQL">
|
||||
<parameterEntry kind="TextFile" scope="\\config\.php$" match="dbuser\s*=\s*'([^']*)'\s*;" />
|
||||
</parameter>
|
||||
|
||||
<parameter
|
||||
name="MySQL Database Password"
|
||||
description="Password for your phpBB database. (Minimum 4 characters)"
|
||||
tags="New, Password,MySQL,DbUserPassword">
|
||||
|
||||
<parameterValidation
|
||||
type = "RegularExpression"
|
||||
validationString = "^.{4,}$" />
|
||||
|
||||
<parameterEntry
|
||||
type="TextFile"
|
||||
scope="install/mysql.sql"
|
||||
match="PlaceHolderForPassword" />
|
||||
</parameter>
|
||||
<!-- Read database password from config.php . Update 'dbpasswd' in config.php on publish -->
|
||||
<parameter name="MySQL Automatic Database Password" defaultValue="dbpasswd = '{MySQL Database Password}';" tags="Hidden,MySQL">
|
||||
<parameterEntry kind="TextFile" scope="\\config\.php$" match="dbpasswd\s*=\s*'([^']*)'\s*;" />
|
||||
</parameter>
|
||||
|
||||
<!-- MySQL admin credentials -->
|
||||
<parameter
|
||||
name="MySQL Database Administrator"
|
||||
description="Database administrator username."
|
||||
defaultValue="root"
|
||||
tags="MySQL, DbAdminUsername" >
|
||||
</parameter>
|
||||
<parameter
|
||||
name="MySQL Database Administrator Password"
|
||||
description="Database administrator password."
|
||||
tags="Password,MySQL,DbAdminPassword" >
|
||||
</parameter>
|
||||
|
||||
<!-- MySQL Connectionstring -->
|
||||
<parameter
|
||||
name="MySQLConnectionString"
|
||||
description="Automatically sets the connection string for the connection request."
|
||||
defaultValue="Server={MySQL Database Server};Database={MySQL Database Name};uid={MySQL Database Administrator};Pwd={MySQL Database Administrator Password};"
|
||||
tags="Hidden,MySQLConnectionString,Validate">
|
||||
|
||||
<parameterEntry
|
||||
type="ProviderPath"
|
||||
scope="dbmysql"
|
||||
match="install/mysql.sql" />
|
||||
</parameter>
|
||||
</parameters>
|
359
git-tools/hooks/commit-msg
Executable file
359
git-tools/hooks/commit-msg
Executable file
@@ -0,0 +1,359 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# A hook to check syntax of a phpBB3 commit message, per:
|
||||
# * <http://wiki.phpbb.com/display/DEV/Git>
|
||||
# * <http://area51.phpbb.com/phpBB/viewtopic.php?p=209919#p209919>
|
||||
#
|
||||
# This is a commit-msg hook.
|
||||
#
|
||||
# To install this you can either copy or symlink it to
|
||||
# $GIT_DIR/hooks, example:
|
||||
#
|
||||
# ln -s ../../git-tools/hooks/commit-msg \\
|
||||
# .git/hooks/commit-msg
|
||||
#
|
||||
# You can configure whether invalid commit messages abort commits:
|
||||
#
|
||||
# git config phpbb.hooks.commit-msg.fatal true (abort)
|
||||
# git config phpbb.hooks.commit-msg.fatal false (warn only, do not abort)
|
||||
#
|
||||
# The default is to warn only.
|
||||
#
|
||||
# Warning/error messages use color by default if the output is a terminal
|
||||
# ("output" here is normally standard error when you run git commit).
|
||||
# To force or disable the use of color:
|
||||
#
|
||||
# git config phpbb.hooks.commit-msg.color true (force color output)
|
||||
# git config phpbb.hooks.commit-msg.color false (disable color output)
|
||||
|
||||
config_ns="phpbb.hooks.commit-msg";
|
||||
|
||||
if [ "$(git config --bool $config_ns.fatal)" = "true" ]
|
||||
then
|
||||
fatal=1;
|
||||
severity=Error;
|
||||
else
|
||||
fatal=0;
|
||||
severity=Warning;
|
||||
fi
|
||||
|
||||
debug_level=$(git config --int $config_ns.debug || echo 0);
|
||||
|
||||
# Error codes
|
||||
ERR_LENGTH=1;
|
||||
ERR_HEADER=2;
|
||||
ERR_EMPTY=3;
|
||||
ERR_DESCRIPTION=4;
|
||||
ERR_FOOTER=5;
|
||||
ERR_EOF=6;
|
||||
ERR_UNKNOWN=42;
|
||||
|
||||
debug()
|
||||
{
|
||||
local level;
|
||||
|
||||
level=$1;
|
||||
shift;
|
||||
|
||||
if [ $debug_level -ge $level ]
|
||||
then
|
||||
echo $@;
|
||||
fi
|
||||
}
|
||||
|
||||
quit()
|
||||
{
|
||||
if [ $1 -eq 0 ] || [ $1 -eq $ERR_UNKNOWN ]
|
||||
then
|
||||
# success
|
||||
exit 0;
|
||||
elif [ $fatal -eq 0 ]
|
||||
then
|
||||
# problems found but fatal is false
|
||||
complain 'Please run `git commit --amend` and fix the problems mentioned.' 1>&2
|
||||
exit 0;
|
||||
else
|
||||
complain "Aborting commit." 1>&2
|
||||
exit $1;
|
||||
fi
|
||||
}
|
||||
|
||||
use_color()
|
||||
{
|
||||
if [ -z "$use_color_cached" ]
|
||||
then
|
||||
case $(git config --bool $config_ns.color)
|
||||
in
|
||||
false)
|
||||
use_color_cached=1
|
||||
;;
|
||||
true)
|
||||
use_color_cached=0
|
||||
;;
|
||||
*)
|
||||
# tty detection in shell:
|
||||
# http://hwi.ath.cx/jsh/list/shext/isatty.sh.html
|
||||
tty 0>/dev/stdout >/dev/null 2>&1
|
||||
use_color_cached=$?
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
# return value is the flag inverted -
|
||||
# if return value is 0, this means use color
|
||||
return $use_color_cached
|
||||
}
|
||||
|
||||
complain()
|
||||
{
|
||||
if use_color
|
||||
then
|
||||
# Careful: our argument may include arguments to echo like -n
|
||||
# ANSI color codes:
|
||||
# http://pueblo.sourceforge.net/doc/manual/ansi_color_codes.html
|
||||
printf "\033[31m\033[1m"
|
||||
if [ "$1" = "-n" ]
|
||||
then
|
||||
echo "$@"
|
||||
printf "\033[0m"
|
||||
else
|
||||
# This will print one trailing space.
|
||||
# Not sure how to avoid this at the moment.
|
||||
echo "$@" $(printf "\033[0m")
|
||||
fi
|
||||
else
|
||||
echo "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
# Check for empty commit message
|
||||
if ! grep -qv '^#' "$1"
|
||||
then
|
||||
# Commit message is empty (or contains only comments).
|
||||
# Let git handle this.
|
||||
# It will abort with a message like so:
|
||||
#
|
||||
# Aborting commit due to empty commit message.
|
||||
exit 0
|
||||
fi
|
||||
|
||||
msg=$(grep -v '^#' "$1" |grep -nE '.{81,}')
|
||||
|
||||
if [ $? -eq 0 ]
|
||||
then
|
||||
complain "The following lines are greater than 80 characters long:" >&2;
|
||||
complain >&2
|
||||
complain "$msg" >&2;
|
||||
|
||||
quit $ERR_LENGTH;
|
||||
fi
|
||||
|
||||
lines=$(wc -l "$1" | awk '{ print $1; }');
|
||||
expecting=header;
|
||||
in_description=0;
|
||||
in_empty=0;
|
||||
ticket=0;
|
||||
branch_regex="[a-z]+[a-z0-9-]*[a-z0-9]+";
|
||||
i=1;
|
||||
tickets="";
|
||||
|
||||
while [ $i -le $lines ]
|
||||
do
|
||||
# Grab the line we are studying
|
||||
line=$(head -n$i "$1" | tail -n1);
|
||||
|
||||
debug 1 "==> [$i] $line (description: $in_description, empty: $in_empty)";
|
||||
|
||||
err=$ERR_UNKNOWN;
|
||||
|
||||
if [ -z "$expecting" ]
|
||||
then
|
||||
quit $err;
|
||||
fi
|
||||
|
||||
if [ "${expecting#comment}" = "$expecting" ]
|
||||
then
|
||||
# Prefix comments to the expected tokens list
|
||||
expecting="comment $expecting";
|
||||
fi
|
||||
|
||||
debug 2 "Expecting: $expecting";
|
||||
|
||||
# Loop over each of the expected line formats
|
||||
for expect in $expecting
|
||||
do
|
||||
# Reset the error code each iteration
|
||||
err=$ERR_UNKNOWN;
|
||||
|
||||
# Test for validity of each line format
|
||||
# This is done first so $? contains the result
|
||||
case $expect in
|
||||
"header")
|
||||
err=$ERR_HEADER;
|
||||
echo "$line" | grep -Eq "^\[(ticket/[0-9]+|feature/$branch_regex|task/$branch_regex)\] .+$"
|
||||
result=$?
|
||||
if ! echo "$line" | grep -Eq "^\[(ticket/[0-9]+|feature/$branch_regex|task/$branch_regex)\] [A-Z].+$"
|
||||
then
|
||||
# Don't be too strict.
|
||||
# Commits may be temporary, intended to be squashed later.
|
||||
# Just issue a warning here.
|
||||
complain "$severity: heading should be a sentence beginning with a capital letter." 1>&2
|
||||
complain "You entered:" 1>&2
|
||||
complain "$line" 1>&2
|
||||
fi
|
||||
# restore exit code
|
||||
(exit $result)
|
||||
;;
|
||||
"empty")
|
||||
err=$ERR_EMPTY;
|
||||
echo "$line" | grep -Eq "^$"
|
||||
;;
|
||||
"description")
|
||||
err=$ERR_DESCRIPTION;
|
||||
# Free flow text, the line length was constrained by the initial check
|
||||
echo "$line" | grep -Eq "^.+$";
|
||||
;;
|
||||
"footer")
|
||||
err=$ERR_FOOTER;
|
||||
# Each ticket is on its own line
|
||||
echo "$line" | grep -Eq "^PHPBB3-[0-9]+$";
|
||||
;;
|
||||
"eof")
|
||||
err=$ERR_EOF;
|
||||
# Should not end up here
|
||||
false
|
||||
;;
|
||||
"possibly-eof")
|
||||
# Allow empty and/or comment lines at the end
|
||||
! tail -n +"$i" "$1" |grep -qvE '^($|#)'
|
||||
;;
|
||||
"comment")
|
||||
echo "$line" | grep -Eq "^#";
|
||||
;;
|
||||
*)
|
||||
complain "Unrecognised token $expect" >&2;
|
||||
quit $err;
|
||||
;;
|
||||
esac
|
||||
|
||||
# Preserve the result of the line check
|
||||
result=$?;
|
||||
|
||||
debug 2 "$expect - '$line' - $result";
|
||||
|
||||
if [ $result -eq 0 ]
|
||||
then
|
||||
# Break out the loop on success
|
||||
# otherwise roll on round and keep looking for a match
|
||||
break;
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $result -eq 0 ]
|
||||
then
|
||||
# Have we switched out of description mode?
|
||||
if [ $in_description -eq 1 ] && [ "$expect" != "description" ] && [ "$expect" != "empty" ] && [ "$expect" != "comment" ]
|
||||
then
|
||||
# Yes, okay we need to backtrace one line and reanalyse
|
||||
in_description=0;
|
||||
i=$(( $i - $in_empty ));
|
||||
|
||||
# Reset the empty counter
|
||||
in_empty=0;
|
||||
continue;
|
||||
fi
|
||||
|
||||
# Successful match, but on which line format
|
||||
case $expect in
|
||||
"header")
|
||||
expecting="empty";
|
||||
|
||||
echo "$line" | grep -Eq "^\[ticket/[0-9]+\]$" && (
|
||||
ticket=$(echo "$line" | sed 's,\[ticket/\([0-9]*\)\].*,\1,');
|
||||
)
|
||||
;;
|
||||
"empty")
|
||||
# Description might have empty lines as spacing
|
||||
expecting="footer description";
|
||||
in_empty=$(($in_empty + 1));
|
||||
|
||||
if [ $in_description -eq 1 ]
|
||||
then
|
||||
expecting="$expecting empty";
|
||||
fi
|
||||
;;
|
||||
"description")
|
||||
expecting="description empty";
|
||||
in_description=1;
|
||||
;;
|
||||
"footer")
|
||||
expecting="footer possibly-eof";
|
||||
if [ "$tickets" = "" ]
|
||||
then
|
||||
tickets="$line";
|
||||
else
|
||||
tickets="$tickets $line";
|
||||
fi
|
||||
;;
|
||||
"comment")
|
||||
# Comments should expect the same thing again
|
||||
;;
|
||||
"possibly-eof")
|
||||
expecting="eof";
|
||||
;;
|
||||
*)
|
||||
complain "Unrecognised token $expect" >&2;
|
||||
quit 254;
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "$expect" != "empty" ]
|
||||
then
|
||||
in_empty=0;
|
||||
fi
|
||||
|
||||
debug 3 "Now expecting: $expecting";
|
||||
else
|
||||
# None of the expected line formats matched
|
||||
# Guess we'll call it a day here then
|
||||
complain "Syntax error on line $i:" >&2;
|
||||
complain ">> $line" >&2;
|
||||
complain -n "Expecting: " >&2;
|
||||
complain "$expecting" | sed 's/ /, /g' >&2;
|
||||
quit $err;
|
||||
fi
|
||||
|
||||
i=$(( $i + 1 ));
|
||||
done
|
||||
|
||||
# If EOF is expected exit cleanly
|
||||
echo "$expecting" | grep -q "eof" || (
|
||||
# Unexpected EOF, error
|
||||
complain "Unexpected EOF encountered" >&2;
|
||||
quit $ERR_EOF;
|
||||
) && (
|
||||
# Do post scan checks
|
||||
if [ ! -z "$tickets" ]
|
||||
then
|
||||
# Check for duplicate tickets
|
||||
dupes=$(echo "$tickets" | sed 's/ /\n/g' | sort | uniq -d);
|
||||
|
||||
if [ ! -z "$dupes" ]
|
||||
then
|
||||
complain "The following tickets are repeated:" >&2;
|
||||
complain "$dupes" | sed 's/ /\n/g;s/^/* /g' >&2;
|
||||
quit $ERR_FOOTER;
|
||||
fi
|
||||
fi
|
||||
# Check the branch ticket is mentioned, doesn't make sense otherwise
|
||||
if [ $ticket -gt 0 ]
|
||||
then
|
||||
echo "$tickets" | grep -Eq "\bPHPBB3-$ticket\b" || (
|
||||
complain "Ticket ID [$ticket] of branch missing from list of tickets:" >&2;
|
||||
complain "$tickets" | sed 's/ /\n/g;s/^/* /g' >&2;
|
||||
quit $ERR_FOOTER;
|
||||
) || exit $?;
|
||||
fi
|
||||
# Got here okay exit to reality
|
||||
exit 0;
|
||||
);
|
||||
exit $?;
|
17
git-tools/hooks/install
Executable file
17
git-tools/hooks/install
Executable file
@@ -0,0 +1,17 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Script to install the git hooks
|
||||
# by symlinking them into the .git/hooks directory
|
||||
#
|
||||
# Usage (from within git-tools/hooks):
|
||||
# ./install
|
||||
|
||||
dir=$(dirname $0)
|
||||
|
||||
for file in $(ls $dir)
|
||||
do
|
||||
if [ $file != "install" ] && [ $file != "uninstall" ]
|
||||
then
|
||||
ln -s "../../git-tools/hooks/$file" "$dir/../../.git/hooks/$file"
|
||||
fi
|
||||
done
|
135
git-tools/hooks/pre-commit
Executable file
135
git-tools/hooks/pre-commit
Executable file
@@ -0,0 +1,135 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# A hook to disallow php syntax errors to be committed
|
||||
# by running php -l (lint) on them. It requires php-cli
|
||||
# to be installed.
|
||||
#
|
||||
# This is a pre-commit hook.
|
||||
#
|
||||
# To install this you can either copy or symlink it to
|
||||
# $GIT_DIR/hooks, example:
|
||||
#
|
||||
# ln -s ../../git-tools/hooks/pre-commit \\
|
||||
# .git/hooks/pre-commit
|
||||
|
||||
if [ -z "$PHP_BIN" ]
|
||||
then
|
||||
PHP_BIN=php
|
||||
fi
|
||||
|
||||
if [ "$(echo -e test)" = test ]
|
||||
then
|
||||
echo_e="echo -e"
|
||||
else
|
||||
echo_e="echo"
|
||||
fi
|
||||
|
||||
# necessary check for initial commit
|
||||
if git rev-parse --verify HEAD >/dev/null 2>&1
|
||||
then
|
||||
against=HEAD
|
||||
else
|
||||
# Initial commit: diff against an empty tree object
|
||||
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
|
||||
fi
|
||||
|
||||
error=0
|
||||
errors=""
|
||||
|
||||
if ! which "$PHP_BIN" >/dev/null 2>&1
|
||||
then
|
||||
echo "PHP Syntax check failed:"
|
||||
echo "PHP binary does not exist or is not in path: $PHP_BIN"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# dash does not support $'\n':
|
||||
# http://forum.soft32.com/linux2/Bug-409179-DASH-Settings-IFS-work-properly-ftopict70039.html
|
||||
IFS='
|
||||
'
|
||||
# get a list of staged files
|
||||
for line in $(git diff-index --cached --full-index $against)
|
||||
do
|
||||
# split needed values
|
||||
sha=$(echo $line | cut -d' ' -f4)
|
||||
temp=$(echo $line | cut -d' ' -f5)
|
||||
status=$(echo $temp | cut -d' ' -f1)
|
||||
filename=$(echo $temp | cut -d' ' -f2)
|
||||
|
||||
# file extension
|
||||
ext=$(echo $filename | sed 's/^.*\.//')
|
||||
|
||||
# only check files with php extension
|
||||
if [ $ext != "php" ]
|
||||
then
|
||||
continue
|
||||
fi
|
||||
|
||||
# do not check deleted files
|
||||
if [ $status = "D" ]
|
||||
then
|
||||
continue
|
||||
fi
|
||||
|
||||
# check the staged file content for syntax errors
|
||||
# using php -l (lint)
|
||||
# note: if display_errors=stderr in php.ini,
|
||||
# parse errors are printed on stderr; otherwise
|
||||
# they are printed on stdout.
|
||||
# we filter everything other than parse errors
|
||||
# with a grep below, therefore it should be safe
|
||||
# to combine stdout and stderr in all circumstances
|
||||
result=$(git cat-file -p $sha | "$PHP_BIN" -l 2>&1)
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
error=1
|
||||
# Swap back in correct filenames
|
||||
errors=$(echo "$errors"; echo "$result" |sed -e "s@in - on@in $filename on@g")
|
||||
fi
|
||||
done
|
||||
unset IFS
|
||||
|
||||
if [ $error -eq 1 ]
|
||||
then
|
||||
echo "PHP Syntax check failed:"
|
||||
# php "display errors" (display_errors php.ini value)
|
||||
# and "log errors" (log_errors php.ini value).
|
||||
# these are independent settings - see main/main.c in php source.
|
||||
# the "log errors" setting produces output which
|
||||
# starts with "PHP Parse error:"; the "display errors"
|
||||
# setting produces output starting with "Parse error:".
|
||||
# if both are turned on php dumps the parse error twice.
|
||||
# therefore here we try to grep for one version and
|
||||
# if that yields no results grep for the other version.
|
||||
#
|
||||
# other fun php facts:
|
||||
#
|
||||
# 1. in cli, display_errors and log_errors have different
|
||||
# destinations by default. display_errors prints to
|
||||
# standard output and log_errors prints to standard error.
|
||||
# whether these destinations make sense is left
|
||||
# as an exercise for the reader.
|
||||
# 2. as mentioned above, with all output turned on
|
||||
# php will print parse errors twice, one time on stdout
|
||||
# and one time on stderr.
|
||||
# 3. it is possible to set both display_errors and log_errors
|
||||
# to off. if this is done php will print the text
|
||||
# "Errors parsing <file>" but will not say what
|
||||
# the errors are. useful behavior, this.
|
||||
# 4. on my system display_errors defaults to on and
|
||||
# log_errors defaults to off, therefore providing
|
||||
# by default one copy of messages. your mileage may vary.
|
||||
# 5. by setting display_errors=stderr and log_errors=on,
|
||||
# both sets of messages will be printed on stderr.
|
||||
# 6. php-cgi binary, given display_errors=stderr and
|
||||
# log_errors=on, still prints both sets of messages
|
||||
# on stderr, but formats one set as an html fragment.
|
||||
# 7. your entry here? ;)
|
||||
$echo_e "$errors" | grep "^Parse error:"
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
# match failed
|
||||
$echo_e "$errors" | grep "^PHP Parse error:"
|
||||
fi
|
||||
exit 1
|
||||
fi
|
42
git-tools/hooks/prepare-commit-msg
Executable file
42
git-tools/hooks/prepare-commit-msg
Executable file
@@ -0,0 +1,42 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# A hook to add [$branch] to the beginning of a commit message
|
||||
# if certain conditions are met.
|
||||
#
|
||||
# This is a prepare-commit-msg hook.
|
||||
#
|
||||
# To install this you can either copy or symlink it to
|
||||
# $GIT_DIR/hooks, example:
|
||||
#
|
||||
# ln -s ../../git-tools/hooks/prepare-commit-msg \\
|
||||
# .git/hooks/prepare-commit-msg
|
||||
|
||||
# get branch name
|
||||
branch="$(git symbolic-ref HEAD)"
|
||||
|
||||
# exit if no branch name is present
|
||||
# (eg. detached HEAD)
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
exit
|
||||
fi
|
||||
|
||||
# strip off refs/heads/
|
||||
branch="$(echo "$branch" | sed "s/refs\/heads\///g")"
|
||||
|
||||
# add [branchname] to commit message
|
||||
# * only run when normal commit is made (without -m or -F;
|
||||
# not a merge, etc.)
|
||||
# * also make sure the branch name begins with bug/ or feature/
|
||||
if [ "$2" = "" ]
|
||||
then
|
||||
tail="";
|
||||
|
||||
# Branch is prefixed with 'ticket/', append ticket ID to message
|
||||
if [ "$branch" != "${branch##ticket/}" ];
|
||||
then
|
||||
tail="$(printf "\n\nPHPBB3-${branch##ticket/}")";
|
||||
fi
|
||||
|
||||
echo "[$branch] $tail$(cat "$1")" > "$1"
|
||||
fi
|
16
git-tools/hooks/uninstall
Executable file
16
git-tools/hooks/uninstall
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Script to uninstall the git hooks
|
||||
#
|
||||
# Usage (from within git-tools/hooks):
|
||||
# ./uninstall
|
||||
|
||||
dir=$(dirname $0)
|
||||
|
||||
for file in $(ls $dir)
|
||||
do
|
||||
if [ $file != "install" ] && [ $file != "uninstall" ]
|
||||
then
|
||||
rm -f "$dir/../../.git/hooks/$file"
|
||||
fi
|
||||
done
|
175
git-tools/merge.php
Executable file
175
git-tools/merge.php
Executable file
@@ -0,0 +1,175 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package phpBB3
|
||||
* @copyright (c) 2011 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
function show_usage()
|
||||
{
|
||||
$filename = basename(__FILE__);
|
||||
|
||||
echo "$filename merges a github pull request.\n";
|
||||
echo "\n";
|
||||
|
||||
echo "Usage: [php] $filename -p pull_request_id [OPTIONS]\n";
|
||||
echo "\n";
|
||||
|
||||
echo "Options:\n";
|
||||
echo " -p pull_request_id The pull request id to be merged (mandatory)\n";
|
||||
echo " -r remote Remote of upstream, defaults to 'upstream' (optional)\n";
|
||||
echo " -d Outputs the commands instead of running them (optional)\n";
|
||||
echo " -h This help text\n";
|
||||
|
||||
exit(2);
|
||||
}
|
||||
|
||||
// Handle arguments
|
||||
$opts = getopt('p:r:dh');
|
||||
|
||||
if (empty($opts) || isset($opts['h']))
|
||||
{
|
||||
show_usage();
|
||||
}
|
||||
|
||||
$pull_id = get_arg($opts, 'p', '');
|
||||
$remote = get_arg($opts, 'r', 'upstream');
|
||||
$dry_run = !get_arg($opts, 'd', true);
|
||||
|
||||
try
|
||||
{
|
||||
exit(work($pull_id, $remote));
|
||||
}
|
||||
catch (RuntimeException $e)
|
||||
{
|
||||
echo $e->getMessage();
|
||||
exit($e->getCode());
|
||||
}
|
||||
|
||||
function work($pull_id, $remote)
|
||||
{
|
||||
// Get some basic data
|
||||
$pull = get_pull('phpbb', 'phpbb3', $pull_id);
|
||||
|
||||
if (!$pull_id)
|
||||
{
|
||||
show_usage();
|
||||
}
|
||||
|
||||
if ($pull['state'] != 'open')
|
||||
{
|
||||
throw new RuntimeException(sprintf("Error: pull request is closed\n",
|
||||
$target_branch), 5);
|
||||
}
|
||||
|
||||
$pull_user = $pull['head'][0];
|
||||
$pull_branch = $pull['head'][1];
|
||||
$target_branch = $pull['base'][1];
|
||||
|
||||
switch ($target_branch)
|
||||
{
|
||||
case 'develop-olympus':
|
||||
run("git checkout develop-olympus");
|
||||
run("git pull $remote develop-olympus");
|
||||
|
||||
add_remote($pull_user, 'phpbb3');
|
||||
run("git fetch $pull_user");
|
||||
run("git merge --no-ff $pull_user/$pull_branch");
|
||||
run("phpunit");
|
||||
|
||||
run("git checkout develop");
|
||||
run("git pull $remote develop");
|
||||
run("git merge --no-ff develop-olympus");
|
||||
run("phpunit");
|
||||
break;
|
||||
|
||||
case 'develop':
|
||||
run("git checkout develop");
|
||||
run("git pull $remote develop");
|
||||
|
||||
add_remote($pull_user, 'phpbb3');
|
||||
run("git fetch $pull_user");
|
||||
run("git merge --no-ff $pull_user/$pull_branch");
|
||||
run("phpunit");
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new RuntimeException(sprintf("Error: pull request target branch '%s' is not a main branch\n",
|
||||
$target_branch), 5);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function add_remote($username, $repository, $pushable = false)
|
||||
{
|
||||
$url = get_repository_url($username, $repository, false);
|
||||
run("git remote add $username $url", true);
|
||||
|
||||
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)
|
||||
{
|
||||
$contents = file_get_contents("http://github.com/api/v2/json/$query");
|
||||
|
||||
if ($contents === false)
|
||||
{
|
||||
throw new RuntimeException("Error: failed to retrieve pull request data\n", 4);
|
||||
}
|
||||
|
||||
return json_decode($contents);
|
||||
}
|
||||
|
||||
function get_pull($username, $repository, $pull_id)
|
||||
{
|
||||
$request = api_request("pulls/$username/$repository/$pull_id");
|
||||
|
||||
$pull = $request->pull;
|
||||
|
||||
$pull_data = array(
|
||||
'base' => array($pull->base->user->login, $pull->base->ref),
|
||||
'head' => array($pull->head->user->login, $pull->head->ref),
|
||||
'state' => $pull->state,
|
||||
);
|
||||
|
||||
return $pull_data;
|
||||
}
|
||||
|
||||
function get_arg($array, $index, $default)
|
||||
{
|
||||
return isset($array[$index]) ? $array[$index] : $default;
|
||||
}
|
||||
|
||||
function run($cmd, $ignore_fail = false)
|
||||
{
|
||||
global $dry_run;
|
||||
|
||||
if (!empty($dry_run))
|
||||
{
|
||||
echo "$cmd\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
passthru(escapeshellcmd($cmd), $status);
|
||||
|
||||
if ($status != 0 && !$ignore_fail)
|
||||
{
|
||||
throw new RuntimeException(sprintf("Error: command '%s' failed with status %s'\n",
|
||||
$cmd, $status), 6);
|
||||
}
|
||||
}
|
||||
}
|
248
git-tools/setup_github_network.php
Executable file
248
git-tools/setup_github_network.php
Executable file
@@ -0,0 +1,248 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package phpBB3
|
||||
* @copyright (c) 2011 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
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|network [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 " network 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
|
||||
$network = get_network($username, $repository);
|
||||
$collaborators = get_collaborators($username, $repository);
|
||||
|
||||
if ($network === false || $collaborators === false)
|
||||
{
|
||||
echo "Error: failed to retrieve network or collaborators\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
switch ($scope)
|
||||
{
|
||||
case 'collaborators':
|
||||
$remotes = array_intersect_key($network, $collaborators);
|
||||
break;
|
||||
|
||||
case 'organisation':
|
||||
$remotes = array_intersect_key($network, get_organisation_members($username));
|
||||
break;
|
||||
|
||||
case 'contributors':
|
||||
$remotes = array_intersect_key($network, get_contributors($username, $repository));
|
||||
break;
|
||||
|
||||
case 'network':
|
||||
$remotes = $network;
|
||||
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)
|
||||
{
|
||||
$contents = file_get_contents("http://github.com/api/v2/json/$query");
|
||||
if ($contents === false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return json_decode($contents);
|
||||
}
|
||||
|
||||
function get_contributors($username, $repository)
|
||||
{
|
||||
$request = api_request("repos/show/$username/$repository/contributors");
|
||||
if ($request === false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$usernames = array();
|
||||
foreach ($request->contributors as $contributor)
|
||||
{
|
||||
$usernames[$contributor->login] = $contributor->login;
|
||||
}
|
||||
|
||||
return $usernames;
|
||||
}
|
||||
|
||||
function get_organisation_members($username)
|
||||
{
|
||||
$request = api_request("organizations/$username/public_members");
|
||||
if ($request === false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$usernames = array();
|
||||
foreach ($request->users as $member)
|
||||
{
|
||||
$usernames[$member->login] = $member->login;
|
||||
}
|
||||
|
||||
return $usernames;
|
||||
}
|
||||
|
||||
function get_collaborators($username, $repository)
|
||||
{
|
||||
$request = api_request("repos/show/$username/$repository/collaborators");
|
||||
if ($request === false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$usernames = array();
|
||||
foreach ($request->collaborators as $collaborator)
|
||||
{
|
||||
$usernames[$collaborator] = $collaborator;
|
||||
}
|
||||
|
||||
return $usernames;
|
||||
}
|
||||
|
||||
function get_network($username, $repository)
|
||||
{
|
||||
$request = api_request("repos/show/$username/$repository/network");
|
||||
if ($request === false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$usernames = array();
|
||||
foreach ($request->network as $network)
|
||||
{
|
||||
$usernames[$network->owner] = array(
|
||||
'username' => $network->owner,
|
||||
'repository' => $network->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));
|
||||
}
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 3.8 KiB |
BIN
phpBB/adm/images/phpbb_logo.png
Normal file
BIN
phpBB/adm/images/phpbb_logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.1 KiB |
@@ -199,6 +199,7 @@ function adm_page_footer($copyright_html = true)
|
||||
'DEBUG_OUTPUT' => (defined('DEBUG')) ? $debug_output : '',
|
||||
'TRANSLATION_INFO' => (!empty($user->lang['TRANSLATION_INFO'])) ? $user->lang['TRANSLATION_INFO'] : '',
|
||||
'S_COPYRIGHT_HTML' => $copyright_html,
|
||||
'CREDIT_LINE' => $user->lang('POWERED_BY', '<a href="http://www.phpbb.com/">phpBB</a>® Forum Software © phpBB Group'),
|
||||
'VERSION' => $config['version'])
|
||||
);
|
||||
|
||||
@@ -237,7 +238,7 @@ function build_select($option_ary, $option_default = false)
|
||||
/**
|
||||
* Build radio fields in acp pages
|
||||
*/
|
||||
function h_radio($name, &$input_ary, $input_default = false, $id = false, $key = false)
|
||||
function h_radio($name, $input_ary, $input_default = false, $id = false, $key = false, $separator = '')
|
||||
{
|
||||
global $user;
|
||||
|
||||
@@ -246,7 +247,7 @@ function h_radio($name, &$input_ary, $input_default = false, $id = false, $key =
|
||||
foreach ($input_ary as $value => $title)
|
||||
{
|
||||
$selected = ($input_default !== false && $value == $input_default) ? ' checked="checked"' : '';
|
||||
$html .= '<label><input type="radio" name="' . $name . '"' . (($id && !$id_assigned) ? ' id="' . $id . '"' : '') . ' value="' . $value . '"' . $selected . (($key) ? ' accesskey="' . $key . '"' : '') . ' class="radio" /> ' . $user->lang[$title] . '</label>';
|
||||
$html .= '<label><input type="radio" name="' . $name . '"' . (($id && !$id_assigned) ? ' id="' . $id . '"' : '') . ' value="' . $value . '"' . $selected . (($key) ? ' accesskey="' . $key . '"' : '') . ' class="radio" /> ' . $user->lang[$title] . '</label>' . $separator;
|
||||
$id_assigned = true;
|
||||
}
|
||||
|
||||
@@ -276,7 +277,7 @@ function build_cfg_template($tpl_type, $key, &$new, $config_key, $vars)
|
||||
$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 = '<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 'dimension':
|
||||
@@ -402,7 +403,7 @@ function validate_config_vars($config_vars, &$cfg_array, &$error)
|
||||
switch ($validator[$type])
|
||||
{
|
||||
case 'string':
|
||||
$length = strlen($cfg_array[$config_name]);
|
||||
$length = utf8_strlen($cfg_array[$config_name]);
|
||||
|
||||
// the column is a VARCHAR
|
||||
$validator[$max] = (isset($validator[$max])) ? min(255, $validator[$max]) : 255;
|
||||
@@ -432,6 +433,20 @@ function validate_config_vars($config_vars, &$cfg_array, &$error)
|
||||
{
|
||||
$error[] = sprintf($user->lang['SETTING_TOO_BIG'], $user->lang[$config_definition['lang']], $validator[$max]);
|
||||
}
|
||||
|
||||
if (strpos($config_name, '_max') !== false)
|
||||
{
|
||||
// Min/max pairs of settings should ensure that min <= max
|
||||
// Replace _max with _min to find the name of the minimum
|
||||
// corresponding configuration variable
|
||||
$min_name = str_replace('_max', '_min', $config_name);
|
||||
|
||||
if (isset($cfg_array[$min_name]) && is_numeric($cfg_array[$min_name]) && $cfg_array[$config_name] < $cfg_array[$min_name])
|
||||
{
|
||||
// A minimum value exists and the maximum value is less than it
|
||||
$error[] = sprintf($user->lang['SETTING_TOO_LOW'], $user->lang[$config_definition['lang']], (int) $cfg_array[$min_name]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
// Absolute path
|
||||
@@ -533,7 +548,7 @@ function validate_config_vars($config_vars, &$cfg_array, &$error)
|
||||
// Check if the path is writable
|
||||
if ($config_definition['validate'] == 'wpath' || $config_definition['validate'] == 'rwpath')
|
||||
{
|
||||
if (file_exists($phpbb_root_path . $cfg_array[$config_name]) && !@is_writable($phpbb_root_path . $cfg_array[$config_name]))
|
||||
if (file_exists($phpbb_root_path . $cfg_array[$config_name]) && !phpbb_is_writable($phpbb_root_path . $cfg_array[$config_name]))
|
||||
{
|
||||
$error[] = sprintf($user->lang['DIRECTORY_NOT_WRITABLE'], $cfg_array[$config_name]);
|
||||
}
|
||||
@@ -559,7 +574,11 @@ function validate_range($value_ary, &$error)
|
||||
'BOOL' => array('php_type' => 'int', 'min' => 0, 'max' => 1),
|
||||
'USINT' => array('php_type' => 'int', 'min' => 0, 'max' => 65535),
|
||||
'UINT' => array('php_type' => 'int', 'min' => 0, 'max' => (int) 0x7fffffff),
|
||||
'INT' => array('php_type' => 'int', 'min' => (int) 0x80000000, 'max' => (int) 0x7fffffff),
|
||||
// Do not use (int) 0x80000000 - it evaluates to different
|
||||
// values on 32-bit and 64-bit systems.
|
||||
// Apparently -2147483648 is a float on 32-bit systems,
|
||||
// despite fitting in an int, thus explicit cast is needed.
|
||||
'INT' => array('php_type' => 'int', 'min' => (int) -2147483648, 'max' => (int) 0x7fffffff),
|
||||
'TINT' => array('php_type' => 'int', 'min' => -128, 'max' => 127),
|
||||
|
||||
'VCHAR' => array('php_type' => 'string', 'min' => 0, 'max' => 255),
|
||||
@@ -582,7 +601,7 @@ function validate_range($value_ary, &$error)
|
||||
{
|
||||
case 'string' :
|
||||
$max = (isset($column[1])) ? min($column[1],$type['max']) : $type['max'];
|
||||
if (strlen($value['value']) > $max)
|
||||
if (utf8_strlen($value['value']) > $max)
|
||||
{
|
||||
$error[] = sprintf($user->lang['SETTING_TOO_LONG'], $user->lang[$value['lang']], $max);
|
||||
}
|
||||
|
@@ -31,8 +31,8 @@
|
||||
|
||||
function display_details(option)
|
||||
{
|
||||
document.getElementById('acp_unban').unbangivereason.value = ban_give_reason[option];
|
||||
document.getElementById('acp_unban').unbanreason.value = ban_reason[option];
|
||||
document.getElementById('acp_unban').unbangivereason.innerHTML = ban_give_reason[option];
|
||||
document.getElementById('acp_unban').unbanreason.innerHTML = ban_reason[option];
|
||||
document.getElementById('acp_unban').unbanlength.value = ban_length[option];
|
||||
}
|
||||
|
||||
|
@@ -38,6 +38,10 @@
|
||||
<dt><label for="priority">{L_MAIL_PRIORITY}:</label></dt>
|
||||
<dd><select id="priority" name="mail_priority_flag">{S_PRIORITY_OPTIONS}</select></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="banned">{L_MAIL_BANNED}:</label><br /><span>{L_MAIL_BANNED_EXPLAIN}</span></dt>
|
||||
<dd><input id="banned" name="mail_banned_flag" type="checkbox" class="radio" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="send">{L_SEND_IMMEDIATELY}:</label></dt>
|
||||
<dd><input id="send" type="checkbox" class="radio" name="send_immediately" checked="checked" /></dd>
|
||||
|
@@ -58,7 +58,7 @@
|
||||
|
||||
/**
|
||||
* Init the wanted display functionality if javascript is enabled.
|
||||
* If javascript is not available, the user is still able to properly administrate.
|
||||
* If javascript is not available, the user is still able to properly administer.
|
||||
*/
|
||||
onload = function()
|
||||
{
|
||||
@@ -140,6 +140,12 @@
|
||||
<dt><label for="parent">{L_FORUM_PARENT}:</label></dt>
|
||||
<dd><select id="parent" name="forum_parent_id"><option value="0"<!-- IF not S_FORUM_PARENT_ID --> selected="selected"<!-- ENDIF -->>{L_NO_PARENT}</option>{S_PARENT_OPTIONS}</select></dd>
|
||||
</dl>
|
||||
<!-- IF S_CAN_COPY_PERMISSIONS -->
|
||||
<dl>
|
||||
<dt><label for="forum_perm_from">{L_COPY_PERMISSIONS}:</label><br /><span>{L_COPY_PERMISSIONS_EXPLAIN}</span></dt>
|
||||
<dd><select id="forum_perm_from" name="forum_perm_from"><option value="0">{L_NO_PERMISSIONS}</option>{S_FORUM_OPTIONS}</select></dd>
|
||||
</dl>
|
||||
<!-- ENDIF -->
|
||||
<dl>
|
||||
<dt><label for="forum_name">{L_FORUM_NAME}:</label></dt>
|
||||
<dd><input class="text medium" type="text" id="forum_name" name="forum_name" value="{FORUM_NAME}" maxlength="255" /></dd>
|
||||
@@ -160,11 +166,11 @@
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="forum_password">{L_FORUM_PASSWORD}:</label><br /><span>{L_FORUM_PASSWORD_EXPLAIN}</span></dt>
|
||||
<dd><input type="password" id="forum_password" name="forum_password" value="<!-- IF S_FORUM_PASSWORD_SET -->      <!-- ENDIF -->" /></dd>
|
||||
<dd><input type="password" id="forum_password" name="forum_password" value="<!-- IF S_FORUM_PASSWORD_SET -->      <!-- ENDIF -->" autocomplete="off" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="forum_password_confirm">{L_FORUM_PASSWORD_CONFIRM}:</label><br /><span>{L_FORUM_PASSWORD_CONFIRM_EXPLAIN}</span></dt>
|
||||
<dd><input type="password" id="forum_password_confirm" name="forum_password_confirm" value="<!-- IF S_FORUM_PASSWORD_SET -->      <!-- ENDIF -->" /></dd>
|
||||
<dd><input type="password" id="forum_password_confirm" name="forum_password_confirm" value="<!-- IF S_FORUM_PASSWORD_SET -->      <!-- ENDIF -->" autocomplete="off" /></dd>
|
||||
</dl>
|
||||
<!-- IF S_FORUM_PASSWORD_SET -->
|
||||
<dl>
|
||||
@@ -176,12 +182,6 @@
|
||||
<dt><label for="forum_style">{L_FORUM_STYLE}:</label></dt>
|
||||
<dd><select id="forum_style" name="forum_style"><option value="0">{L_DEFAULT_STYLE}</option>{S_STYLES_OPTIONS}</select></dd>
|
||||
</dl>
|
||||
<!-- IF S_CAN_COPY_PERMISSIONS -->
|
||||
<dl>
|
||||
<dt><label for="forum_perm_from">{L_COPY_PERMISSIONS}:</label><br /><span>{L_COPY_PERMISSIONS_EXPLAIN}</span></dt>
|
||||
<dd><select id="forum_perm_from" name="forum_perm_from"><option value="0">{L_NO_PERMISSIONS}</option>{S_FORUM_OPTIONS}</select></dd>
|
||||
</dl>
|
||||
<!-- ENDIF -->
|
||||
</fieldset>
|
||||
|
||||
<div id="forum_cat_options">
|
||||
@@ -189,8 +189,8 @@
|
||||
<legend>{L_GENERAL_FORUM_SETTINGS}</legend>
|
||||
<dl>
|
||||
<dt><label for="display_active">{L_DISPLAY_ACTIVE_TOPICS}:</label><br /><span>{L_DISPLAY_ACTIVE_TOPICS_EXPLAIN}</span></dt>
|
||||
<dd><label><input type="radio" class="radio" name="display_active" value="1"<!-- IF S_DISPLAY_ACTIVE_TOPICS --> id="display_active" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="display_active" value="0"<!-- IF not S_DISPLAY_ACTIVE_TOPICS --> id="display_active" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
<dd><label><input type="radio" class="radio" name="display_active" value="1"<!-- IF S_ENABLE_ACTIVE_TOPICS --> id="display_active" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="display_active" value="0"<!-- IF not S_ENABLE_ACTIVE_TOPICS --> id="display_active" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
@@ -74,7 +74,7 @@
|
||||
<fieldset class="tabulated">
|
||||
<legend>{L_TITLE}</legend>
|
||||
|
||||
<table cellspacing="1">
|
||||
<table cellspacing="1" id="smilies">
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="{COLSPAN}">{L_CONFIG}</th>
|
||||
@@ -94,7 +94,7 @@
|
||||
<td>{L_ORDER}</td>
|
||||
<!-- ENDIF -->
|
||||
<!-- IF S_ADD -->
|
||||
<td>{L_ADD}</td>
|
||||
<td>{L_ADD} <a href="#" onclick="marklist('smilies', 'add_img', true); return false;">({L_MARK_ALL})</a></td>
|
||||
<!-- ENDIF -->
|
||||
</tr>
|
||||
</thead>
|
||||
|
@@ -34,6 +34,36 @@
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF S_MBSTRING_LOADED -->
|
||||
<!-- IF S_MBSTRING_FUNC_OVERLOAD_FAIL -->
|
||||
<div class="errorbox">
|
||||
<h3>{L_ERROR_MBSTRING_FUNC_OVERLOAD}</h3>
|
||||
<p>{L_ERROR_MBSTRING_FUNC_OVERLOAD_EXPLAIN}</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF S_MBSTRING_ENCODING_TRANSLATION_FAIL -->
|
||||
<div class="errorbox">
|
||||
<h3>{L_ERROR_MBSTRING_ENCODING_TRANSLATION}</h3>
|
||||
<p>{L_ERROR_MBSTRING_ENCODING_TRANSLATION_EXPLAIN}</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF S_MBSTRING_HTTP_INPUT_FAIL -->
|
||||
<div class="errorbox">
|
||||
<h3>{L_ERROR_MBSTRING_HTTP_INPUT}</h3>
|
||||
<p>{L_ERROR_MBSTRING_HTTP_INPUT_EXPLAIN}</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF S_MBSTRING_HTTP_OUTPUT_FAIL -->
|
||||
<div class="errorbox">
|
||||
<h3>{L_ERROR_MBSTRING_HTTP_OUTPUT}</h3>
|
||||
<p>{L_ERROR_MBSTRING_HTTP_OUTPUT_EXPLAIN}</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF S_WRITABLE_CONFIG -->
|
||||
<div class="errorbox notice">
|
||||
<p>{L_WRITABLE_CONFIG}</p>
|
||||
|
@@ -63,6 +63,10 @@
|
||||
<dt><label for="field_required">{L_REQUIRED_FIELD}:</label><br /><span>{L_REQUIRED_FIELD_EXPLAIN}</span></dt>
|
||||
<dd><input type="checkbox" class="radio" id="field_required" name="field_required" value="1"<!-- IF S_FIELD_REQUIRED --> checked="checked"<!-- ENDIF --> /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="field_show_novalue">{L_SHOW_NOVALUE_FIELD}:</label><br /><span>{L_SHOW_NOVALUE_FIELD_EXPLAIN}</span></dt>
|
||||
<dd><input type="checkbox" class="radio" id="field_show_novalue" name="field_show_novalue" value="1"<!-- IF S_FIELD_SHOW_NOVALUE --> checked="checked"<!-- ENDIF --> /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="field_hide">{L_HIDE_PROFILE_FIELD}:</label><br /><span>{L_HIDE_PROFILE_FIELD_EXPLAIN}</span></dt>
|
||||
<dd><input type="checkbox" class="radio" id="field_hide" name="field_hide" value="1"<!-- IF S_FIELD_HIDE --> checked="checked"<!-- ENDIF --> /></dd>
|
||||
|
@@ -35,8 +35,8 @@
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="special_rank">{L_RANK_SPECIAL}:</label></dt>
|
||||
<dd><label><input onchange="dE('posts', -1)" type="radio" class="radio" name="special_rank" value="1" id="special_rank"<!-- IF S_SPECIAL_RANK --> checked="checked"<!-- ENDIF --> />{L_YES}</label>
|
||||
<label><input onchange="dE('posts', 1)" type="radio" class="radio" name="special_rank" value="0"<!-- IF not S_SPECIAL_RANK --> checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
<dd><label><input onclick="dE('posts', -1)" type="radio" class="radio" name="special_rank" value="1" id="special_rank"<!-- IF S_SPECIAL_RANK --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input onclick="dE('posts', 1)" type="radio" class="radio" name="special_rank" value="0"<!-- IF not S_SPECIAL_RANK --> checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<!-- IF S_SPECIAL_RANK --><div id="posts" style="display: none;"><!-- ELSE --><div id="posts"><!-- ENDIF -->
|
||||
<dl>
|
||||
|
@@ -22,6 +22,21 @@
|
||||
<dt><label for="new_id">{L_REPLACE}:</label><br /><span>{L_REPLACE_EXPLAIN}</span></dt>
|
||||
<dd><select id="new_id" name="new_id">{S_REPLACE_OPTIONS}</select></dd>
|
||||
</dl>
|
||||
<!-- IF S_DELETE_STYLE -->
|
||||
<hr />
|
||||
<dl>
|
||||
<dt><label for="new_template_id">{L_DELETE_TEMPLATE}:</label><br /><span>{L_REPLACE_TEMPLATE_EXPLAIN}</span></dt>
|
||||
<dd><select id="new_template_id" name="new_template_id">{S_REPLACE_TEMPLATE_OPTIONS}</select></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="new_theme_id">{L_DELETE_THEME}:</label><br /><span>{L_REPLACE_THEME_EXPLAIN}</span></dt>
|
||||
<dd><select id="new_theme_id" name="new_theme_id">{S_REPLACE_THEME_OPTIONS}</select></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="new_imageset_id">{L_DELETE_IMAGESET}:</label><br /><span>{L_REPLACE_IMAGESET_EXPLAIN}</span></dt>
|
||||
<dd><select id="new_imageset_id" name="new_imageset_id">{S_REPLACE_IMAGESET_OPTIONS}</select></dd>
|
||||
</dl>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<p class="quick">
|
||||
<input class="button1" type="submit" name="update" value="{L_DELETE}" />
|
||||
@@ -77,7 +92,7 @@
|
||||
|
||||
/**
|
||||
* Init the wanted display functionality if javascript is enabled.
|
||||
* If javascript is not available, the user is still able to properly administrate.
|
||||
* If javascript is not available, the user is still able to properly administer.
|
||||
*/
|
||||
onload = function()
|
||||
{
|
||||
@@ -387,6 +402,12 @@
|
||||
<td class="row3" colspan="{$COLSPAN}"><strong>{L_INSTALLED}</strong></td>
|
||||
</tr>
|
||||
<!-- BEGIN installed -->
|
||||
<!-- IF installed.S_INACTIVE and not $INACTIVE_STYLES -->
|
||||
<!-- DEFINE $INACTIVE_STYLES = 1 -->
|
||||
<tr>
|
||||
<td class="row3" colspan="{$COLSPAN}"><strong>{L_INACTIVE_STYLES}</strong></td>
|
||||
</tr>
|
||||
<!-- ENDIF -->
|
||||
<tr>
|
||||
<td><strong>{installed.NAME}</strong><!-- IF installed.S_DEFAULT_STYLE --> *<!-- ENDIF --></td>
|
||||
<!-- IF S_STYLE -->
|
||||
|
@@ -18,6 +18,12 @@
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF NEXT_FEATURE_VERSION -->
|
||||
<div class="errorbox">
|
||||
<p>{UPGRADE_INSTRUCTIONS}</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<fieldset>
|
||||
<legend></legend>
|
||||
<dl>
|
||||
|
@@ -13,7 +13,7 @@
|
||||
<fieldset>
|
||||
<legend>{L_SELECT_USER}</legend>
|
||||
<dl>
|
||||
<dt><label for="username">{L_FIND_USERNAME}:</label></dt>
|
||||
<dt><label for="username">{L_ENTER_USERNAME}:</label></dt>
|
||||
<dd><input class="text medium" type="text" id="username" name="username" /></dd>
|
||||
<dd>[ <a href="{U_FIND_USERNAME}" onclick="find_username(this.href); return false;">{L_FIND_USERNAME}</a> ]</dd>
|
||||
<dd class="full" style="text-align: left;"><label><input type="checkbox" class="radio" id="anonymous" name="u" value="{ANONYMOUS_USER_ID}" /> {L_SELECT_ANONYMOUS}</label></dd>
|
||||
|
@@ -43,19 +43,19 @@
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="user_email">{L_EMAIL}:</label></dt>
|
||||
<dd><input class="text medium" type="text" id="user_email" name="user_email" value="{USER_EMAIL}" /></dd>
|
||||
<dd><input class="text medium" type="text" id="user_email" name="user_email" value="{USER_EMAIL}" autocomplete="off" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="email_confirm">{L_CONFIRM_EMAIL}:</label><br /><span>{L_CONFIRM_EMAIL_EXPLAIN}</span></dt>
|
||||
<dd><input class="text medium" type="text" id="email_confirm" name="email_confirm" value="" /></dd>
|
||||
<dd><input class="text medium" type="text" id="email_confirm" name="email_confirm" value="" autocomplete="off" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="new_password">{L_NEW_PASSWORD}:</label><br /><span>{L_CHANGE_PASSWORD_EXPLAIN}</span></dt>
|
||||
<dd><input type="password" id="new_password" name="new_password" value="" /></dd>
|
||||
<dd><input type="password" id="new_password" name="new_password" value="" autocomplete="off" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="password_confirm">{L_CONFIRM_PASSWORD}:</label><br /><span>{L_CONFIRM_PASSWORD_EXPLAIN}</span></dt>
|
||||
<dd><input type="password" id="password_confirm" name="password_confirm" value="" /></dd>
|
||||
<dd><input type="password" id="password_confirm" name="password_confirm" value="" autocomplete="off" /></dd>
|
||||
</dl>
|
||||
|
||||
<p class="quick">
|
||||
@@ -135,19 +135,24 @@
|
||||
</form>
|
||||
|
||||
<!-- IF not S_OWN_ACCOUNT -->
|
||||
<form id="user_delete" method="post" action="{U_ACTION}">
|
||||
<fieldset>
|
||||
<legend>{L_DELETE_USER}</legend>
|
||||
<dl>
|
||||
<dt><label for="delete_type">{L_DELETE_USER}:</label><br /><span>{L_DELETE_USER_EXPLAIN}</span></dt>
|
||||
<dd><select id="delete_type" name="delete_type"><option value="retain">{L_RETAIN_POSTS}</option><option value="remove">{L_DELETE_POSTS}</option></select></dd>
|
||||
</dl>
|
||||
<p class="quick">
|
||||
<input class="button1" type="submit" name="update" value="{L_SUBMIT}" />
|
||||
<input type="hidden" name="delete" value="1" />
|
||||
{S_FORM_TOKEN}
|
||||
</p>
|
||||
</fieldset>
|
||||
<form id="user_delete" method="post" action="{U_ACTION}">
|
||||
<fieldset>
|
||||
<legend>{L_DELETE_USER}</legend>
|
||||
<dl>
|
||||
<dt><label for="delete_type">{L_DELETE_USER}:</label><br /><span>{L_DELETE_USER_EXPLAIN}</span></dt>
|
||||
<dd>
|
||||
<!-- IF USER_HAS_POSTS -->
|
||||
<select id="delete_type" name="delete_type"><option class="sep" value="">{L_SELECT_OPTION}</option><option value="retain">{L_RETAIN_POSTS}</option><option value="remove">{L_DELETE_POSTS}</option></select></dd>
|
||||
<!-- ELSE -->
|
||||
{L_USER_NO_POSTS_TO_DELETE}<input type="hidden" id="delete_type" name="delete_type" value="retain" />
|
||||
<!-- ENDIF -->
|
||||
</dl>
|
||||
<p class="quick">
|
||||
<input class="button1" type="submit" name="update" value="{L_SUBMIT}" />
|
||||
<input type="hidden" name="delete" value="1" />
|
||||
{S_FORM_TOKEN}
|
||||
</p>
|
||||
</fieldset>
|
||||
</form>
|
||||
<!-- ENDIF -->
|
||||
</form>
|
||||
<!-- ENDIF -->
|
||||
|
@@ -22,9 +22,8 @@
|
||||
w: '{LA_BBCODE_W_HELP}',
|
||||
s: '{LA_BBCODE_S_HELP}',
|
||||
f: '{LA_BBCODE_F_HELP}',
|
||||
e: '{LA_BBCODE_E_HELP}',
|
||||
y: '{LA_BBCODE_Y_HELP}',
|
||||
d: '{LA_BBCODE_D_HELP}',
|
||||
t: '{LA_BBCODE_T_HELP}',
|
||||
tip: '{L_STYLES_TIP}'
|
||||
<!-- BEGIN custom_tags -->
|
||||
,cb_{custom_tags.BBCODE_ID}: '{custom_tags.A_BBCODE_HELPLINE}'
|
||||
@@ -56,7 +55,7 @@
|
||||
<input type="button" class="button2" accesskey="c" name="addbbcode8" value="Code" style="width: 40px" onclick="bbstyle(8)" onmouseover="helpline('c')" onmouseout="helpline('tip')" />
|
||||
<input type="button" class="button2" accesskey="l" name="addbbcode10" value="List" style="width: 40px" onclick="bbstyle(10)" onmouseover="helpline('l')" onmouseout="helpline('tip')" />
|
||||
<input type="button" class="button2" accesskey="o" name="addbbcode12" value="List=" style="width: 40px" onclick="bbstyle(12)" onmouseover="helpline('o')" onmouseout="helpline('tip')" />
|
||||
<input type="button" class="button2" accesskey="t" name="addlitsitem" value="[*]" style="width: 40px" onclick="bbstyle(-1)" onmouseover="helpline('e')" onmouseout="helpline('tip')" />
|
||||
<input type="button" class="button2" accesskey="y" name="addlistitem" value="[*]" style="width: 40px" onclick="bbstyle(-1)" onmouseover="helpline('y')" onmouseout="helpline('tip')" />
|
||||
<!-- IF S_BBCODE_IMG -->
|
||||
<input type="button" class="button2" accesskey="p" name="addbbcode14" value="Img" style="width: 40px" onclick="bbstyle(14)" onmouseover="helpline('p')" onmouseout="helpline('tip')" />
|
||||
<!-- ENDIF -->
|
||||
@@ -93,8 +92,8 @@
|
||||
// ]]>
|
||||
</script>
|
||||
</dt>
|
||||
<dd style="margin-left: 90px;"><textarea name="signature" rows="10" cols="60" style="width: 95%;" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" onfocus="initInsertions();">{SIGNATURE}</textarea></dd>
|
||||
<dd style="margin-left: 90px; margin-top: 5px;">
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 90px;"><textarea name="signature" rows="10" cols="60" style="width: 95%;" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" onfocus="initInsertions();">{SIGNATURE}</textarea></dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 90px; margin-top: 5px;">
|
||||
<!-- IF S_BBCODE_ALLOWED -->
|
||||
<label><input type="checkbox" class="radio" name="disable_bbcode"{S_BBCODE_CHECKED} /> {L_DISABLE_BBCODE}</label>
|
||||
<!-- ENDIF -->
|
||||
@@ -105,7 +104,7 @@
|
||||
<label><input type="checkbox" class="radio" name="disable_magic_url"{S_MAGIC_URL_CHECKED} /> {L_DISABLE_MAGIC_URL}</label>
|
||||
<!-- ENDIF -->
|
||||
</dd>
|
||||
<dd style="margin-left: 90px; margin-top: 10px;"><strong>{L_OPTIONS}: </strong>{BBCODE_STATUS} :: {IMG_STATUS} :: {FLASH_STATUS} :: {URL_STATUS} :: {SMILIES_STATUS}</dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 90px; margin-top: 10px;"><strong>{L_OPTIONS}: </strong>{BBCODE_STATUS} :: {IMG_STATUS} :: {FLASH_STATUS} :: {URL_STATUS} :: {SMILIES_STATUS}</dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
||||
|
@@ -142,15 +142,15 @@ li {
|
||||
#page-header {
|
||||
clear: both;
|
||||
text-align: right;
|
||||
background: url("../images/phpbb_logo.gif") top left no-repeat;
|
||||
height: 49px;
|
||||
background: url("../images/phpbb_logo.png") top left no-repeat;
|
||||
height: 54px;
|
||||
font-size: 0.85em;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.rtl #page-header {
|
||||
text-align: left;
|
||||
background: url("../images/phpbb_logo.gif") top right no-repeat;
|
||||
background: url("../images/phpbb_logo.png") top right no-repeat;
|
||||
}
|
||||
|
||||
#page-header h1 {
|
||||
@@ -670,14 +670,10 @@ legend {
|
||||
position: relative;
|
||||
text-transform: none;
|
||||
line-height: 1.2em;
|
||||
top: 0;
|
||||
top: -.2em;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
/* Hide from macIE \*/
|
||||
legend { top: -1.2em; }
|
||||
/* end */
|
||||
|
||||
* html legend {
|
||||
margin: 0 0 -10px -7px;
|
||||
line-height: 1em;
|
||||
@@ -903,12 +899,15 @@ html>body dd label input { vertical-align: text-bottom;} /* Tweak for Moz to ali
|
||||
dd input {
|
||||
font-size: 1.00em;
|
||||
max-width: 100%;
|
||||
margin: 2px 0;
|
||||
}
|
||||
|
||||
dd select {
|
||||
font-size: 100%;
|
||||
font-size: 1em;
|
||||
width: auto;
|
||||
max-width: 100%;
|
||||
margin: 2px 0;
|
||||
}
|
||||
|
||||
dd textarea {
|
||||
@@ -916,11 +915,6 @@ dd textarea {
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
dd select {
|
||||
width: auto;
|
||||
font-size: 1.00em;
|
||||
}
|
||||
|
||||
fieldset dl {
|
||||
margin-bottom: 10px;
|
||||
font-size: 0.85em;
|
||||
|
@@ -4,7 +4,8 @@
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
var RecaptchaOptions = {
|
||||
lang : '{LA_RECAPTCHA_LANG}'
|
||||
lang : '{LA_RECAPTCHA_LANG}',
|
||||
theme : 'clean'
|
||||
};
|
||||
// ]]>
|
||||
</script>
|
||||
|
@@ -46,7 +46,11 @@ function initInsertions()
|
||||
{
|
||||
textarea.focus();
|
||||
baseHeight = doc.selection.createRange().duplicate().boundingHeight;
|
||||
// document.body.focus();
|
||||
|
||||
if (!document.forms[form_name])
|
||||
{
|
||||
document.body.focus();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,7 +156,7 @@ function insert_text(text, spaces, popup)
|
||||
var sel_start = textarea.selectionStart;
|
||||
var sel_end = textarea.selectionEnd;
|
||||
|
||||
mozWrap(textarea, text, '')
|
||||
mozWrap(textarea, text, '');
|
||||
textarea.selectionStart = sel_start + text.length;
|
||||
textarea.selectionEnd = sel_end + text.length;
|
||||
}
|
||||
@@ -230,6 +234,7 @@ function addquote(post_id, username)
|
||||
theSelection = theSelection.replace(/<\;/ig, '<');
|
||||
theSelection = theSelection.replace(/>\;/ig, '>');
|
||||
theSelection = theSelection.replace(/&\;/ig, '&');
|
||||
theSelection = theSelection.replace(/ \;/ig, ' ');
|
||||
}
|
||||
else if (document.all)
|
||||
{
|
||||
@@ -269,12 +274,12 @@ function mozWrap(txtarea, open, close)
|
||||
}
|
||||
|
||||
var s1 = (txtarea.value).substring(0,selStart);
|
||||
var s2 = (txtarea.value).substring(selStart, selEnd)
|
||||
var s2 = (txtarea.value).substring(selStart, selEnd);
|
||||
var s3 = (txtarea.value).substring(selEnd, selLength);
|
||||
|
||||
txtarea.value = s1 + open + s2 + close + s3;
|
||||
txtarea.selectionStart = selEnd + open.length + close.length;
|
||||
txtarea.selectionEnd = txtarea.selectionStart;
|
||||
txtarea.selectionStart = selStart + open.length;
|
||||
txtarea.selectionEnd = selEnd + open.length;
|
||||
txtarea.focus();
|
||||
txtarea.scrollTop = scrollTop;
|
||||
|
||||
@@ -327,8 +332,8 @@ function colorPalette(dir, width, height)
|
||||
for (b = 0; b < 5; b++)
|
||||
{
|
||||
color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]);
|
||||
document.write('<td bgcolor="#' + color + '">');
|
||||
document.write('<a href="#" onclick="bbfontstyle(\'[color=#' + color + ']\', \'[/color]\'); return false;" onmouseover="helpline(\'s\');" onmouseout="helpline(\'tip\');"><img src="images/spacer.gif" width="' + width + '" height="' + height + '" alt="#' + color + '" title="#' + color + '" /></a>');
|
||||
document.write('<td bgcolor="#' + color + '" style="width: ' + width + 'px; height: ' + height + 'px;">');
|
||||
document.write('<a href="#" onclick="bbfontstyle(\'[color=#' + color + ']\', \'[/color]\'); return false;"><img src="images/spacer.gif" width="' + width + '" height="' + height + '" alt="#' + color + '" title="#' + color + '" /></a>');
|
||||
document.writeln('</td>');
|
||||
}
|
||||
|
||||
|
@@ -6,20 +6,9 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
We request you retain the full copyright notice below including the link to www.phpbb.com.
|
||||
This not only gives respect to the large amount of time given freely by the developers
|
||||
but also helps build interest, traffic and use of phpBB. If you (honestly) cannot retain
|
||||
the full copyright we ask you at least leave in place the "Powered by phpBB" line, with
|
||||
"phpBB" linked to www.phpbb.com. If you refuse to include even this then support on our
|
||||
forums may be affected.
|
||||
|
||||
The phpBB Group : 2006
|
||||
// -->
|
||||
|
||||
|
||||
<div id="page-footer">
|
||||
Powered by phpBB © 2000, 2002, 2005, 2007 <a href="http://www.phpbb.com/">phpBB Group</a>
|
||||
Powered by <a href="http://www.phpbb.com/">phpBB</a>® Forum Software © phpBB Group
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@@ -43,6 +43,11 @@
|
||||
<p>{WARNING_MSG}</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<div class="errorbox" style="margin-top: 0;">
|
||||
<h3>{L_NOTICE}</h3>
|
||||
<p>{L_BACKUP_NOTICE}</p>
|
||||
</div>
|
||||
|
||||
<form id="install_update" method="post" action="{U_ACTION}">
|
||||
|
||||
@@ -200,7 +205,7 @@
|
||||
<legend><img src="{T_IMAGE_PATH}file_up_to_date.gif" alt="{L_STATUS_UP_TO_DATE}" /></legend>
|
||||
<!-- BEGIN up_to_date -->
|
||||
<dl>
|
||||
<dd class="full" style="text-align: left;"><strong>{up_to_date.FILENAME}</strong></dd>
|
||||
<dd class="full" style="text-align: {S_CONTENT_FLOW_BEGIN};"><strong>{up_to_date.FILENAME}</strong></dd>
|
||||
</dl>
|
||||
<!-- END up_to_date -->
|
||||
</fieldset>
|
||||
@@ -218,11 +223,11 @@
|
||||
<dt style="width: 60%;"><strong><!-- IF new.DIR_PART -->{new.DIR_PART}<br /><!-- ENDIF -->{new.FILE_PART}</strong>
|
||||
<!-- IF new.S_CUSTOM --><br /><span><em>{L_FILE_USED}: </em>{new.CUSTOM_ORIGINAL}</span><!-- ENDIF -->
|
||||
</dt>
|
||||
<dd style="margin-left: 60%;">
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 60%;">
|
||||
<!-- IF not new.S_BINARY -->[<a href="{new.U_SHOW_DIFF}" onclick="diff_popup(this.href); return false;">{new.L_SHOW_DIFF}</a>]<!-- ELSE -->{L_BINARY_FILE}<!-- ENDIF -->
|
||||
</dd>
|
||||
<!-- IF new.S_CUSTOM -->
|
||||
<dd style="margin-left: 60%;"><label><input type="checkbox" name="no_update[]" value="{new.FILENAME}" class="radio" /> {L_DO_NOT_UPDATE}</label></dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 60%;"><label><input type="checkbox" name="no_update[]" value="{new.FILENAME}" class="radio" /> {L_DO_NOT_UPDATE}</label></dd>
|
||||
<!-- ENDIF -->
|
||||
</dl>
|
||||
<!-- END new -->
|
||||
@@ -242,9 +247,9 @@
|
||||
<dt style="width: 60%;"><strong><!-- IF not_modified.DIR_PART -->{not_modified.DIR_PART}<br /><!-- ENDIF -->{not_modified.FILE_PART}</strong>
|
||||
<!-- IF not_modified.S_CUSTOM --><br /><span><em>{L_FILE_USED}: </em>{not_modified.CUSTOM_ORIGINAL}</span><!-- ENDIF -->
|
||||
</dt>
|
||||
<dd style="margin-left: 60%;"><!-- IF not not_modified.S_BINARY -->[<a href="{not_modified.U_SHOW_DIFF}" onclick="diff_popup(this.href); return false;">{not_modified.L_SHOW_DIFF}</a>]<!-- ELSE -->{L_BINARY_FILE}<!-- ENDIF --></dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 60%;"><!-- IF not not_modified.S_BINARY -->[<a href="{not_modified.U_SHOW_DIFF}" onclick="diff_popup(this.href); return false;">{not_modified.L_SHOW_DIFF}</a>]<!-- ELSE -->{L_BINARY_FILE}<!-- ENDIF --></dd>
|
||||
<!-- IF not_modified.S_CUSTOM -->
|
||||
<dd style="margin-left: 60%;"><label><input type="checkbox" name="no_update[]" value="{not_modified.FILENAME}" class="radio" /> {L_DO_NOT_UPDATE}</label></dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 60%;"><label><input type="checkbox" name="no_update[]" value="{not_modified.FILENAME}" class="radio" /> {L_DO_NOT_UPDATE}</label></dd>
|
||||
<!-- ENDIF -->
|
||||
</dl>
|
||||
<!-- END not_modified -->
|
||||
@@ -263,22 +268,22 @@
|
||||
<dt style="width: 60%;"><strong><!-- IF modified.DIR_PART -->{modified.DIR_PART}<br /><!-- ENDIF -->{modified.FILE_PART}</strong>
|
||||
<!-- IF modified.S_CUSTOM --><br /><span><em>{L_FILE_USED}: </em>{modified.CUSTOM_ORIGINAL}</span><!-- ENDIF -->
|
||||
</dt>
|
||||
<dd style="margin-left: 60%;"> </dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 60%;"> </dd>
|
||||
<!-- IF modified.S_CUSTOM -->
|
||||
<dd style="margin-left: 60%;"><label><input type="checkbox" name="no_update[]" value="{modified.FILENAME}" class="radio" /> {L_DO_NOT_UPDATE}</label></dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 60%;"><label><input type="checkbox" name="no_update[]" value="{modified.FILENAME}" class="radio" /> {L_DO_NOT_UPDATE}</label></dd>
|
||||
<!-- ENDIF -->
|
||||
</dl>
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="modified[{modified.FILENAME}]" value="0" checked="checked" /> {L_MERGE_MODIFICATIONS_OPTION}</label></dt>
|
||||
<dd style="margin-left: 60%;"><!-- IF not modified.S_BINARY -->[<a href="{modified.U_SHOW_DIFF}" onclick="diff_popup(this.href); return false;">{modified.L_SHOW_DIFF}</a>]<!-- ELSE -->{L_BINARY_FILE}<!-- ENDIF --></dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 60%;"><!-- IF not modified.S_BINARY -->[<a href="{modified.U_SHOW_DIFF}" onclick="diff_popup(this.href); return false;">{modified.L_SHOW_DIFF}</a>]<!-- ELSE -->{L_BINARY_FILE}<!-- ENDIF --></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="modified[{modified.FILENAME}]" value="1" /> {L_MERGE_NO_MERGE_NEW_OPTION}</label></dt>
|
||||
<dd style="margin-left: 60%;"><!-- IF not modified.S_BINARY -->[<a href="{modified.U_VIEW_NO_MERGE_NEW}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_FINAL}</a>]<!-- ELSE --> <!-- ENDIF --></dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 60%;"><!-- IF not modified.S_BINARY -->[<a href="{modified.U_VIEW_NO_MERGE_NEW}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_FINAL}</a>]<!-- ELSE --> <!-- ENDIF --></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="modified[{modified.FILENAME}]" value="2" /> {L_MERGE_NO_MERGE_MOD_OPTION}</label></dt>
|
||||
<dd style="margin-left: 60%;"><!-- IF not modified.S_BINARY -->[<a href="{modified.U_VIEW_NO_MERGE_MOD}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_FINAL}</a>]<!-- ELSE --> <!-- ENDIF --></dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 60%;"><!-- IF not modified.S_BINARY -->[<a href="{modified.U_VIEW_NO_MERGE_MOD}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_FINAL}</a>]<!-- ELSE --> <!-- ENDIF --></dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
<!-- END modified -->
|
||||
@@ -296,11 +301,11 @@
|
||||
<dt style="width: 60%;"><strong><!-- IF new_conflict.DIR_PART -->{new_conflict.DIR_PART}<br /><!-- ENDIF -->{new_conflict.FILE_PART}</strong>
|
||||
<!-- IF new_conflict.S_CUSTOM --><br /><span><em>{L_FILE_USED}: </em>{new_conflict.CUSTOM_ORIGINAL}</span><!-- ENDIF -->
|
||||
</dt>
|
||||
<dd style="margin-left: 60%;">
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 60%;">
|
||||
<!-- IF not new_conflict.S_BINARY -->[<a href="{new_conflict.U_SHOW_DIFF}" onclick="diff_popup(this.href); return false;">{new_conflict.L_SHOW_DIFF}</a>]<!-- ELSE -->{L_BINARY_FILE}<!-- ENDIF -->
|
||||
</dd>
|
||||
<!-- IF new_conflict.S_CUSTOM -->
|
||||
<dd style="margin-left: 60%;"><label><input type="checkbox" name="no_update[]" value="{new_conflict.FILENAME}" class="radio" /> {L_DO_NOT_UPDATE}</label></dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 60%;"><label><input type="checkbox" name="no_update[]" value="{new_conflict.FILENAME}" class="radio" /> {L_DO_NOT_UPDATE}</label></dd>
|
||||
<!-- ENDIF -->
|
||||
</dl>
|
||||
<!-- END new_conflict -->
|
||||
@@ -320,35 +325,35 @@
|
||||
<!-- IF conflict.S_CUSTOM --><br /><span><em>{L_FILE_USED}: </em>{conflict.CUSTOM_ORIGINAL}</span><!-- ENDIF -->
|
||||
<!-- IF conflict.NUM_CONFLICTS --><br /><span>{L_NUM_CONFLICTS}: {conflict.NUM_CONFLICTS}</span><!-- ENDIF -->
|
||||
</dt>
|
||||
<dd style="margin-left: 60%;">
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 60%;">
|
||||
<!-- IF not conflict.S_BINARY -->[<a href="{conflict.U_SHOW_DIFF}">{L_DOWNLOAD_CONFLICTS}</a>]<br />{L_DOWNLOAD_CONFLICTS_EXPLAIN}
|
||||
<!-- ELSE -->{L_BINARY_FILE}<!-- ENDIF -->
|
||||
</dd>
|
||||
<!-- IF conflict.S_CUSTOM -->
|
||||
<dd style="margin-left: 60%;"><label><input type="checkbox" name="no_update[]" value="{conflict.FILENAME}" class="radio" /> {L_DO_NOT_UPDATE}</label></dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 60%;"><label><input type="checkbox" name="no_update[]" value="{conflict.FILENAME}" class="radio" /> {L_DO_NOT_UPDATE}</label></dd>
|
||||
<!-- ENDIF -->
|
||||
</dl>
|
||||
<!-- IF conflict.S_BINARY -->
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="conflict[{conflict.FILENAME}]" value="1" checked="checked" /> {L_MERGE_NO_MERGE_NEW_OPTION}</label></dt>
|
||||
<dd style="margin-left: 60%;"> </dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 60%;"> </dd>
|
||||
</dl>
|
||||
<!-- ELSE -->
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="conflict[{conflict.FILENAME}]" value="3" checked="checked" /> {L_MERGE_NEW_FILE_OPTION}</label></dt>
|
||||
<dd style="margin-left: 60%;">[<a href="{conflict.U_VIEW_NEW_FILE}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_MODIFIED}</a>]</dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 60%;">[<a href="{conflict.U_VIEW_NEW_FILE}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_MODIFIED}</a>]</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="conflict[{conflict.FILENAME}]" value="4" /> {L_MERGE_MOD_FILE_OPTION}</label></dt>
|
||||
<dd style="margin-left: 60%;">[<a href="{conflict.U_VIEW_MOD_FILE}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_MODIFIED}</a>]</dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 60%;">[<a href="{conflict.U_VIEW_MOD_FILE}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_MODIFIED}</a>]</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="conflict[{conflict.FILENAME}]" value="1" /> {L_MERGE_NO_MERGE_NEW_OPTION}</label></dt>
|
||||
<dd style="margin-left: 60%;">[<a href="{conflict.U_VIEW_NO_MERGE_NEW}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_FINAL}</a>]</dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 60%;">[<a href="{conflict.U_VIEW_NO_MERGE_NEW}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_FINAL}</a>]</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt style="width: 60%"><label><input type="radio" class="radio" name="conflict[{conflict.FILENAME}]" value="2" /> {L_MERGE_NO_MERGE_MOD_OPTION}</label></dt>
|
||||
<dd style="margin-left: 60%;">[<a href="{conflict.U_VIEW_NO_MERGE_MOD}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_FINAL}</a>]</dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 60%;">[<a href="{conflict.U_VIEW_NO_MERGE_MOD}" onclick="diff_popup(this.href); return false;">{L_SHOW_DIFF_FINAL}</a>]</dd>
|
||||
</dl>
|
||||
<!-- ENDIF -->
|
||||
</fieldset>
|
||||
|
@@ -15,12 +15,12 @@
|
||||
// <![CDATA[
|
||||
function resize_panel()
|
||||
{
|
||||
var block = document.getElementById('codepanel');
|
||||
var block = document.getElementById('diff_content');
|
||||
var height;
|
||||
|
||||
if (window.innerHeight)
|
||||
{
|
||||
height = window.innerHeight - 150;
|
||||
height = window.innerHeight - 200;
|
||||
block.style.height = height + 'px';
|
||||
}
|
||||
else
|
||||
@@ -119,6 +119,7 @@ table.hrdiff {
|
||||
overflow: hidden;
|
||||
border-bottom: 1px solid #999;
|
||||
table-layout: fixed;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
table.hrdiff th {
|
||||
@@ -128,7 +129,8 @@ table.hrdiff th {
|
||||
font-family: Verdana,Helvetica,sans-serif;
|
||||
font-size: 11px;
|
||||
border-bottom: 1px solid #999;
|
||||
background: transparent;
|
||||
border-right: 1px solid #999;
|
||||
background: #D9D9D9;
|
||||
}
|
||||
|
||||
table.hrdiff thead th {
|
||||
@@ -142,29 +144,23 @@ table.hrdiff tr:first-child th {
|
||||
}
|
||||
|
||||
table.hrdiff tbody th {
|
||||
padding: 2em 1px 1px 1px;
|
||||
font-size: 80%;
|
||||
border-top: 1px solid #999;
|
||||
}
|
||||
|
||||
table.hrdiff tbody td.old {
|
||||
border-left: 1px solid #999;
|
||||
border-right: 1px solid #999;
|
||||
}
|
||||
table.hrdiff tbody td.new {
|
||||
table.hrdiff tbody td {
|
||||
border-right: 1px solid #999;
|
||||
}
|
||||
|
||||
table.hrdiff td pre {
|
||||
overflow: auto;
|
||||
display: block;
|
||||
width: 100%;
|
||||
overflow: auto;
|
||||
display: block;
|
||||
font-family: "Consolas", monospace;
|
||||
font-size: 1.1em;
|
||||
white-space: pre-wrap; /* css-3 */
|
||||
word-wrap: break-word; /* Internet Explorer 5.5+ */
|
||||
}
|
||||
|
||||
table.hrdiff .unmodified {
|
||||
background: #fff;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
table.hrdiff .added {
|
||||
|
@@ -6,21 +6,10 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
We request you retain the full copyright notice below including the link to www.phpbb.com.
|
||||
This not only gives respect to the large amount of time given freely by the developers
|
||||
but also helps build interest, traffic and use of phpBB. If you (honestly) cannot retain
|
||||
the full copyright we ask you at least leave in place the "Powered by phpBB" line, with
|
||||
"phpBB" linked to www.phpbb.com. If you refuse to include even this then support on our
|
||||
forums may be affected.
|
||||
|
||||
The phpBB Group : 2006
|
||||
// -->
|
||||
|
||||
|
||||
<div id="page-footer">
|
||||
<!-- IF S_COPYRIGHT_HTML -->
|
||||
Powered by phpBB © 2000, 2002, 2005, 2007 <a href="http://www.phpbb.com/">phpBB Group</a>
|
||||
{CREDIT_LINE}
|
||||
<!-- IF TRANSLATION_INFO --><br />{TRANSLATION_INFO}<!-- ENDIF -->
|
||||
<!-- ENDIF -->
|
||||
|
||||
|
@@ -40,7 +40,7 @@
|
||||
<dl class="permissions-simple">
|
||||
<dt style="width: 20%"><label for="role{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}">{L_ROLE}:</label></dt>
|
||||
<!-- IF p_mask.f_mask.S_ROLE_OPTIONS -->
|
||||
<dd style="margin-left: 20%"><select id="role{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}" name="role[{p_mask.f_mask.UG_ID}][{p_mask.f_mask.FORUM_ID}]" onchange="set_role_settings(this.options[selectedIndex].value, 'advanced{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}'); init_colours('{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}')">{p_mask.f_mask.S_ROLE_OPTIONS}</select></dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 20%"><select id="role{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}" name="role[{p_mask.f_mask.UG_ID}][{p_mask.f_mask.FORUM_ID}]" onchange="set_role_settings(this.options[selectedIndex].value, 'advanced{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}'); init_colours('{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}')">{p_mask.f_mask.S_ROLE_OPTIONS}</select></dd>
|
||||
<!-- ELSE -->
|
||||
<dd>{L_NO_ROLE_AVAILABLE}</dd>
|
||||
<!-- ENDIF -->
|
||||
@@ -118,7 +118,7 @@
|
||||
</div>
|
||||
|
||||
<!-- IF not p_mask.S_VIEW -->
|
||||
<fieldset class="quick" style="margin-right: 11px;">
|
||||
<fieldset class="quick" style="margin-{S_CONTENT_FLOW_END}: 11px;">
|
||||
<p class="small">{L_APPLY_PERMISSIONS_EXPLAIN}</p>
|
||||
<input class="button1" type="submit" name="psubmit[{p_mask.f_mask.UG_ID}][{p_mask.f_mask.FORUM_ID}]" value="{L_APPLY_PERMISSIONS}" />
|
||||
<!-- IF .p_mask.f_mask gt 1 or .p_mask gt 1 -->
|
||||
|
@@ -2,21 +2,10 @@
|
||||
<br /><br />
|
||||
</div>
|
||||
|
||||
<!--
|
||||
We request you retain the full copyright notice below including the link to www.phpbb.com.
|
||||
This not only gives respect to the large amount of time given freely by the developers
|
||||
but also helps build interest, traffic and use of phpBB. If you (honestly) cannot retain
|
||||
the full copyright we ask you at least leave in place the "Powered by phpBB" line, with
|
||||
"phpBB" linked to www.phpbb.com. If you refuse to include even this then support on our
|
||||
forums may be affected.
|
||||
|
||||
The phpBB Group : 2006
|
||||
// -->
|
||||
|
||||
<div id="page-footer">
|
||||
|
||||
<!-- IF S_COPYRIGHT_HTML -->
|
||||
<br />Powered by phpBB © 2000, 2002, 2005, 2007 <a href="http://www.phpbb.com/">phpBB Group</a>
|
||||
<br />{CREDIT_LINE}
|
||||
<!-- IF TRANSLATION_INFO --><br />{TRANSLATION_INFO}<!-- ENDIF -->
|
||||
<!-- ENDIF -->
|
||||
|
||||
|
113
phpBB/common.php
113
phpBB/common.php
@@ -16,119 +16,12 @@ if (!defined('IN_PHPBB'))
|
||||
exit;
|
||||
}
|
||||
|
||||
$starttime = explode(' ', microtime());
|
||||
$starttime = $starttime[1] + $starttime[0];
|
||||
require($phpbb_root_path . 'includes/startup.' . $phpEx);
|
||||
|
||||
// Report all errors, except notices and deprecation messages
|
||||
if (!defined('E_DEPRECATED'))
|
||||
if (file_exists($phpbb_root_path . 'config.' . $phpEx))
|
||||
{
|
||||
define('E_DEPRECATED', 8192);
|
||||
require($phpbb_root_path . 'config.' . $phpEx);
|
||||
}
|
||||
error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED);
|
||||
|
||||
/*
|
||||
* Remove variables created by register_globals from the global scope
|
||||
* Thanks to Matt Kavanagh
|
||||
*/
|
||||
function deregister_globals()
|
||||
{
|
||||
$not_unset = array(
|
||||
'GLOBALS' => true,
|
||||
'_GET' => true,
|
||||
'_POST' => true,
|
||||
'_COOKIE' => true,
|
||||
'_REQUEST' => true,
|
||||
'_SERVER' => true,
|
||||
'_SESSION' => true,
|
||||
'_ENV' => true,
|
||||
'_FILES' => true,
|
||||
'phpEx' => true,
|
||||
'phpbb_root_path' => true
|
||||
);
|
||||
|
||||
// Not only will array_merge and array_keys give a warning if
|
||||
// a parameter is not an array, array_merge will actually fail.
|
||||
// So we check if _SESSION has been initialised.
|
||||
if (!isset($_SESSION) || !is_array($_SESSION))
|
||||
{
|
||||
$_SESSION = array();
|
||||
}
|
||||
|
||||
// Merge all into one extremely huge array; unset this later
|
||||
$input = array_merge(
|
||||
array_keys($_GET),
|
||||
array_keys($_POST),
|
||||
array_keys($_COOKIE),
|
||||
array_keys($_SERVER),
|
||||
array_keys($_SESSION),
|
||||
array_keys($_ENV),
|
||||
array_keys($_FILES)
|
||||
);
|
||||
|
||||
foreach ($input as $varname)
|
||||
{
|
||||
if (isset($not_unset[$varname]))
|
||||
{
|
||||
// Hacking attempt. No point in continuing unless it's a COOKIE
|
||||
if ($varname !== 'GLOBALS' || isset($_GET['GLOBALS']) || isset($_POST['GLOBALS']) || isset($_SERVER['GLOBALS']) || isset($_SESSION['GLOBALS']) || isset($_ENV['GLOBALS']) || isset($_FILES['GLOBALS']))
|
||||
{
|
||||
exit;
|
||||
}
|
||||
else
|
||||
{
|
||||
$cookie = &$_COOKIE;
|
||||
while (isset($cookie['GLOBALS']))
|
||||
{
|
||||
foreach ($cookie['GLOBALS'] as $registered_var => $value)
|
||||
{
|
||||
if (!isset($not_unset[$registered_var]))
|
||||
{
|
||||
unset($GLOBALS[$registered_var]);
|
||||
}
|
||||
}
|
||||
$cookie = &$cookie['GLOBALS'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unset($GLOBALS[$varname]);
|
||||
}
|
||||
|
||||
unset($input);
|
||||
}
|
||||
|
||||
// If we are on PHP >= 6.0.0 we do not need some code
|
||||
if (version_compare(PHP_VERSION, '6.0.0-dev', '>='))
|
||||
{
|
||||
/**
|
||||
* @ignore
|
||||
*/
|
||||
define('STRIP', false);
|
||||
}
|
||||
else
|
||||
{
|
||||
@set_magic_quotes_runtime(0);
|
||||
|
||||
// Be paranoid with passed vars
|
||||
if (@ini_get('register_globals') == '1' || strtolower(@ini_get('register_globals')) == 'on' || !function_exists('ini_get'))
|
||||
{
|
||||
deregister_globals();
|
||||
}
|
||||
|
||||
define('STRIP', (get_magic_quotes_gpc()) ? true : false);
|
||||
}
|
||||
|
||||
if (defined('IN_CRON'))
|
||||
{
|
||||
$phpbb_root_path = dirname(__FILE__) . DIRECTORY_SEPARATOR;
|
||||
}
|
||||
|
||||
if (!file_exists($phpbb_root_path . 'config.' . $phpEx))
|
||||
{
|
||||
die("<p>The config.$phpEx file could not be found.</p><p><a href=\"{$phpbb_root_path}install/index.$phpEx\">Click here to install phpBB</a></p>");
|
||||
}
|
||||
|
||||
require($phpbb_root_path . 'config.' . $phpEx);
|
||||
|
||||
if (!defined('PHPBB_INSTALLED'))
|
||||
{
|
||||
|
@@ -21,7 +21,6 @@ $user->session_begin(false);
|
||||
$auth->acl($user->data);
|
||||
|
||||
$cron_type = request_var('cron_type', '');
|
||||
$use_shutdown_function = (@function_exists('register_shutdown_function')) ? true : false;
|
||||
|
||||
// Output transparent gif
|
||||
header('Cache-Control: no-cache');
|
||||
@@ -30,10 +29,9 @@ header('Content-length: 43');
|
||||
|
||||
echo base64_decode('R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==');
|
||||
|
||||
// test without flush ;)
|
||||
// flush();
|
||||
// Flush here to prevent browser from showing the page as loading while running cron.
|
||||
flush();
|
||||
|
||||
//
|
||||
if (!isset($config['cron_lock']))
|
||||
{
|
||||
set_config('cron_lock', '0', true);
|
||||
@@ -79,23 +77,10 @@ switch ($cron_type)
|
||||
break;
|
||||
}
|
||||
|
||||
// A user reported using the mail() function while using shutdown does not work. We do not want to risk that.
|
||||
if ($use_shutdown_function && !$config['smtp_delivery'])
|
||||
{
|
||||
$use_shutdown_function = false;
|
||||
}
|
||||
|
||||
include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
|
||||
$queue = new queue();
|
||||
|
||||
if ($use_shutdown_function)
|
||||
{
|
||||
register_shutdown_function(array(&$queue, 'process'));
|
||||
}
|
||||
else
|
||||
{
|
||||
$queue->process();
|
||||
}
|
||||
$queue->process();
|
||||
|
||||
break;
|
||||
|
||||
@@ -106,14 +91,7 @@ switch ($cron_type)
|
||||
break;
|
||||
}
|
||||
|
||||
if ($use_shutdown_function)
|
||||
{
|
||||
register_shutdown_function(array(&$cache, 'tidy'));
|
||||
}
|
||||
else
|
||||
{
|
||||
$cache->tidy();
|
||||
}
|
||||
$cache->tidy();
|
||||
|
||||
break;
|
||||
|
||||
@@ -138,14 +116,7 @@ switch ($cron_type)
|
||||
break;
|
||||
}
|
||||
|
||||
if ($use_shutdown_function)
|
||||
{
|
||||
register_shutdown_function(array(&$search, 'tidy'));
|
||||
}
|
||||
else
|
||||
{
|
||||
$search->tidy();
|
||||
}
|
||||
$search->tidy();
|
||||
|
||||
break;
|
||||
|
||||
@@ -158,14 +129,7 @@ switch ($cron_type)
|
||||
|
||||
include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
|
||||
|
||||
if ($use_shutdown_function)
|
||||
{
|
||||
register_shutdown_function('tidy_warnings');
|
||||
}
|
||||
else
|
||||
{
|
||||
tidy_warnings();
|
||||
}
|
||||
tidy_warnings();
|
||||
|
||||
break;
|
||||
|
||||
@@ -178,14 +142,7 @@ switch ($cron_type)
|
||||
|
||||
include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
|
||||
|
||||
if ($use_shutdown_function)
|
||||
{
|
||||
register_shutdown_function('tidy_database');
|
||||
}
|
||||
else
|
||||
{
|
||||
tidy_database();
|
||||
}
|
||||
tidy_database();
|
||||
|
||||
break;
|
||||
|
||||
@@ -196,14 +153,7 @@ switch ($cron_type)
|
||||
break;
|
||||
}
|
||||
|
||||
if ($use_shutdown_function)
|
||||
{
|
||||
register_shutdown_function(array(&$user, 'session_gc'));
|
||||
}
|
||||
else
|
||||
{
|
||||
$user->session_gc();
|
||||
}
|
||||
$user->session_gc();
|
||||
|
||||
break;
|
||||
|
||||
@@ -230,26 +180,12 @@ switch ($cron_type)
|
||||
|
||||
if ($row['prune_days'])
|
||||
{
|
||||
if ($use_shutdown_function)
|
||||
{
|
||||
register_shutdown_function('auto_prune', $row['forum_id'], 'posted', $row['forum_flags'], $row['prune_days'], $row['prune_freq']);
|
||||
}
|
||||
else
|
||||
{
|
||||
auto_prune($row['forum_id'], 'posted', $row['forum_flags'], $row['prune_days'], $row['prune_freq']);
|
||||
}
|
||||
auto_prune($row['forum_id'], 'posted', $row['forum_flags'], $row['prune_days'], $row['prune_freq']);
|
||||
}
|
||||
|
||||
if ($row['prune_viewed'])
|
||||
{
|
||||
if ($use_shutdown_function)
|
||||
{
|
||||
register_shutdown_function('auto_prune', $row['forum_id'], 'viewed', $row['forum_flags'], $row['prune_viewed'], $row['prune_freq']);
|
||||
}
|
||||
else
|
||||
{
|
||||
auto_prune($row['forum_id'], 'viewed', $row['forum_flags'], $row['prune_viewed'], $row['prune_freq']);
|
||||
}
|
||||
auto_prune($row['forum_id'], 'viewed', $row['forum_flags'], $row['prune_viewed'], $row['prune_freq']);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -257,16 +193,8 @@ switch ($cron_type)
|
||||
}
|
||||
|
||||
// Unloading cache and closing db after having done the dirty work.
|
||||
if ($use_shutdown_function)
|
||||
{
|
||||
register_shutdown_function('unlock_cron');
|
||||
register_shutdown_function('garbage_collection');
|
||||
}
|
||||
else
|
||||
{
|
||||
unlock_cron();
|
||||
garbage_collection();
|
||||
}
|
||||
unlock_cron();
|
||||
garbage_collection();
|
||||
|
||||
exit;
|
||||
|
||||
|
@@ -1,15 +1,11 @@
|
||||
<?php
|
||||
// -------------------------------------------------------------
|
||||
//
|
||||
// $Id$
|
||||
//
|
||||
// FILENAME : add_permissions.php
|
||||
// STARTED : Sat Nov 06, 2004
|
||||
// COPYRIGHT : <20> 2004 phpBB Group
|
||||
// WWW : http://www.phpbb.com/
|
||||
// LICENCE : GPL vs2.0 [ see /docs/COPYING ]
|
||||
//
|
||||
// -------------------------------------------------------------
|
||||
/**
|
||||
*
|
||||
* @package phpBB3
|
||||
* @copyright (c) 2004 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
//
|
||||
// Security message:
|
||||
|
@@ -1,15 +1,11 @@
|
||||
<?php
|
||||
// -------------------------------------------------------------
|
||||
//
|
||||
// $Id$
|
||||
//
|
||||
// FILENAME : calc_email_hash.php
|
||||
// STARTED : Tue Feb 03, 2004
|
||||
// COPYRIGHT : <20> 2004 phpBB Group
|
||||
// WWW : http://www.phpbb.com/
|
||||
// LICENCE : GPL vs2.0 [ see /docs/COPYING ]
|
||||
//
|
||||
// -------------------------------------------------------------
|
||||
/**
|
||||
*
|
||||
* @package phpBB3
|
||||
* @copyright (c) 2004 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
//
|
||||
// Security message:
|
||||
|
@@ -1,23 +1,11 @@
|
||||
<?php
|
||||
/***************************************************************************
|
||||
* merge_clean_posts.php
|
||||
* -------------------
|
||||
* begin : Tuesday, February 25, 2003
|
||||
* copyright : (C) 2003 The phpBB Group
|
||||
* email : support@phpbb.com
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
***************************************************************************/
|
||||
/**
|
||||
*
|
||||
* @package phpBB3
|
||||
* @copyright (c) 2003 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
//
|
||||
// Security message:
|
||||
|
160
phpBB/develop/check_flash_bbcodes.php
Normal file
160
phpBB/develop/check_flash_bbcodes.php
Normal file
@@ -0,0 +1,160 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package phpBB3
|
||||
* @copyright (c) 2009, 2010 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
* This script will check your database for potentially dangerous flash BBCode tags
|
||||
*
|
||||
*/
|
||||
|
||||
//
|
||||
// Security message:
|
||||
//
|
||||
// This script is potentially dangerous.
|
||||
// Remove or comment the next line (die(".... ) to enable this script.
|
||||
// Do NOT FORGET to either remove this script or disable it after you have used it.
|
||||
//
|
||||
die("Please read the first lines of this script for instructions on how to enable it\n");
|
||||
|
||||
/**
|
||||
*/
|
||||
define('IN_PHPBB', true);
|
||||
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
|
||||
$phpEx = substr(strrchr(__FILE__, '.'), 1);
|
||||
include($phpbb_root_path . 'common.' . $phpEx);
|
||||
|
||||
if (php_sapi_name() != 'cli')
|
||||
{
|
||||
header('Content-Type: text/plain');
|
||||
}
|
||||
|
||||
check_table_flash_bbcodes(POSTS_TABLE, 'post_id', 'post_text', 'bbcode_uid', 'bbcode_bitfield');
|
||||
check_table_flash_bbcodes(PRIVMSGS_TABLE, 'msg_id', 'message_text', 'bbcode_uid', 'bbcode_bitfield');
|
||||
check_table_flash_bbcodes(USERS_TABLE, 'user_id', 'user_sig', 'user_sig_bbcode_uid', 'user_sig_bbcode_bitfield');
|
||||
check_table_flash_bbcodes(FORUMS_TABLE, 'forum_id', 'forum_desc', 'forum_desc_uid', 'forum_desc_bitfield');
|
||||
check_table_flash_bbcodes(FORUMS_TABLE, 'forum_id', 'forum_rules', 'forum_rules_uid', 'forum_rules_bitfield');
|
||||
check_table_flash_bbcodes(GROUPS_TABLE, 'group_id', 'group_desc', 'group_desc_uid', 'group_desc_bitfield');
|
||||
|
||||
echo "If potentially dangerous flash bbcodes were found, please reparse the posts using the Support Toolkit (http://www.phpbb.com/support/stk/) and/or file a ticket in the Incident Tracker (http://www.phpbb.com/incidents/).\n";
|
||||
|
||||
function check_table_flash_bbcodes($table_name, $id_field, $content_field, $uid_field, $bitfield_field)
|
||||
{
|
||||
echo "Checking $content_field on $table_name\n";
|
||||
|
||||
$ids = get_table_flash_bbcode_pkids($table_name, $id_field, $content_field, $uid_field, $bitfield_field);
|
||||
|
||||
$size = sizeof($ids);
|
||||
if ($size)
|
||||
{
|
||||
echo "Found $size potentially dangerous flash bbcodes.\n";
|
||||
echo "$id_field: " . implode(', ', $ids) . "\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "No potentially dangerous flash bbcodes found.\n";
|
||||
}
|
||||
|
||||
echo "\n";
|
||||
}
|
||||
|
||||
function get_table_flash_bbcode_pkids($table_name, $id_field, $content_field, $uid_field, $bitfield_field)
|
||||
{
|
||||
global $db;
|
||||
|
||||
$ids = array();
|
||||
|
||||
$sql = "SELECT $id_field, $content_field, $uid_field, $bitfield_field
|
||||
FROM $table_name
|
||||
WHERE $content_field LIKE '%[/flash:%'
|
||||
AND $bitfield_field <> ''";
|
||||
|
||||
$result = $db->sql_query($sql);
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$uid = $row[$uid_field];
|
||||
|
||||
// thanks support toolkit
|
||||
$content = html_entity_decode_utf8($row[$content_field]);
|
||||
set_var($content, $content, 'string', true);
|
||||
$content = utf8_normalize_nfc($content);
|
||||
|
||||
$bitfield_data = $row[$bitfield_field];
|
||||
|
||||
if (!is_valid_flash_bbcode($content, $uid) && has_flash_enabled($bitfield_data))
|
||||
{
|
||||
$ids[] = (int) $row[$id_field];
|
||||
}
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
return $ids;
|
||||
}
|
||||
|
||||
function get_flash_regex($uid)
|
||||
{
|
||||
return "#\[flash=([0-9]+),([0-9]+):$uid\](.*?)\[/flash:$uid\]#";
|
||||
}
|
||||
|
||||
// extract all valid flash bbcodes
|
||||
// check if the bbcode content is a valid URL for each match
|
||||
function is_valid_flash_bbcode($cleaned_content, $uid)
|
||||
{
|
||||
$regex = get_flash_regex($uid);
|
||||
|
||||
$url_regex = get_preg_expression('url');
|
||||
$www_url_regex = get_preg_expression('www_url');
|
||||
|
||||
if (preg_match_all($regex, $cleaned_content, $matches))
|
||||
{
|
||||
foreach ($matches[3] as $flash_url)
|
||||
{
|
||||
if (!preg_match("#^($url_regex|$www_url_regex)$#i", $flash_url))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// check if a bitfield includes flash
|
||||
// 11 = flash bit
|
||||
function has_flash_enabled($bitfield_data)
|
||||
{
|
||||
$bitfield = new bitfield($bitfield_data);
|
||||
return $bitfield->get(11);
|
||||
}
|
||||
|
||||
// taken from support toolkit
|
||||
function html_entity_decode_utf8($string)
|
||||
{
|
||||
static $trans_tbl;
|
||||
|
||||
// replace numeric entities
|
||||
$string = preg_replace('~&#x([0-9a-f]+);~ei', 'code2utf8(hexdec("\\1"))', $string);
|
||||
$string = preg_replace('~&#([0-9]+);~e', 'code2utf8(\\1)', $string);
|
||||
|
||||
// replace literal entities
|
||||
if (!isset($trans_tbl))
|
||||
{
|
||||
$trans_tbl = array();
|
||||
|
||||
foreach (get_html_translation_table(HTML_ENTITIES) as $val=>$key)
|
||||
$trans_tbl[$key] = utf8_encode($val);
|
||||
}
|
||||
return strtr($string, $trans_tbl);
|
||||
}
|
||||
|
||||
// taken from support toolkit
|
||||
// Returns the utf string corresponding to the unicode value (from php.net, courtesy - romans@void.lv)
|
||||
function code2utf8($num)
|
||||
{
|
||||
if ($num < 128) return chr($num);
|
||||
if ($num < 2048) return chr(($num >> 6) + 192) . chr(($num & 63) + 128);
|
||||
if ($num < 65536) return chr(($num >> 12) + 224) . chr((($num >> 6) & 63) + 128) . chr(($num & 63) + 128);
|
||||
if ($num < 2097152) return chr(($num >> 18) + 240) . chr((($num >> 12) & 63) + 128) . chr((($num >> 6) & 63) + 128) . chr(($num & 63) + 128);
|
||||
return '';
|
||||
}
|
@@ -2,9 +2,8 @@
|
||||
/**
|
||||
*
|
||||
* @package phpBB3
|
||||
* @version $Id$
|
||||
* @copyright (c) 2006 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
* This file creates new schema files for every database.
|
||||
* The filenames will be prefixed with an underscore to not overwrite the current schema files.
|
||||
@@ -12,11 +11,7 @@
|
||||
* If you overwrite the original schema files please make sure you save the file with UNIX linefeeds.
|
||||
*/
|
||||
|
||||
die("Please read the first lines of this script for instructions on how to enable it");
|
||||
|
||||
@set_time_limit(0);
|
||||
|
||||
$schema_path = './../install/schemas/';
|
||||
$schema_path = dirname(__FILE__) . '/../install/schemas/';
|
||||
|
||||
if (!is_writable($schema_path))
|
||||
{
|
||||
@@ -242,7 +237,7 @@ $supported_dbms = array('firebird', 'mssql', 'mysql_40', 'mysql_41', 'oracle', '
|
||||
|
||||
foreach ($supported_dbms as $dbms)
|
||||
{
|
||||
$fp = fopen($schema_path . '_' . $dbms . '_schema.sql', 'wt');
|
||||
$fp = fopen($schema_path . $dbms . '_schema.sql', 'wt');
|
||||
|
||||
$line = '';
|
||||
|
||||
@@ -251,31 +246,43 @@ foreach ($supported_dbms as $dbms)
|
||||
{
|
||||
case 'mysql_40':
|
||||
case 'mysql_41':
|
||||
$line = "#\n# \$I" . "d: $\n#\n\n";
|
||||
case 'firebird':
|
||||
case 'sqlite':
|
||||
fwrite($fp, "# DO NOT EDIT THIS FILE, IT IS GENERATED\n");
|
||||
fwrite($fp, "#\n");
|
||||
fwrite($fp, "# To change the contents of this file, edit\n");
|
||||
fwrite($fp, "# phpBB/develop/create_schema_files.php and\n");
|
||||
fwrite($fp, "# run it.\n");
|
||||
break;
|
||||
|
||||
case 'mssql':
|
||||
case 'oracle':
|
||||
case 'postgres':
|
||||
fwrite($fp, "/*\n");
|
||||
fwrite($fp, " * DO NOT EDIT THIS FILE, IT IS GENERATED\n");
|
||||
fwrite($fp, " *\n");
|
||||
fwrite($fp, " * To change the contents of this file, edit\n");
|
||||
fwrite($fp, " * phpBB/develop/create_schema_files.php and\n");
|
||||
fwrite($fp, " * run it.\n");
|
||||
fwrite($fp, " */\n\n");
|
||||
break;
|
||||
}
|
||||
|
||||
switch ($dbms)
|
||||
{
|
||||
case 'firebird':
|
||||
$line = "#\n# \$I" . "d: $\n#\n\n";
|
||||
$line .= custom_data('firebird') . "\n";
|
||||
break;
|
||||
|
||||
case 'sqlite':
|
||||
$line = "#\n# \$I" . "d: $\n#\n\n";
|
||||
$line .= "BEGIN TRANSACTION;\n\n";
|
||||
break;
|
||||
|
||||
case 'mssql':
|
||||
$line = "/*\n\n \$I" . "d: $\n\n*/\n\n";
|
||||
$line .= "BEGIN TRANSACTION\nGO\n\n";
|
||||
break;
|
||||
|
||||
case 'oracle':
|
||||
$line = "/*\n\n \$I" . "d: $\n\n*/\n\n";
|
||||
$line .= custom_data('oracle') . "\n";
|
||||
break;
|
||||
|
||||
case 'postgres':
|
||||
$line = "/*\n\n \$I" . "d: $\n\n*/\n\n";
|
||||
$line .= "BEGIN;\n\n";
|
||||
$line .= custom_data('postgres') . "\n";
|
||||
break;
|
||||
@@ -328,6 +335,15 @@ foreach ($supported_dbms as $dbms)
|
||||
// Write columns one by one...
|
||||
foreach ($table_data['COLUMNS'] as $column_name => $column_data)
|
||||
{
|
||||
if (strlen($column_name) > 30)
|
||||
{
|
||||
trigger_error("Column name '$column_name' on table '$table_name' is too long. The maximum is 30 characters.", E_USER_ERROR);
|
||||
}
|
||||
if (isset($column_data[2]) && $column_data[2] == 'auto_increment' && strlen($column_name) > 26) // "${column_name}_gen"
|
||||
{
|
||||
trigger_error("Index name '${column_name}_gen' on table '$table_name' is too long. The maximum is 30 characters.", E_USER_ERROR);
|
||||
}
|
||||
|
||||
// Get type
|
||||
if (strpos($column_data[0], ':') !== false)
|
||||
{
|
||||
@@ -631,6 +647,11 @@ foreach ($supported_dbms as $dbms)
|
||||
$key_data[1] = array($key_data[1]);
|
||||
}
|
||||
|
||||
if (strlen($table_name . $key_name) > 30)
|
||||
{
|
||||
trigger_error("Index name '${table_name}_$key_name' on table '$table_name' is too long. The maximum is 30 characters.", E_USER_ERROR);
|
||||
}
|
||||
|
||||
switch ($dbms)
|
||||
{
|
||||
case 'mysql_40':
|
||||
@@ -749,7 +770,8 @@ foreach ($supported_dbms as $dbms)
|
||||
switch ($dbms)
|
||||
{
|
||||
case 'mssql':
|
||||
$line = "\nCOMMIT\nGO\n\n";
|
||||
// No need to do this, no transaction support for schema changes
|
||||
//$line = "\nCOMMIT\nGO\n\n";
|
||||
break;
|
||||
|
||||
case 'sqlite':
|
||||
@@ -924,7 +946,7 @@ function get_schema_struct()
|
||||
|
||||
$schema_data['phpbb_bbcodes'] = array(
|
||||
'COLUMNS' => array(
|
||||
'bbcode_id' => array('TINT:3', 0),
|
||||
'bbcode_id' => array('USINT', 0),
|
||||
'bbcode_tag' => array('VCHAR:16', ''),
|
||||
'bbcode_helpline' => array('VCHAR_UNI', ''),
|
||||
'display_on_posting' => array('BOOL', 0),
|
||||
@@ -1205,6 +1227,24 @@ function get_schema_struct()
|
||||
),
|
||||
);
|
||||
|
||||
$schema_data['phpbb_login_attempts'] = array(
|
||||
'COLUMNS' => array(
|
||||
'attempt_ip' => array('VCHAR:40', ''),
|
||||
'attempt_browser' => array('VCHAR:150', ''),
|
||||
'attempt_forwarded_for' => array('VCHAR:255', ''),
|
||||
'attempt_time' => array('TIMESTAMP', 0),
|
||||
'user_id' => array('UINT', 0),
|
||||
'username' => array('VCHAR_UNI:255', 0),
|
||||
'username_clean' => array('VCHAR_CI', 0),
|
||||
),
|
||||
'KEYS' => array(
|
||||
'att_ip' => array('INDEX', array('attempt_ip', 'attempt_time')),
|
||||
'att_for' => array('INDEX', array('attempt_forwarded_for', 'attempt_time')),
|
||||
'att_time' => array('INDEX', array('attempt_time')),
|
||||
'user_id' => array('INDEX', 'user_id'),
|
||||
),
|
||||
);
|
||||
|
||||
$schema_data['phpbb_moderator_cache'] = array(
|
||||
'COLUMNS' => array(
|
||||
'forum_id' => array('UINT', 0),
|
||||
@@ -1408,6 +1448,7 @@ function get_schema_struct()
|
||||
'field_default_value' => array('VCHAR_UNI', ''),
|
||||
'field_validation' => array('VCHAR_UNI:20', ''),
|
||||
'field_required' => array('BOOL', 0),
|
||||
'field_show_novalue' => array('BOOL', 0),
|
||||
'field_show_on_reg' => array('BOOL', 0),
|
||||
'field_show_on_vt' => array('BOOL', 0),
|
||||
'field_show_profile' => array('BOOL', 0),
|
||||
@@ -2045,4 +2086,3 @@ EOF;
|
||||
|
||||
echo 'done';
|
||||
|
||||
?>
|
137
phpBB/develop/create_search_index.php
Normal file
137
phpBB/develop/create_search_index.php
Normal file
@@ -0,0 +1,137 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package phpBB3
|
||||
* @copyright (c) 2011 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
if (php_sapi_name() != 'cli')
|
||||
{
|
||||
die("This program must be run from the command line.\n");
|
||||
}
|
||||
|
||||
if ($argc < 2)
|
||||
{
|
||||
echo 'Usage: php ' . basename(__FILE__) . " index_type [batch_size]\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$class_name = basename($argv[1]);
|
||||
|
||||
define('IN_PHPBB', true);
|
||||
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../';
|
||||
$phpEx = substr(strrchr(__FILE__, '.'), 1);
|
||||
require($phpbb_root_path . 'common.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/acp/acp_search.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/search/' . $class_name . '.' . $phpEx);
|
||||
|
||||
$user->session_begin();
|
||||
$auth->acl($user->data);
|
||||
$user->setup('acp/search');
|
||||
|
||||
$search_name = ucfirst(strtolower(str_replace('_', ' ', $class_name)));
|
||||
$search_errors = array();
|
||||
$search = new $class_name($search_errors);
|
||||
|
||||
$batch_size = isset($argv[2]) ? $argv[2] : 2000;
|
||||
|
||||
if (method_exists($search, 'create_index'))
|
||||
{
|
||||
if ($error = $search->create_index(null, ''))
|
||||
{
|
||||
var_dump($error);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql = 'SELECT forum_id, enable_indexing
|
||||
FROM ' . FORUMS_TABLE;
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$forums[$row['forum_id']] = (bool) $row['enable_indexing'];
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
$sql = 'SELECT post_id
|
||||
FROM ' . POSTS_TABLE . '
|
||||
ORDER BY post_id DESC';
|
||||
$result = $db->sql_query_limit($sql, 1);
|
||||
$max_post_id = (int) $db->sql_fetchfield('post_id');
|
||||
|
||||
$post_counter = 0;
|
||||
while ($post_counter <= $max_post_id)
|
||||
{
|
||||
$row_count = 0;
|
||||
$time = time();
|
||||
|
||||
printf("Processing posts with %d <= post_id <= %d\n",
|
||||
$post_counter + 1,
|
||||
$post_counter + $batch_size
|
||||
);
|
||||
|
||||
$sql = 'SELECT post_id, post_subject, post_text, poster_id, forum_id
|
||||
FROM ' . POSTS_TABLE . '
|
||||
WHERE post_id >= ' . (int) ($post_counter + 1) . '
|
||||
AND post_id <= ' . (int) ($post_counter + $batch_size);
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$buffer = $db->sql_buffer_nested_transactions();
|
||||
|
||||
if ($buffer)
|
||||
{
|
||||
$rows = $db->sql_fetchrowset($result);
|
||||
$rows[] = false; // indicate end of array for while loop below
|
||||
|
||||
$db->sql_freeresult($result);
|
||||
}
|
||||
|
||||
$i = 0;
|
||||
while ($row = ($buffer ? $rows[$i++] : $db->sql_fetchrow($result)))
|
||||
{
|
||||
// Indexing enabled for this forum or global announcement?
|
||||
// Global announcements get indexed by default.
|
||||
if (!$row['forum_id'] || !empty($forums[$row['forum_id']]))
|
||||
{
|
||||
++$row_count;
|
||||
|
||||
$search->index('post',
|
||||
$row['post_id'],
|
||||
$row['post_text'],
|
||||
$row['post_subject'],
|
||||
$row['poster_id'],
|
||||
$row['forum_id']
|
||||
);
|
||||
|
||||
if ($row_count % 10 == 0)
|
||||
{
|
||||
echo '.';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$delta = (time() - $time);
|
||||
$delta = $delta <= 0 ? 1 : $delta;
|
||||
printf(" %d posts/sec\n", $row_count / $delta);
|
||||
|
||||
if (!$buffer)
|
||||
{
|
||||
$db->sql_freeresult($result);
|
||||
}
|
||||
|
||||
$post_counter += $batch_size;
|
||||
}
|
||||
}
|
||||
|
||||
$search->tidy();
|
||||
|
||||
add_log('admin', 'LOG_SEARCH_INDEX_CREATED', $search_name);
|
||||
|
||||
echo $user->lang['SEARCH_INDEX_CREATED'] . "\n";
|
||||
echo 'Peak Memory Usage: ' . get_formatted_filesize(memory_get_peak_usage()) . "\n";
|
||||
|
||||
exit(0);
|
@@ -1,19 +1,13 @@
|
||||
<?php
|
||||
// -------------------------------------------------------------
|
||||
//
|
||||
// $Id$
|
||||
//
|
||||
// FILENAME : create_variable_overview.php
|
||||
// STARTED : Fri Aug 15 2003
|
||||
// COPYRIGHT : <20> 2003 phpBB Group
|
||||
// WWW : http://www.phpbb.com/
|
||||
// LICENCE : GPL vs2.0 [ see /docs/COPYING ]
|
||||
//
|
||||
// -------------------------------------------------------------
|
||||
|
||||
/*
|
||||
This script generates an index of some template vars and their use within the templates.
|
||||
It writes down all language variables used by various templates.
|
||||
/**
|
||||
*
|
||||
* @package phpBB3
|
||||
* @copyright (c) 2003 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
* This script generates an index of some template vars and their use within the templates.
|
||||
* It writes down all language variables used by various templates.
|
||||
*
|
||||
*/
|
||||
|
||||
//
|
||||
@@ -83,7 +77,7 @@ $html_skeleton .= '<br><br><a name="ref"></a><b>References: </b>{SEE_FILES}';
|
||||
|
||||
$html_skeleton .= '
|
||||
<br><br>
|
||||
<div class="copyright" align="center">Powered by phpBB 2.2 © <a href="http://www.phpbb.com/" target="_phpbb" class="copyright">phpBB Group</a>, 2003</div>
|
||||
<div class="copyright" align="center">Powered by <a href="http://www.phpbb.com/">phpBB</a>® Forum Software © phpBB Group</div>
|
||||
|
||||
<br clear="all" /></td>
|
||||
</tr>
|
||||
@@ -405,7 +399,7 @@ $html_data .= '<br><li><a href="./lang_index.html" class="gen">Appendix A: Langu
|
||||
|
||||
$html_data .= '
|
||||
</ol><br><br>
|
||||
<div class="copyright" align="center">Powered by phpBB 2.2 © <a href="http://www.phpbb.com/" target="_phpbb" class="copyright">phpBB Group</a>, 2003</div>
|
||||
<div class="copyright" align="center">Powered by <a href="http://www.phpbb.com/">phpBB</a>® Forum Software © phpBB Group</div>
|
||||
|
||||
<br clear="all" /></td>
|
||||
</tr>
|
||||
@@ -528,7 +522,7 @@ foreach ($lang_fp as $filepointer)
|
||||
|
||||
$html_data .= '
|
||||
<br><br>
|
||||
<div class="copyright" align="center">Powered by phpBB 2.2 © <a href="http://www.phpbb.com/" target="_phpbb" class="copyright">phpBB Group</a>, 2003</div>
|
||||
<div class="copyright" align="center">Powered by <a href="http://www.phpbb.com/">phpBB</a>® Forum Software © phpBB Group</div>
|
||||
|
||||
<br clear="all" /></td>
|
||||
</tr>
|
||||
|
@@ -1,15 +1,12 @@
|
||||
<?php
|
||||
// -------------------------------------------------------------
|
||||
//
|
||||
// $Id$
|
||||
//
|
||||
// FILENAME : fill.php
|
||||
// STARTED : Mon Sep 15, 2003
|
||||
// COPYRIGHT : <20> 2001, 2003 phpBB Group
|
||||
// WWW : http://www.phpbb.com/
|
||||
// LICENCE : GPL vs2.0 [ see /docs/COPYING ]
|
||||
//
|
||||
// -------------------------------------------------------------
|
||||
/**
|
||||
*
|
||||
* @package phpBB3
|
||||
* @copyright (c) 2001, 2003 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
//
|
||||
// Security message:
|
||||
//
|
||||
|
@@ -14,7 +14,7 @@ find . > FILELIST.$$
|
||||
grep -sv FILELIST FILELIST.$$ > FILELIST2.$$
|
||||
grep -sv $(basename $0) FILELIST2.$$ > FILELIST.$$
|
||||
grep -sv "^\.$" FILELIST.$$ > FILELIST2.$$
|
||||
file -f FILELIST2.$$ |grep text | sed -e 's/^\([^\:]*\)\:.*$/\1/' > FILELIST
|
||||
file -f FILELIST2.$$ |grep text | grep -v icon_textbox_search.gif | sed -e 's/^\([^\:]*\)\:.*$/\1/' > FILELIST
|
||||
file -f FILELIST2.$$ |grep -sv text | sed -e 's/^\([^\:]*\)\:.*$/Not Modifying file: \1/'
|
||||
rm FILELIST2.$$
|
||||
rm FILELIST.$$
|
||||
|
@@ -2,9 +2,8 @@
|
||||
/**
|
||||
*
|
||||
* @package phpBB3
|
||||
* @version $Id$
|
||||
* @copyright (c) 2005 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
|
@@ -2,9 +2,8 @@
|
||||
/**
|
||||
*
|
||||
* @package phpBB3
|
||||
* @version $Id$
|
||||
* @copyright (c) 2005 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
|
@@ -2,9 +2,8 @@
|
||||
/**
|
||||
*
|
||||
* @package phpBB3
|
||||
* @version $Id$
|
||||
* @copyright (c) 2005 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
|
@@ -1,15 +1,11 @@
|
||||
<?php
|
||||
// -------------------------------------------------------------
|
||||
//
|
||||
// $Id$
|
||||
//
|
||||
// FILENAME : merge_attachment_tables.php
|
||||
// STARTED : Tue Nov 04, 2003
|
||||
// COPYRIGHT : <20> 2001, 2003 phpBB Group
|
||||
// WWW : http://www.phpbb.com/
|
||||
// LICENCE : GPL vs2.0 [ see /docs/COPYING ]
|
||||
//
|
||||
// -------------------------------------------------------------
|
||||
/**
|
||||
*
|
||||
* @package phpBB3
|
||||
* @copyright (c) 2001, 2003 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
//
|
||||
// Security message:
|
||||
|
@@ -1,23 +1,11 @@
|
||||
<?php
|
||||
/***************************************************************************
|
||||
* merge_clean_posts.php
|
||||
* -------------------
|
||||
* begin : Tuesday, February 25, 2003
|
||||
* copyright : (C) 2003 The phpBB Group
|
||||
* email : support@phpbb.com
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
***************************************************************************/
|
||||
/**
|
||||
*
|
||||
* @package phpBB3
|
||||
* @copyright (c) 2003 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
//
|
||||
// Security message:
|
||||
|
@@ -2,15 +2,13 @@
|
||||
/**
|
||||
*
|
||||
* @package phpBB3
|
||||
* @version $Id$
|
||||
* @copyright (c) 2006 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
* This file creates SQL statements to upgrade phpBB on MySQL 3.x/4.0.x to 4.1.x/5.x
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
//
|
||||
// Security message:
|
||||
//
|
||||
@@ -21,6 +19,7 @@
|
||||
die("Please read the first lines of this script for instructions on how to enable it");
|
||||
|
||||
define('IN_PHPBB', true);
|
||||
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
|
||||
$phpEx = substr(strrchr(__FILE__, '.'), 1);
|
||||
include($phpbb_root_path . 'common.' . $phpEx);
|
||||
|
||||
@@ -252,7 +251,7 @@ foreach ($schema_data as $table_name => $table_data)
|
||||
// Do we now need to re-add the fulltext index? ;)
|
||||
if ($table_name == ($prefix . 'posts') && $drop_index)
|
||||
{
|
||||
echo "ALTER TABLE $table_name ADD FULLTEXT (post_subject), ADD FULLTEXT (post_text), ADD FULLTEXT post_content (post_subject, post_text){$newline}";
|
||||
echo "ALTER TABLE $table_name ADD FULLTEXT (post_subject), ADD FULLTEXT (post_text), ADD FULLTEXT post_content (post_subject, post_text);{$newline}";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -414,7 +413,7 @@ function get_schema_struct()
|
||||
|
||||
$schema_data['phpbb_bbcodes'] = array(
|
||||
'COLUMNS' => array(
|
||||
'bbcode_id' => array('TINT:3', 0),
|
||||
'bbcode_id' => array('USINT', 0),
|
||||
'bbcode_tag' => array('VCHAR:16', ''),
|
||||
'bbcode_helpline' => array('VCHAR_UNI', ''),
|
||||
'display_on_posting' => array('BOOL', 0),
|
||||
|
@@ -18,14 +18,15 @@ $ls32 = "(?:$h16:$h16|$ipv4)";
|
||||
|
||||
$ipv6_construct = array(
|
||||
array(false, '', '{6}', $ls32),
|
||||
array(false, '::', '{5}', $ls32),
|
||||
array(false, '::', '{0,5}', "(?:$h16(?::$h16)?|$ipv4)"),
|
||||
array('', ':', '{4}', $ls32),
|
||||
array('{1,2}', ':', '{3}', $ls32),
|
||||
array('{1,3}', ':', '{2}', $ls32),
|
||||
array('{1,4}', ':', '', $ls32),
|
||||
array('{1,5}', ':', false, $ls32),
|
||||
array('{1,6}', ':', false, $h16),
|
||||
array('{1,7}', ':', false, '')
|
||||
array('{1,7}', ':', false, ''),
|
||||
array(false, '::', false, '')
|
||||
);
|
||||
|
||||
$ipv6 = '(?:';
|
||||
|
9
phpBB/develop/set_permissions.sh
Executable file
9
phpBB/develop/set_permissions.sh
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
# set permissions required for installation
|
||||
|
||||
dir=$(dirname $0)
|
||||
|
||||
for file in cache files store config.php images/avatars/upload
|
||||
do
|
||||
chmod a+w $dir/../$file
|
||||
done
|
@@ -2,9 +2,8 @@
|
||||
/**
|
||||
*
|
||||
* @package phpBB3
|
||||
* @version $Id$
|
||||
* @copyright (c) 2005 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* phpBB3 © Copyright 2000, 2002, 2005, 2007 phpBB Group
|
||||
* phpBB3 © Copyright phpBB Group
|
||||
* http://www.phpbb.com
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
@@ -13,7 +13,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://opensource.org/licenses/gpl-license.php>.
|
||||
* along with this program. If not, see <http://opensource.org/licenses/gpl-2.0.php>
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -22,21 +22,18 @@ involved in phpBB.
|
||||
|
||||
phpBB Lead Developer: naderman (Nils Adermann)
|
||||
|
||||
phpBB Developers: A_Jelly_Doughnut (Josh Woody)
|
||||
Acyd Burn (Meik Sievertsen) [Lead 09/2005 - 01/2010]
|
||||
APTX (Marek A. R.)
|
||||
phpBB Developers: Acyd Burn (Meik Sievertsen) [Lead 09/2005 - 01/2010]
|
||||
Arty (Vjacheslav Trushkin)
|
||||
bantu (Andreas Fischer)
|
||||
DavidMJ (David M.)
|
||||
dhn (Dominik Dröscher)
|
||||
kellanved (Henry Sudhof)
|
||||
Terrafrost (Jim Wigginton)
|
||||
imkingdavid (David King)
|
||||
igorw (Igor Wiedler)
|
||||
nickvergessen (Joas Schilling)
|
||||
Oleg (Oleg Pudeyev)
|
||||
rxu (Ruslan Uzdenov)
|
||||
ToonArmy (Chris Smith)
|
||||
|
||||
Contributions by: Brainy (Cullen Walsh)
|
||||
leviatan21 (Gabriel Vazquez)
|
||||
nickvergessen (Joas Schilling)
|
||||
Contributions by: leviatan21 (Gabriel Vazquez)
|
||||
Raimon (Raimon Meuldijk)
|
||||
rxu (Ruslan Uzdenov)
|
||||
Xore (Robert Hetzler)
|
||||
|
||||
|
||||
@@ -47,10 +44,17 @@ phpBB Project Manager: theFinn (James Atkinson) [Founder - 04/2007]
|
||||
|
||||
phpBB Lead Developer: psoTFX (Paul S. Owen) [2001 - 09/2005]
|
||||
|
||||
phpBB Developers: Ashe (Ludovic Arnaud) [10/2002 - 11/2003, 06/2006 - 10/2006]
|
||||
BartVB (Bart van Bragt) [11/2000 - 03/2006]
|
||||
GrahamJE (Graham Eames) [09/2005 - 11/2006]
|
||||
Vic D'Elfant (Vic D'Elfant) [04/2007 - 04/2009]
|
||||
phpBB Developers: A_Jelly_Doughnut (Josh Woody) [01/2010 - 11/2010]
|
||||
APTX (Marek A. Ruszczyński) [12/2007 - 04/2011]
|
||||
Ashe (Ludovic Arnaud) [10/2002 - 11/2003, 06/2006 - 10/2006]
|
||||
BartVB (Bart van Bragt) [11/2000 - 03/2006]
|
||||
ckwalsh (Cullen Walsh) [01/2010 - 07/2011]
|
||||
DavidMJ (David M.) [12/2005 - 08/2009]
|
||||
dhn (Dominik Dröscher) [05/2007 - 01/2011]
|
||||
GrahamJE (Graham Eames) [09/2005 - 11/2006]
|
||||
kellanved (Henry Sudhof) [04/2007 - 03/2011]
|
||||
TerraFrost (Jim Wigginton) [04/2009 - 01/2011]
|
||||
Vic D'Elfant (Vic D'Elfant) [04/2007 - 04/2009]
|
||||
|
||||
-- Copyrights --
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@
|
||||
<meta http-equiv="imagetoolbar" content="no" />
|
||||
<meta name="resource-type" content="document" />
|
||||
<meta name="distribution" content="global" />
|
||||
<meta name="copyright" content="2007 phpBB Group" />
|
||||
<meta name="copyright" content="phpBB Group" />
|
||||
<meta name="keywords" content="" />
|
||||
<meta name="description" content="phpBB 3.0.x frequently asked questions" />
|
||||
<title>phpBB3 • FAQ</title>
|
||||
@@ -110,7 +110,7 @@ I want to sue you because i think you host an illegal board!</h2>
|
||||
|
||||
<div class="content">
|
||||
|
||||
<p>We provide the software, we have absolutely nothing to do with any board that runs it (beyond phpbb.com of course!) and we also do not host any site. The GPL grants the user an unlimited right of use subject to their adherence of that licence. Therefore we cannot prevent, dictate, control or otherwise limit the use of phpBB software. So please do not contact us for such matters.</p>
|
||||
<p>We provide the software, we have absolutely nothing to do with any board that runs it (beyond phpbb.com of course!) and we also do not host any site. The GPL grants the user an unlimited right of use subject to their adherence of that license. Therefore we cannot prevent, dictate, control or otherwise limit the use of phpBB software. So please do not contact us for such matters.</p>
|
||||
|
||||
<p>If you have a problem with a given board please take it up with them, not us. We are not and cannot be held legally responsible for any third party use of this software (much like Microsoft et al cannot be held responsible for the use of Windows in illegal activities, etc.). Additionally we do <strong>not</strong> track the use of phpBB software in any way. So please do not ask us for details on a "given" board we will not be able to help you. If any law firms or lawyers out there send us writs, cease and desist orders, etc. for third party website use of this software we reserve the right to charge for time wasted dealing with such issues...</p>
|
||||
|
||||
@@ -328,7 +328,7 @@ I want to sue you because i think you host an illegal board!</h2>
|
||||
|
||||
<div class="content">
|
||||
|
||||
<p>This application is opensource software released under the <a href="http://opensource.org/licenses/gpl-license.php">GPL</a>. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) 2000, 2002, 2005, 2007 <a href="http://www.phpbb.com/">phpBB Group</a>, All Rights Reserved.</p>
|
||||
<p>This application is opensource software released under the <a href="http://opensource.org/licenses/gpl-2.0.php">GNU General Public License v2</a>. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) <a href="http://www.phpbb.com/">phpBB Group</a>, All Rights Reserved.</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
@@ -8,7 +8,7 @@
|
||||
<meta http-equiv="imagetoolbar" content="no" />
|
||||
<meta name="resource-type" content="document" />
|
||||
<meta name="distribution" content="global" />
|
||||
<meta name="copyright" content="2007 phpBB Group" />
|
||||
<meta name="copyright" content="phpBB Group" />
|
||||
<meta name="keywords" content="" />
|
||||
<meta name="description" content="phpBB 3.0.x Installation, updating and conversion informations" />
|
||||
<title>phpBB3 • Install</title>
|
||||
@@ -79,9 +79,10 @@
|
||||
<li><a href="#postinstall">Important (security related) post-Install tasks for all installation methods</a>
|
||||
<ol style="list-style-type: lower-roman;">
|
||||
<li><a href="#avatars">Uploadable avatars</a></li>
|
||||
<li><a href="#webserver_configuration">Webserver configuration</a></li>
|
||||
</ol>
|
||||
</li>
|
||||
<li><a href="#disclaimer">Disclaimer</a></li>
|
||||
<li><a href="#disclaimer">Copyright and disclaimer</a></li>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
@@ -138,15 +139,15 @@
|
||||
<ul>
|
||||
<li>MySQL 3.23 or above (MySQLi supported)</li>
|
||||
<li>PostgreSQL 7.3+</li>
|
||||
<li>SQLite 2.8.2+</li>
|
||||
<li>SQLite 2.8.2+ (SQLite 3 is not supported)</li>
|
||||
<li>Firebird 2.1+</li>
|
||||
<li>MS SQL Server 2000 or above (directly or via ODBC)</li>
|
||||
<li>MS SQL Server 2000 or above (directly or via ODBC or the native adapter)</li>
|
||||
<li>Oracle</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>PHP 4.3.3+ (>=4.3.3, >4.4.x, >5.x.x, >6.0-dev (compatible))</strong> with support for the database you intend to use.</li>
|
||||
<li><strong>PHP 4.3.3+ (>=4.3.3, >=4.4.x, >=5.x.x, >=5.4.x)</strong> with support for the database you intend to use.</li>
|
||||
<li>getimagesize() function need to be enabled.</li>
|
||||
<li>These optional presence of the following modules within PHP will provide access to additional features, but they are not required.
|
||||
<li>Presence of the following modules within PHP will provide access to additional features, but they are not required:
|
||||
<ul>
|
||||
<li>zlib Compression support</li>
|
||||
<li>Remote FTP support</li>
|
||||
@@ -181,7 +182,7 @@
|
||||
|
||||
<p>All .php, .inc, .sql, .cfg, .html and .txt files should be uploaded in <strong>ASCII</strong> mode, while all graphics should be uploaded in <strong>BINARY</strong> mode. If you are unfamiliar with what this means please refer to your FTP client documentation. In most cases this is all handled transparantly by your ftp client but if you encounter problems later you should be sure the files where uploaded correctly as described here.</p>
|
||||
|
||||
<p>phpBB3 comes supplied with english as its standard language. However a number of separate packs for different languages are available. If you are not a native english speaker you may wish to install one or more of these packages before continuing. The installation process below will allow you to select a default language from those available (you can of course change this default at a later stage). For more details of language packs, where to obtain them and how to install them please see the <a href="README.html#i18n">README</a>.</p>
|
||||
<p>phpBB3 comes supplied with British English as its standard language. However a number of separate packs for different languages are available. If you are not a native English speaker you may wish to install one or more of these packages before continuing. The installation process below will allow you to select a default language from those available (you can of course change this default at a later stage). For more details of language packs, where to obtain them and how to install them please see the <a href="README.html#i18n">README</a>.</p>
|
||||
|
||||
<p>Once all the files have been uploaded to your site you should point your browser at this location with the addition of <code>install/</code>. For example if your domain name is <em>www.mydomain.tld</em> and you placed phpBB3 in a directory /phpBB3 off your web root you would enter <em>http://www.mydomain.tld/phpBB3/install/</em> or (alternatively) <em>http://www.mydomain.tld/phpBB3/install/index.php</em> into your browser. When you have done this you should see the phpBB3 Installation screen appear.</p>
|
||||
|
||||
@@ -273,7 +274,7 @@
|
||||
|
||||
<p>This package is meant for those wanting to only replace changed files from a previous version to the latest version. This package normally contains the changed files from up to five previous versions.</p>
|
||||
|
||||
<p>This package contains a number of archives, each contains the files changed from a given release to the latest version. You should select the appropriate archive for your current version, e.g. if you currently have <samp>3.0.6</samp> you should select the phpBB-3.0.6_to_3.0.7.zip/tar.gz file.</p>
|
||||
<p>This package contains a number of archives, each contains the files changed from a given release to the latest version. You should select the appropriate archive for your current version, e.g. if you currently have <samp>3.0.10</samp> you should select the phpBB-3.0.10_to_3.0.11.zip/tar.gz file.</p>
|
||||
|
||||
<p>The directory structure has been preserved enabling you (if you wish) to simply upload the contents of the archive to the appropriate location on your server, i.e. simply overwrite the existing files with the new versions. Do not forget that if you have installed any MODs these files will overwrite the originals possibly destroying them in the process. You will need to re-add MODs to any affected file before uploading.</p>
|
||||
|
||||
@@ -285,7 +286,7 @@
|
||||
|
||||
<p>The patch file is one solution for those with many Modifications (MODs) or other changes who do not want to re-add them back to all the changed files if they use the method explained above. To use this you will need command line access to a standard UNIX type <strong>patch</strong> application. If you do not have access to such an application but still want to use this update approach, we strongly recommend the <a href="#update_auto">Automatic update package</a> explained below. It is also the recommended update method.</p>
|
||||
|
||||
<p>A number of patch files are provided to allow you to update from previous stable releases. Select the correct patch, e.g. if your current version is 3.0.5 you need the phpBB-3.0.6_to_3.0.7.patch file. Place the correct patch in the parent directory containing the phpBB3 core files (i.e. index.php, viewforum.php, etc.). With this done you should run the following command: <strong>patch -cl -d [PHPBB DIRECTORY] -p1 < [PATCH NAME]</strong> (where PHPBB DIRECTORY is the directory name your phpBB Installation resides in, for example phpBB3, and where PATCH NAME is the relevant filename of the selected patch file). This should complete quickly, hopefully without any HUNK FAILED comments.</p>
|
||||
<p>A number of patch files are provided to allow you to update from previous stable releases. Select the correct patch, e.g. if your current version is <samp>3.0.10</samp> you need the phpBB-3.0.10_to_3.0.11.patch file. Place the correct patch in the parent directory containing the phpBB3 core files (i.e. index.php, viewforum.php, etc.). With this done you should run the following command: <strong>patch -cl -d [PHPBB DIRECTORY] -p1 < [PATCH NAME]</strong> (where PHPBB DIRECTORY is the directory name your phpBB Installation resides in, for example phpBB3, and where PATCH NAME is the relevant filename of the selected patch file). This should complete quickly, hopefully without any HUNK FAILED comments.</p>
|
||||
|
||||
<p>If you do get failures you should look at using the <a href="#update_files">Changed files only</a> package to replace the files which failed to patch, please note that you will need to manually re-add any Modifications (MODs) to these particular files. Alternatively if you know how you can examine the .rej files to determine what failed where and make manual adjustments to the relevant source.</p>
|
||||
|
||||
@@ -408,6 +409,12 @@
|
||||
|
||||
<p>Please be aware that setting a directories permissions to global write access is a potential security issue. While it is unlikely that anything nasty will occur (such as all the avatars being deleted) there are always people out there to cause trouble. Therefore you should monitor this directory and if possible make regular backups.</p>
|
||||
|
||||
<a name="webserver_configuration"></a><h3>6.ii. Webserver configuration</h3>
|
||||
|
||||
<p>Depending on your web server you may have to configure your server to deny web access to the <code>cache/</code>, <code>files/</code>, <code>store/</code> and other directories. This is to prevent users from accessing sensitive files.</p>
|
||||
|
||||
<p>For <strong>apache</strong> there are <code>.htaccess</code> files already in place to do this for you. For other webservers you will have to adjust the configuration yourself. Sample files for <strong>nginx</strong> and <strong>lighttpd</strong> to help you get started may be found in docs directory.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="back2top"><a href="#wrap" class="top">Back to Top</a></div>
|
||||
@@ -424,7 +431,7 @@
|
||||
|
||||
<div class="content">
|
||||
|
||||
<p>This application is opensource software released under the <a href="http://opensource.org/licenses/gpl-license.php">GPL</a>. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) 2000, 2002, 2005, 2007 <a href="http://www.phpbb.com/">phpBB Group</a>, All Rights Reserved.</p>
|
||||
<p>This application is opensource software released under the <a href="http://opensource.org/licenses/gpl-2.0.php">GNU General Public License v2</a>. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) <a href="http://www.phpbb.com/">phpBB Group</a>, All Rights Reserved.</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
@@ -8,7 +8,7 @@
|
||||
<meta http-equiv="imagetoolbar" content="no" />
|
||||
<meta name="resource-type" content="document" />
|
||||
<meta name="distribution" content="global" />
|
||||
<meta name="copyright" content="2007 phpBB Group" />
|
||||
<meta name="copyright" content="phpBB Group" />
|
||||
<meta name="keywords" content="" />
|
||||
<meta name="description" content="phpBB 3.0.x Readme" />
|
||||
<title>phpBB3 • Readme</title>
|
||||
@@ -54,7 +54,7 @@
|
||||
<li><a href="#install">Installing phpBB3</a></li>
|
||||
<li><a href="#run">Running phpBB3</a>
|
||||
<ol style="list-style-type: lower-roman;">
|
||||
<li><a href="#i18n">Internationalisation (i18n)</a></li>
|
||||
<li><a href="#i18n">Languages (Internationalisation - i18n)</a></li>
|
||||
<li><a href="#styles">Styles</a></li>
|
||||
<li><a href="#mods">Modifications</a></li>
|
||||
</ol>
|
||||
@@ -62,8 +62,9 @@
|
||||
<li><a href="#help">Getting help with phpBB3</a>
|
||||
<ol style="list-style-type: lower-roman;">
|
||||
<li><a href="#docs">Documentation</a></li>
|
||||
<li><a href="#kb">Knowledge Base</a></li>
|
||||
<li><a href="#website">Community Forums</a></li>
|
||||
<li><a href="#irc">Internet Relay Chat</a></li>
|
||||
<li><a href="#irc">Internet Relay Chat (IRC)</a></li>
|
||||
</ol>
|
||||
</li>
|
||||
<li><a href="#status">Status of this version</a></li>
|
||||
@@ -106,6 +107,7 @@
|
||||
|
||||
<ul>
|
||||
<li>Updates from phpBB3 RC1 to the latest version</li>
|
||||
<li>Note: if using the <em>Automatic Update Package</em>, updates are supported from phpBB 3.0.2 onward. To update a pre-3.0.2 installation, first update to 3.0.2 and then update to the current version.</li>
|
||||
<li>Conversions from phpBB 2.0.x to the latest version</li>
|
||||
<li>New installations of phpBB3 - always only the latest released version</li>
|
||||
</ul>
|
||||
@@ -126,41 +128,41 @@
|
||||
|
||||
<div class="content">
|
||||
|
||||
<p>Once installed phpBB is easily managed by both admin and moderator control panels. If you need help or advice with phpBB please see <a href="#help">Section 3</a> below.</p>
|
||||
<p>Once installed, phpBB is easily managed via the Administration and Moderator Control Panels. If you need help or advice with phpBB, please see <a href="#help">Section 3</a> below.</p>
|
||||
|
||||
<a name="i18n"></a><h3>2.i. Internationalisation (i18n)</h3>
|
||||
<a name="i18n"></a><h3>2.i. Languages (Internationalisation - i18n)</h3>
|
||||
|
||||
<p>A number of language packs and style localisations are available. You can find them on our official download page:</p>
|
||||
<p>A number of language packs with included style localisations are available. You can find them listed in the <a href="http://www.phpbb.com/languages/">Language Packs</a> pages of our downloads section or from the <a href="http://www.phpbb.com/customise/db/language_packs-25/">Language Packs</a> section of the <a href="http://www.phpbb.com/customise/db/">Customisation Database</a>.</p>
|
||||
|
||||
<p><a href="http://www.phpbb.com/downloads/">http://www.phpbb.com/downloads/</a></p>
|
||||
<p>For more information about language packs, please see: <a href="http://www.phpbb.com/languages/">http://www.phpbb.com/languages/</a></p>
|
||||
|
||||
<p>This is the <em>official</em> location for all supported language sets. If you download a package from a 3rd party site you do so with the understanding that we cannot offer support. So please, do not ask for help in these cases!</p>
|
||||
|
||||
<p>Installation of these packages is straightforward, simply download the required language pack and unarchive it into the <samp>languages/</samp> folder. Please ensure you retain the directory structure when doing this! Once uploaded go to the <code>Admin->System->Language Packs</code> and install the now appeared new language pack. To install the style imageset you should download the imageset for your language and unarchive the file/s into the relevant imageset directory (styles/prosilver/imageset or styles/subsilver2/imageset), again you must retain the directory structure. Once installed the imageset will become immediately available.</p>
|
||||
<p>Installation of these packages is straightforward: simply download the required language pack, uncompress (unzip) it and via FTP transfer the included <code>language</code> and <code>styles</code> folders to the root of your board installation. The language can then be installed via the Administration Control Panel of your board: <code>System tab -> General Tasks -> Language packs</code>. A more detailed description of the process is in the Knowledge Base article, <a href="http://www.phpbb.com/kb/article/how-to-install-a-language-pack/">How to Install a Language Pack</a>.</p>
|
||||
|
||||
<p>If your language is not available please visit our forums where you will find a topic listing translations currently available or in preparation. This topic also gives you information should you wish to volunteer to translate a language not currently listed.</p>
|
||||
<p>If your language is not available, please visit our <a href="http://www.phpbb.com/community/viewforum.php?f=66">[3.0.x] Translations</a> forum where you will find topics on translations in progress. Should you wish to volunteer to translate a language not currently available or assist in maintaining an existing language pack, you can <a href="http://www.phpbb.com/languages/apply.php">Apply to become a translator</a>.</p>
|
||||
|
||||
<a name="styles"></a><h3>2.ii. Styles</h3>
|
||||
|
||||
<p>Although phpBB Group are rather proud of the included styles we realise that it may not be to everyones tastes. Therefore phpBB3 allows styles to be switched with relative ease. Firstly you need to locate and download a style you like. We maintain such a site at</p>
|
||||
<p>Although the phpBB Group is rather proud of the included styles, we realise that they may not be to everyone's taste. Therefore, phpBB3 allows styles to be switched with relative ease. First, you need to locate and download a style you like. You can find them listed in the <a href="http://www.phpbb.com/customise/db/styles-2/">Styles</a> section of our <a href="http://www.phpbb.com/customise/db/">Customisation Database</a>.</p>
|
||||
|
||||
<p><a href="http://www.phpbb.com/styles/">http://www.phpbb.com/styles/</a></p>
|
||||
<p>For more information about styles, please see: <a href="http://www.phpbb.com/styles/">http://www.phpbb.com/styles/</a></p>
|
||||
|
||||
<p><strong>Please note</strong> that 3rd party styles downloaded for versions of phpBB2 will <strong>not</strong> work in phpBB3.</p>
|
||||
<p><strong>Please note</strong> that 3rd party styles downloaded for versions of phpBB2 will <strong>not</strong> work in phpBB3. It is also important to ensure that the style is updated to match the current version of the phpBB software you are using.</p>
|
||||
|
||||
<p>Once you have downloaded a style the usual next step is to unarchive (or upload the unarchived contents of) the package into your <samp>styles/</samp> directory. You then need to visit <code>Administration -> Styles</code>, you should see the new style available, click install and it will become available for all your users.</p>
|
||||
<p>Once you have downloaded a style, the usual next step is to unarchive (or upload the unarchived contents of) the package into your <code>styles/</code> directory. You then need to visit <code>Administration Control Panel -> Styles tab</code> where you should see the new style available. Click "Install" to install the style.</p>
|
||||
|
||||
<p><strong>Please note</strong> that if you create your own style or modify existing ones, please remember to enable the "Recompile stale style components" setting within the <code>Admin->General->Load Settings</code> screen. This setting allows the cache to detect changes made to the style and automatically refresh it. If this setting is disabled, you will not see your changes taking effect.</p>
|
||||
<p><strong>Please note</strong> that to improve efficiency, the software caches certain data. For this reason, if you create your own style or modify existing ones, please remember to "Refresh" the appropriate style components <code>Administration Control Panel -> Styles tab -> Style Components</code> screen. You may also need to reload the page you have changed in your web browser to overcome browser caching. If the changed components are not refreshed you will not see your changes taking effect.</p>
|
||||
|
||||
<a name="mods"></a><h3>2.iii. Modifications</h3>
|
||||
|
||||
<p>Although not officially supported by phpBB Group, phpBB has a thriving modification scene. These third party modifications to the standard phpBB extend its capabilities still further and can be found at:</p>
|
||||
<p>Although not officially supported by the phpBB Group, phpBB has a thriving modification scene. These third party modifications to the standard phpBB software, known as <strong>MODs</strong>, extend its capabilities still further. You can browse through many of the MODs in the <a href="http://www.phpbb.com/customise/db/modifications-1/">Modifications</a> section of our <a href="http://www.phpbb.com/customise/db/">Customisation Database</a>.</p>
|
||||
|
||||
<p><a href="http://www.phpbb.com/mods/">http://www.phpbb.com/mods/</a></p>
|
||||
<p>For more information about MODs, please see: <a href="http://www.phpbb.com/mods/">http://www.phpbb.com/mods/</a></p>
|
||||
|
||||
<p><strong>Please remember</strong> that any bugs or other issues that occur after you have added any modification should <strong>NOT</strong> be reported to the bug tracker (see below). First remove the modification and see if the problem is resolved.</p>
|
||||
<p><strong>Please remember</strong> that any bugs or other issues that occur after you have added any modification should <strong>NOT</strong> be reported to the bug tracker (see below). First remove the MOD and see if the problem is resolved. Any support for a MOD should only be sought in the "Discussion/Support" forum for that MOD.</p>
|
||||
|
||||
<p>Also remember that any modifications which modify the database in any way may render upgrading your forum to future versions more difficult unless we state otherwise. With all this said many users have and continue to utilise many of the mods already available with great success.</p>
|
||||
<p>Also remember that any modifications, particularly those which modify the database in any way, may render upgrading your forum to future versions more difficult. With all this said, many users have and continue to utilise many of the MODs already available with great success.</p>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -188,17 +190,25 @@
|
||||
|
||||
<p>This covers everything from installation through setting permissions and managing users.</p>
|
||||
|
||||
<a name="website"></a><h3>3.ii. Community Forums</h3>
|
||||
<a name="kb"></a><h3>3.ii. Knowledge Base</h3>
|
||||
|
||||
<p>phpBB Group maintains a thriving community where a number of people have generously decided to donate their time to help support users. This site can be found at:</p>
|
||||
<p>The Knowledge Base consists of a number of detailed articles on some common issues phpBB users may encounter while using the product. The Knowledge Base can be found at:</p>
|
||||
|
||||
<p><a href="http://www.phpbb.com/">http://www.phpbb.com/</a></p>
|
||||
<p><a href="http://www.phpbb.com/kb/">http://www.phpbb.com/kb/</a></p>
|
||||
|
||||
<a name="website"></a><h3>3.iii. Community Forums</h3>
|
||||
|
||||
<p>The phpBB Group maintains a thriving community where a number of people have generously decided to donate their time to help support users. This site can be found at:</p>
|
||||
|
||||
<p><a href="http://www.phpbb.com/community/">http://www.phpbb.com/community/</a></p>
|
||||
|
||||
<p>If you do seek help via our forums please be sure to do a Search before posting. This may well save both you and us time and allow the developer, moderator and support groups to spend more time responding to people with unknown issues and problems. Please also remember that phpBB is an entirely volunteer effort, no one receives any compensation for the time they give, this includes moderators as well as developers. So please be respectful and mindful when awaiting responses.</p>
|
||||
|
||||
<a name="irc"></a><h3>3.iii Internet Relay Chat</h3>
|
||||
<a name="irc"></a><h3>3.iv Internet Relay Chat</h3>
|
||||
|
||||
<p>Another place you may find help is our IRC channel. This operates on the Freenode IRC network, <em>irc.freenode.net</em> and the channel is <em>#phpbb</em> and can be accessed by any good IRC client such as mIRC, XChat, etc. Again, please do not abuse this service and be respectful of other users.</p>
|
||||
<p>Another place you may find help is our IRC channel. This operates on the Freenode IRC network, <a href="irc://irc.freenode.net">irc.freenode.net</a> and the channel is <em>#phpbb</em> and can be accessed by any decent IRC client such as mIRC, XChat, etc. Again, please do not abuse this service and be respectful of other users.</p>
|
||||
|
||||
<p>There are other IRC channels available, please see <a href="http://www.phpbb.com/support/irc/">http://www.phpbb.com/support/irc/</a> for the complete list.</p>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -216,13 +226,13 @@
|
||||
|
||||
<div class="content">
|
||||
|
||||
<p>This is the third stable release of phpBB. The 3.0.x line is essentially feature frozen, with only point releases seeing fixes for bugs and security issues, though feature alterations and minor feature additions may be done if deemed absolutely required. Our next major release will be phpBB 3.2 and the planning phase has begun (the unstable development version is 3.1). Please do not post questions asking when 3.2 will be available, no release date has been set.</p>
|
||||
<p>This is the third stable release of phpBB. The 3.0.x line is essentially feature frozen, with only point releases seeing fixes for bugs and security issues, though feature alterations and minor feature additions may be done if deemed absolutely required. Our next major release will be phpBB 3.1. Please do not post questions asking when 3.1 will be available, no release date has been set.</p>
|
||||
|
||||
<p>For those interested in the development of phpBB should keep an eye on the community forums to see how things are progressing:</p>
|
||||
<p>Those interested in the development of phpBB should keep an eye on the development forums to see how things are progressing:</p>
|
||||
|
||||
<p><a href="http://area51.phpbb.com/phpBB/">http://area51.phpbb.com/phpBB/</a></p>
|
||||
|
||||
<p>Please note that this forum should <strong>NOT</strong> be used to obtain support for or ask questions about phpBB 2.0.x or phpBB 3.0.x, the main community forums are the place for this. Any such posts will be locked and go unanswered.</p>
|
||||
<p>Please note that the development forums should <strong>NOT</strong> be used to seek support for or ask questions about phpBB 2.0.x or phpBB 3.0.x, the main community forums are the place for this. Any such posts will be locked and go unanswered.</p>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -240,20 +250,20 @@
|
||||
|
||||
<div class="content">
|
||||
|
||||
<p>The phpBB Group uses a bug tracking system to store, list and manage all reported bugs, it can be found at the location listed below. Please <strong>DO NOT</strong> post bug reports to our forums, they will be locked. In addition please <strong>DO NOT</strong> use the bug tracker for support requests. Posting such a request will only see you directed to the support forums (while taking time away from working on real bugs).</p>
|
||||
<p>The phpBB Group uses a bug tracking system to store, list and manage all reported bugs, it can be found at the location listed below. Please <strong>DO NOT</strong> post bug reports to our forums. In addition please <strong>DO NOT</strong> use the bug tracker for support requests. Posting such a request will only see you directed to the support forums (while taking time away from working on real bugs).</p>
|
||||
|
||||
<p><a href="http://www.phpbb.com/bugs/">http://www.phpbb.com/bugs/</a></p>
|
||||
<p><a href="http://tracker.phpbb.com/browse/PHPBB3">http://tracker.phpbb.com/browse/PHPBB3</a></p>
|
||||
|
||||
<p>While we very much appreciate receiving bug reports (the more reports the more stable phpBB will be) we ask you carry out a few steps before adding new entries:</p>
|
||||
|
||||
<ul>
|
||||
<li>Firstly determine if your bug is reproduceable, how to determine this depends on the bug in question. Only if the bug is reproduceable it is likely to be a problem with phpBB3 (or in some way connected). If something cannot be reproduced it may turn out to have been your hosting provider working on something, a user doing something silly, etc. Bug reports for non-reproduceable events can slow down our attempts to fix real, reproduceable issues<br /><br /></li>
|
||||
<li>Next please read or search through the existing bug reports to see if <em>your</em> bug (or one very similar to it) is already listed. If it is please add to that existing bug rather than creating a new duplicate entry (all this does is slow us down).<br /><br /></li>
|
||||
<li>Check the forums (use search!) to see if people have discussed anything that sounds similar to what you are seeing. However, as noted above please <strong>DO NOT</strong> post your particular bug to the forum unless it's non-reproduceable or you are sure it's related to something you have done rather phpBB3<br /><br /></li>
|
||||
<li>First, determine if your bug is reproduceable; how to determine this depends on the bug in question. Only if the bug is reproduceable is it likely to be a problem with phpBB3 (or in some way connected). If something cannot be reproduced it may turn out to have been your hosting provider working on something, a user doing something silly, etc. Bug reports for non-reproduceable events can slow down our attempts to fix real, reproduceable issues<br /><br /></li>
|
||||
<li>Next, please read or search through the existing bug reports to see if <em>your</em> bug (or one very similar to it) is already listed. If it is please add to that existing bug rather than creating a new duplicate entry (all this does is slow us down).<br /><br /></li>
|
||||
<li>Check the forums (use search!) to see if people have discussed anything that sounds similar to what you are seeing. However, as noted above please <strong>DO NOT</strong> post your particular bug to the forum unless it's non-reproduceable or you are sure it’s related to something you have done rather than phpBB3<br /><br /></li>
|
||||
<li>If no existing bug exists then please feel free to add it</li>
|
||||
</ul>
|
||||
|
||||
<p>If you do post a new bug (i.e. one that isn't already listed in the bug tracker) firstly make sure you have logged in (your username and password are the same as for the community forums) then please include the following details:</p>
|
||||
<p>If you do post a new bug (i.e. one that isn't already listed in the bug tracker) first make sure that you have logged in (your username and password are the same as for the community forums) then please include the following details:</p>
|
||||
|
||||
<ul>
|
||||
<li>Your server type/version, e.g. Apache 1.3.28, IIS 4, Sambar, etc.</li>
|
||||
@@ -261,9 +271,11 @@
|
||||
<li>DB type/version, e.g. MySQL 4.0.1, PostgreSQL 7.3.2, MSSQL Server 2000 SP1, etc.</li>
|
||||
</ul>
|
||||
|
||||
<p>The relevant database type/version is listed within the administration control panel</p>
|
||||
<p>The relevant database type/version is listed within the administration control panel.</p>
|
||||
|
||||
<p>Please also be as detailed as you can in your report, if possible list the steps required to duplicate the problem. If you have a fix which you are <strong>VERY SURE</strong> works (and is consistent with our <a href="coding-guidelines.html">coding guidelines</a>) and does not introduce further problems or incompatibilities please let us know. However only include it in the bug report if you really must, if we need it we'll ask you for it.</p>
|
||||
<p>Please also be as detailed as you can in your report, if possible list the steps required to duplicate the problem. If you have a patch that fixes the issue, please attach it to the ticket or submit a pull request <a href="https://github.com/phpbb/phpbb3">on GitHub</a>.</p>
|
||||
|
||||
<p>If you create a patch, it is very much appreciated (but not required) if you follow the phpBB coding guidelines. Please note that the coding guidelines are somewhat different between different versions of phpBB. For phpBB 3.0.x the coding guidelines may be found here: <a href="http://area51.phpbb.com/docs/30x/coding-guidelines.html">http://area51.phpbb.com/docs/30x/coding-guidelines.html</a></p>
|
||||
|
||||
<p>Once a bug has been submitted you will be emailed any follow up comments added to it. <strong>Please</strong> if you are requested to supply additional information, do so! It is frustrating for us to receive bug reports, ask for additional information but get nothing. In these cases we have a policy of closing the bug, which may leave a very real problem in place. Obviously we would rather not have this situation arise.</p>
|
||||
|
||||
@@ -289,7 +301,7 @@
|
||||
|
||||
<div class="content">
|
||||
|
||||
<p>This list is not complete but does represent those bugs which may effect users on a wider scale. Other bugs listed in the tracker have typically been shown to be limited to certain setups or methods of installation, updating and/or conversions.</p>
|
||||
<p>This list is not complete but does represent those bugs which may affect users on a wider scale. Other bugs listed in the tracker have typically been shown to be limited to certain setups or methods of installation, updating and/or conversions.</p>
|
||||
|
||||
<ul>
|
||||
<li>Conversions may fail to complete on large boards under some hosts</li>
|
||||
@@ -317,7 +329,7 @@
|
||||
|
||||
<p>Please remember that running any application on a developmental version of PHP can lead to strange/unexpected results which may appear to be bugs in the application (which may not be true). Therefore we recommend you upgrade to the newest stable version of PHP before running phpBB3. If you are running a developmental version of PHP please check any bugs you find on a system running a stable release before submitting.</p>
|
||||
|
||||
<p>This board has been developed and tested under Linux and Windows (amongst others) running Apache using MySQL 3.23, 4.x, 5.x, MSSQL Server 2000, PostgreSQL 7.x, Oracle 8, SQLite and Firebird. Versions of PHP used range from 4.3.3 to 6.0.0-dev without problem. </p>
|
||||
<p>This board has been developed and tested under Linux and Windows (amongst others) running Apache using MySQL 3.23, 4.x, 5.x, MSSQL Server 2000, PostgreSQL 7.x, Oracle 8, SQLite 2 and Firebird. Versions of PHP used range from 4.3.3 to 5.4.x without problem. </p>
|
||||
|
||||
<a name="phpsec"></a><h3>7.i. Notice on PHP security issues</h3>
|
||||
|
||||
@@ -339,7 +351,7 @@
|
||||
|
||||
<div class="content">
|
||||
|
||||
<p>This application is opensource software released under the <a href="http://opensource.org/licenses/gpl-license.php">GPL</a>. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) 2000, 2002, 2005, 2007 <a href="http://www.phpbb.com/">phpBB Group</a>, All Rights Reserved.</p>
|
||||
<p>This application is opensource software released under the <a href="http://opensource.org/licenses/gpl-2.0.php">GNU General Public License v2</a>. Please see source code and the docs directory for more details. This package and its contents are Copyright © <a href="http://www.phpbb.com/">phpBB Group</a>, All Rights Reserved.</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
@@ -8,7 +8,7 @@
|
||||
<meta http-equiv="imagetoolbar" content="no" />
|
||||
<meta name="resource-type" content="document" />
|
||||
<meta name="distribution" content="global" />
|
||||
<meta name="copyright" content="2007 phpBB Group" />
|
||||
<meta name="copyright" content="phpBB Group" />
|
||||
<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>
|
||||
@@ -61,6 +61,9 @@
|
||||
<li><a href="#acl_getf">acl_getf</a></li>
|
||||
<li><a href="#acl_getf_global">acl_getf_global</a></li>
|
||||
<li><a href="#acl_cache">acl_cache</a></li>
|
||||
<li><a href="#acl_clear_prefetch">acl_clear_prefetch</a></li>
|
||||
<li><a href="#acl_get_list">acl_get_list</a></li>
|
||||
<li><a href="#misc">Miscellaneous</a></li>
|
||||
</ol>
|
||||
</li>
|
||||
<li><a href="#admin_related">Admin related functions</a></li>
|
||||
@@ -176,7 +179,7 @@ array(<em>forum_id1</em> => array(<em>option</em> => <em>integer</em>), <e
|
||||
<p>This method is used to find out whether a user has a permission in at least one forum or globally. This method is similar to checking whether <code>acl_getf(option, true)</code> returned one or more forums but it's faster. It should be called in the following way:</p>
|
||||
|
||||
<div class="codebox"><pre>
|
||||
$result = acl_getf_global(<code>option</code>)
|
||||
$result = $auth->acl_getf_global(<code>option</code>)
|
||||
</pre></div>
|
||||
|
||||
<p>As with the previous methods option is a string specifying the permission which has to be checked.</p>
|
||||
@@ -187,6 +190,49 @@ $result = acl_getf_global(<code>option</code>)
|
||||
|
||||
<p>This should be considered a private method and not be called externally. It handles the generation of the user_permissions data from the basic user and group authorisation data. When necessary this method is called automatically by <code>acl</code>.</p>
|
||||
|
||||
<a name="acl_clear_prefetch"></a><h3>2.vii. acl_clear_prefetch</h3>
|
||||
|
||||
<p>This method clears the user_permissions column in the users table for the given user. If the user ID passed is zero, the permissions cache is cleared for all users. This method should be called whenever permissions are set.</p>
|
||||
|
||||
<div class="codebox"><pre>
|
||||
// clear stored permissions for user 2
|
||||
$user_id = 2;
|
||||
$auth->acl_clear_prefetch($user_id);
|
||||
</pre></div>
|
||||
|
||||
<p>This method returns void.</p>
|
||||
|
||||
<a name="acl_get_list"></a><h3>2.viii. acl_get_list</h3>
|
||||
|
||||
<p>This method returns an an array describing which users have permissions in given fora. The resultant array contains an entry for permission that every user has in every forum when no arguments are passed.</p>
|
||||
|
||||
<div class="codebox"><pre>
|
||||
$user_id = array(2, 53);
|
||||
$permissions = array('f_list', 'f_read');
|
||||
$forum_id = array(1, 2, 3);
|
||||
$result = $auth->acl_get_list($user_id, $permissions, $forum_id);
|
||||
</pre></div>
|
||||
|
||||
<p>The parameters may be of the following legal types:</p>
|
||||
<ul>
|
||||
<li><strong>$user_id</strong>: <code>false</code>, int, array(int, int, int, ...)</li>
|
||||
<li><strong>$permissions</strong>: <code>false</code>, string, array(string, string, ...)</li>
|
||||
<li><strong>$forum_id</strong>: <code>false</code>, int, array(int, int, int, ...)</li>
|
||||
</ul>
|
||||
|
||||
<a name="misc"></a><h3>2.ix. Miscellaneous</h3>
|
||||
|
||||
<p>There are other methods defined in the auth class which serve mostly as private methods, but are available for use if needed. Each of them is used to pull data directly from the database tables. They are:</p>
|
||||
<ul>
|
||||
<li><pre>function acl_group_raw_data($group_id = false, $opts = false, $forum_id = false)</pre></li>
|
||||
<li><pre>function acl_user_raw_data($user_id = false, $opts = false, $forum_id = false)</pre></li>
|
||||
<li><pre>function acl_raw_data_single_user($user_id)</pre></li>
|
||||
<li><pre>function acl_raw_data($user_id = false, $opts = false, $forum_id = false)</pre></li>
|
||||
<li><pre>function acl_role_data($user_type, $role_type, $ug_id = false, $forum_id = false)</pre></li>
|
||||
</ul>
|
||||
|
||||
<p>Of these, <code>acl_raw_data</code> is the most general, but the others will be faster if you need a smaller amount of data.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="back2top"><a href="#wrap" class="top">Back to Top</a></div>
|
||||
@@ -229,7 +275,7 @@ $auth_admin = new auth_admin();
|
||||
|
||||
<div class="content">
|
||||
|
||||
<p>This application is opensource software released under the <a href="http://opensource.org/licenses/gpl-license.php">GPL</a>. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) 2000, 2002, 2005, 2007 <a href="http://www.phpbb.com/">phpBB Group</a>, All Rights Reserved.</p>
|
||||
<p>This application is opensource software released under the <a href="http://opensource.org/licenses/gpl-2.0.php">GNU General Public License v2</a>. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) <a href="http://www.phpbb.com/">phpBB Group</a>, All Rights Reserved.</p>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -241,7 +287,7 @@ $auth_admin = new auth_admin();
|
||||
<!-- END DOCUMENT -->
|
||||
|
||||
<div id="page-footer">
|
||||
<div class="version"> $Id$ </div>
|
||||
<div class="version"> </div>
|
||||
</div>
|
||||
</div></div>
|
||||
|
||||
|
@@ -8,7 +8,7 @@
|
||||
<meta http-equiv="imagetoolbar" content="no" />
|
||||
<meta name="resource-type" content="document" />
|
||||
<meta name="distribution" content="global" />
|
||||
<meta name="copyright" content="2007 phpBB Group" />
|
||||
<meta name="copyright" content="phpBB Group" />
|
||||
<meta name="keywords" content="" />
|
||||
<meta name="description" content="Olympus coding guidelines document" />
|
||||
<title>phpBB3 • Coding Guidelines</title>
|
||||
@@ -87,13 +87,6 @@
|
||||
<li><a href="#writingstyle">Writing Style</a></li>
|
||||
</ol>
|
||||
</li>
|
||||
<li><a href="#vcs">VCS Guidelines</a>
|
||||
<ol style="list-style-type: lower-roman;">
|
||||
<li><a href="#repostruct">Repository structure</a></li>
|
||||
<li><a href="#commitmessage">Commit messages</a></li>
|
||||
</ol>
|
||||
</li>
|
||||
<li><a href="#changes">Guidelines Changelog</a></li>
|
||||
<li><a href="#disclaimer">Copyright and disclaimer</a></li>
|
||||
</ol>
|
||||
|
||||
@@ -136,9 +129,8 @@
|
||||
/**
|
||||
*
|
||||
* @package {PACKAGENAME}
|
||||
* @version $Id: $
|
||||
* @copyright (c) 2007 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
</pre></div>
|
||||
@@ -241,6 +233,11 @@ PHPBB_ACM_MEMCACHE_PORT (overwrite memcached port, default is 11211)
|
||||
PHPBB_ACM_MEMCACHE_COMPRESS (overwrite memcached compress setting, default is disabled)
|
||||
PHPBB_ACM_MEMCACHE_HOST (overwrite memcached host name, default is localhost)
|
||||
|
||||
PHPBB_ACM_REDIS_HOST (overwrite redis host name, default is localhost)
|
||||
PHPBB_ACM_REDIS_PORT (overwrite redis port, default is 6379)
|
||||
PHPBB_ACM_REDIS_PASSWORD (overwrite redis password, default is empty)
|
||||
PHPBB_ACM_REDIS_DB (overwrite redis default database)
|
||||
|
||||
PHPBB_QA (Set board to QA-Mode, which means the updater also checks for RC-releases)
|
||||
</pre></div>
|
||||
|
||||
@@ -288,7 +285,7 @@ PHPBB_QA (Set board to QA-Mode, which means the updater also c
|
||||
|
||||
<div class="content">
|
||||
|
||||
<p>Please note that these Guidelines applies to all php, html, javascript and css files.</p>
|
||||
<p>Please note that these guidelines apply to all php, html, javascript and css files.</p>
|
||||
|
||||
<a name="namingvars"></a><h3>2.i. Variable/Function Naming</h3>
|
||||
|
||||
@@ -464,12 +461,12 @@ do_stuff($str);
|
||||
$post_url = $phpbb_root_path . 'posting.' . $phpEx . '?mode=' . $mode . '&amp;start=' . $start;
|
||||
</pre></div>
|
||||
|
||||
<p class="good">// Double quotes are sometimes needed to not overcroud the line with concentinations</p>
|
||||
<p class="good">// Double quotes are sometimes needed to not overcrowd the line with concatenations.</p>
|
||||
<div class="codebox"><pre>
|
||||
$post_url = "{$phpbb_root_path}posting.$phpEx?mode=$mode&amp;start=$start";
|
||||
</pre></div>
|
||||
|
||||
<p>In SQL Statements mixing single and double quotes is partly allowed (following the guidelines listed here about SQL Formatting), else it should be tryed to only use one method - mostly single quotes.</p>
|
||||
<p>In SQL statements mixing single and double quotes is partly allowed (following the guidelines listed here about SQL formatting), else one should try to only use one method - mostly single quotes.</p>
|
||||
|
||||
<h4>Associative array keys:</h4>
|
||||
<p>In PHP, it's legal to use a literal string as a key to an associative array without quoting that string. We don't want to do this -- the string should always be quoted to avoid confusion. Note that this is only when we're using a literal, not when we're using a variable, examples:</p>
|
||||
@@ -498,7 +495,7 @@ $foo = $assoc_array[$var];
|
||||
<p>Each complex function should be preceded by a comment that tells a programmer everything they need to know to use that function. The meaning of every parameter, the expected input, and the output are required as a minimal comment. The function's behaviour in error conditions (and what those error conditions are) should also be present - but mostly included within the comment about the output.<br /><br />Especially important to document are any assumptions the code makes, or preconditions for its proper operation. Any one of the developers should be able to look at any part of the application and figure out what's going on in a reasonable amount of time.<br /><br />Avoid using <code>/* */</code> comment blocks for one-line comments, <code>//</code> should be used for one/two-liners.</p>
|
||||
|
||||
<h4>Magic numbers:</h4>
|
||||
<p>Don't use them. Use named constants for any literal value other than obvious special cases. Basically, it's ok to check if an array has 0 elements by using the literal 0. It's not ok to assign some special meaning to a number and then use it everywhere as a literal. This hurts readability AND maintainability. The constants <code>true</code> and <code>false</code> should be used in place of the literals 1 and 0 -- even though they have the same values (but not type!), it's more obvious what the actual logic is when you use the named constants. Typecast variables where it is needed, do not rely on the correct variable type (PHP is currently very loose on typecasting which can lead to security problems if a developer does not have a very close eye to it).</p>
|
||||
<p>Don't use them. Use named constants for any literal value other than obvious special cases. Basically, it's ok to check if an array has 0 elements by using the literal 0. It's not ok to assign some special meaning to a number and then use it everywhere as a literal. This hurts readability AND maintainability. The constants <code>true</code> and <code>false</code> should be used in place of the literals 1 and 0 -- even though they have the same values (but not type!), it's more obvious what the actual logic is when you use the named constants. Typecast variables where it is needed, do not rely on the correct variable type (PHP is currently very loose on typecasting which can lead to security problems if a developer does not keep a very close eye on it).</p>
|
||||
|
||||
<h4>Shortcut operators:</h4>
|
||||
<p>The only shortcut operators that cause readability problems are the shortcut increment <code>$i++</code> and decrement <code>$j--</code> operators. These operators should not be used as part of an expression. They can, however, be used on their own line. Using them in expressions is just not worth the headaches when debugging, examples:</p>
|
||||
@@ -667,7 +664,7 @@ $sql = 'SELECT *
|
||||
</pre></div>
|
||||
|
||||
<h4>SQL Quotes: </h4>
|
||||
<p>Double quotes where applicable (The variables in these examples are typecasted to integers before) ... examples: </p>
|
||||
<p>Use double quotes where applicable. (The variables in these examples are typecasted to integers beforehand.) Examples: </p>
|
||||
|
||||
<p class="bad">// These are wrong.</p>
|
||||
<div class="codebox"><pre>
|
||||
@@ -828,7 +825,7 @@ SELECT FROM phpbb_forums WHERE forum_id <strong><></strong> 1
|
||||
|
||||
<h4>sql_build_query():</h4>
|
||||
|
||||
<p>The <code>$db->sql_build_query()</code> function is responsible for building sql statements for select and select distinct queries if you need to JOIN on more than one table or retrieving data from more than one table while doing a JOIN. This needs to be used to make sure the resulting statement is working on all supported db's. Instead of explaining every possible combination, i will give a short example:</p>
|
||||
<p>The <code>$db->sql_build_query()</code> function is responsible for building sql statements for SELECT and SELECT DISTINCT queries if you need to JOIN on more than one table or retrieve data from more than one table while doing a JOIN. This needs to be used to make sure the resulting statement is working on all supported db's. Instead of explaining every possible combination, I will give a short example:</p>
|
||||
|
||||
<div class="codebox"><pre>
|
||||
$sql_array = array(
|
||||
@@ -913,7 +910,7 @@ for ($i = 0, $size = sizeof($post_data); $i < $size; $i++)
|
||||
</pre></div>
|
||||
|
||||
<h4>Use of in_array(): </h4>
|
||||
<p>Try to avoid using in_array() on huge arrays, and try to not place them into loops if the array to check consist of more than 20 entries. in_array() can be very time consuming and uses a lot of cpu processing time. For little checks it is not noticable, but if checked against a huge array within a loop those checks alone can be a bunch of seconds. If you need this functionality, try using isset() on the arrays keys instead, actually shifting the values into keys and vice versa. A call to <code>isset($array[$var])</code> is a lot faster than <code>in_array($var, array_keys($array))</code> for example.</p>
|
||||
<p>Try to avoid using in_array() on huge arrays, and try to not place them into loops if the array to check consist of more than 20 entries. in_array() can be very time consuming and uses a lot of cpu processing time. For little checks it is not noticeable, but if checked against a huge array within a loop those checks alone can take several seconds. If you need this functionality, try using isset() on the arrays keys instead, actually shifting the values into keys and vice versa. A call to <code>isset($array[$var])</code> is a lot faster than <code>in_array($var, array_keys($array))</code> for example.</p>
|
||||
|
||||
|
||||
<a name="general"></a><h3>2.v. General Guidelines</h3>
|
||||
@@ -926,7 +923,7 @@ for ($i = 0, $size = sizeof($post_data); $i < $size; $i++)
|
||||
<p>No attempt should be made to remove any copyright information (either contained within the source or displayed interactively when the source is run/compiled), neither should the copyright information be altered in any way (it may be added to).</p>
|
||||
|
||||
<h4>Variables: </h4>
|
||||
<p>Make use of the <code>request_var()</code> function for anything except for submit or single checking params. </p>
|
||||
<p>Make use of the <code>request_var()</code> function for anything except for submit or single checking params.</p>
|
||||
<p>The request_var function determines the type to set from the second parameter (which determines the default value too). If you need to get a scalar variable type, you need to tell this the request_var function explicitly. Examples:</p>
|
||||
|
||||
<p class="bad">// Old method, do not use it</p>
|
||||
@@ -993,7 +990,7 @@ $user->setup();
|
||||
<p>The <code>$user->setup()</code> call can be used to pass on additional language definition and a custom style (used in viewforum).</p>
|
||||
|
||||
<h4>Errors and messages: </h4>
|
||||
<p>All messages/errors should be outputed by calling <code>trigger_error()</code> using the appropriate message type and language string. Example:</p>
|
||||
<p>All messages/errors should be outputted by calling <code>trigger_error()</code> using the appropriate message type and language string. Example:</p>
|
||||
|
||||
<div class="codebox"><pre>
|
||||
trigger_error('NO_FORUM');
|
||||
@@ -1011,7 +1008,7 @@ trigger_error('NO_MODE', E_USER_ERROR);
|
||||
|
||||
<p>All urls pointing to internal files need to be prepended by the <code>$phpbb_root_path</code> variable. Within the administration control panel all urls pointing to internal files need to be prepended by the <code>$phpbb_admin_path</code> variable. This makes sure the path is always correct and users being able to just rename the admin folder and the acp still working as intended (though some links will fail and the code need to be slightly adjusted).</p>
|
||||
|
||||
<p>The <code>append_sid()</code> function from 2.0.x is available too, though does not handle url alterations automatically. Please have a look at the code documentation if you want to get more details on how to use append_sid(). A sample call to append_sid() can look like this:</p>
|
||||
<p>The <code>append_sid()</code> function from 2.0.x is available too, though it does not handle url alterations automatically. Please have a look at the code documentation if you want to get more details on how to use append_sid(). A sample call to append_sid() can look like this:</p>
|
||||
|
||||
<div class="codebox"><pre>
|
||||
append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;g=' . $row['group_id'])
|
||||
@@ -1019,7 +1016,7 @@ append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;
|
||||
|
||||
<h4>General function usage: </h4>
|
||||
|
||||
<p>Some of these functions are only chosen over others because of personal preference and having no other benefit than to be consistant over the code.</p>
|
||||
<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>
|
||||
@@ -1069,7 +1066,7 @@ append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;
|
||||
required_imageset = prosilver
|
||||
</pre></div>
|
||||
<a name="genstyling"></a><h3>3.2. General Styling Rules</h3>
|
||||
<p>Templates should be produced in a consistent manner. Where appropriate they should be based off an existing copy, e.g. index, viewforum or viewtopic (the combination of which implement a range of conditional and variable forms). Please also note that the intendation and coding guidelines also apply to templates where possible.</p>
|
||||
<p>Templates should be produced in a consistent manner. Where appropriate they should be based off an existing copy, e.g. index, viewforum or viewtopic (the combination of which implement a range of conditional and variable forms). Please also note that the indentation and coding guidelines also apply to templates where possible.</p>
|
||||
|
||||
<p>The outer table class <code>forumline</code> has gone and is replaced with <code>tablebg</code>.</p>
|
||||
<p>When writing <code><table></code> the order <code><table class="" cellspacing="" cellpadding="" border="" align=""></code> creates consistency and allows everyone to easily see which table produces which "look". The same applies to most other tags for which additional parameters can be set, consistency is the major aim here.</p>
|
||||
@@ -1089,7 +1086,7 @@ append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;
|
||||
|
||||
<p>Row colours/classes are now defined by the template, use an <code>IF S_ROW_COUNT</code> switch, see viewtopic or viewforum for an example.</p>
|
||||
|
||||
<p>Remember block level ordering is important ... while not all pages validate as XHTML 1.0 Strict compliant it is something we're trying to work too.</p>
|
||||
<p>Remember block level ordering is important ... while not all pages validate as XHTML 1.0 Strict compliant it is something we're trying to work on.</p>
|
||||
|
||||
<p>Use a standard cellpadding of 2 and cellspacing of 0 on outer tables. Inner tables can vary from 0 to 3 or even 4 depending on the need.</p>
|
||||
|
||||
@@ -1138,12 +1135,12 @@ append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;
|
||||
<a name="templates"></a><h3>4.i. General Templating</h3>
|
||||
|
||||
<h4>File naming</h4>
|
||||
<p>Firstly templates now take the suffix ".html" rather than ".tpl". This was done simply to make the lifes of some people easier wrt syntax highlighting, etc.</p>
|
||||
<p>Firstly templates now take the suffix ".html" rather than ".tpl". This was done simply to make the lives of some people easier wrt syntax highlighting, etc.</p>
|
||||
|
||||
<h4>Variables</h4>
|
||||
<p>All template variables should be named appropriately (using underscores for spaces), language entries should be prefixed with L_, system data with S_, urls with U_, javascript urls with UA_, language to be put in javascript statements with LA_, all other variables should be presented 'as is'.</p>
|
||||
|
||||
<p>L_* template variables are automatically tried to be mapped to the corresponding language entry if the code does not set (and therefore overwrite) this variable specifically. For example <code>{L_USERNAME}</code> maps to <code>$user->lang['USERNAME']</code>. The LA_* template variables are handled within the same way, but properly escaped to be put in javascript code. This should reduce the need to assign loads of new lang vars in Modifications.
|
||||
<p>L_* template variables are automatically mapped to the corresponding language entry if the code does not set (and therefore overwrite) this variable specifically and if the language entry exists. For example <code>{L_USERNAME}</code> maps to <code>$user->lang['USERNAME']</code>. The LA_* template variables are handled within the same way, but properly escaped so they can be put in javascript code. This should reduce the need to assign loads of new language variables in MODifications.
|
||||
</p>
|
||||
|
||||
<h4>Blocks/Loops</h4>
|
||||
@@ -1426,9 +1423,9 @@ div
|
||||
<span class="comment"><!-- END l_block1 --></span>
|
||||
</pre></div>
|
||||
|
||||
<p>Here we open the loop l_block1 and doing some things if the value S_SELECTED within the current loop iteration is true, else we write the blocks link and title. Here, you see <code>{l_block1.L_TITLE}</code> referenced - you remember that L_* variables get automatically assigned the corresponding language entry? This is true, but not within loops. The L_TITLE variable within the loop l_block1 is assigned within the code itself.</p>
|
||||
<p>Here we open the loop l_block1 and do some things if the value S_SELECTED within the current loop iteration is true, else we write the blocks link and title. Here, you see <code>{l_block1.L_TITLE}</code> referenced - you remember that L_* variables get automatically assigned the corresponding language entry? This is true, but not within loops. The L_TITLE variable within the loop l_block1 is assigned within the code itself.</p>
|
||||
|
||||
<p>Let's have a closer look to the markup:</p>
|
||||
<p>Let's have a closer look at the markup:</p>
|
||||
|
||||
<div class="codebox"><pre>
|
||||
<span class="comment"><!-- BEGIN l_block1 --></span>
|
||||
@@ -1522,7 +1519,7 @@ div
|
||||
</ul> <span class="comment"><!-- written on third iteration --></span>
|
||||
</pre></div>
|
||||
|
||||
<p>Just always remember that processing is taking place from up to down.</p>
|
||||
<p>Just always remember that processing is taking place from top to bottom.</p>
|
||||
|
||||
<h4>Forms</h4>
|
||||
<p>If a form is used for a non-trivial operation (i.e. more than a jumpbox), then it should include the <code>{S_FORM_TOKEN}</code> template variable.</p>
|
||||
@@ -1538,11 +1535,9 @@ div
|
||||
</pre></div><br />
|
||||
|
||||
<a name="inheritance"></a><h3>4.ii. Template Inheritance</h3>
|
||||
<p>When basing a new template on an existing one, it is not necessary to provide all template files. By declaring the template to be "<strong>inheriting</strong>" in the template configuration file.</p>
|
||||
<p>When basing a new style on an existing one, it is not necessary to provide all the template files. By declaring the base style name in the <strong>inherit_from</strong> field in the template configuration file, the style can be set to inherit template files from the base style. The limitation on this is that the base style has to be installed and complete, meaning that it is not itself inheriting.</p>
|
||||
|
||||
<p>The limitation on this is that the base style has to be installed and complete, meaning that it is not itself inheriting.</p>
|
||||
|
||||
<p>The effect of doing so is that the template engine will use the files in the new template where they exist, but fall back to files in the base template otherwise. Declaring a style to be inheriting also causes it to use some of the configuration settings of the base style, notably database storage.</p>
|
||||
<p>The effect of doing so is that the template engine will use the template files in the new style where they exist, but fall back to files in the base style otherwise. Declaring a style to inherit from another also causes it to use some of the configuration settings of the base style, notably database storage.</p>
|
||||
|
||||
<p>We strongly encourage the use of inheritance for styles based on the bundled styles, as it will ease the update procedure.</p>
|
||||
|
||||
@@ -1669,7 +1664,7 @@ if (utf8_case_fold_nfc($string1) == utf8_case_fold_nfc($string2))
|
||||
|
||||
<h4>Encoding:</h4>
|
||||
|
||||
<p>With phpBB3, the output encoding for the forum in now UTF-8, a Universal Character Encoding by the Unicode Consortium that is by design a superset to US-ASCII and ISO-8859-1. By using one character set which simultaenously supports all scripts which previously would have required different encodings (eg: ISO-8859-1 to ISO-8859-15 (Latin, Greek, Cyrillic, Thai, Hebrew, Arabic); GB2312 (Simplified Chinese); Big5 (Traditional Chinese), EUC-JP (Japanese), EUC-KR (Korean), VISCII (Vietnamese); et cetera), this removes the need to convert between encodings and improves the accessibility of multilingual forums.</p>
|
||||
<p>With phpBB3, the output encoding for the forum in now UTF-8, a Universal Character Encoding by the Unicode Consortium that is by design a superset to US-ASCII and ISO-8859-1. By using one character set which simultaenously supports all scripts which previously would have required different encodings (eg: ISO-8859-1 to ISO-8859-15 (Latin, Greek, Cyrillic, Thai, Hebrew, Arabic); GB2312 (Simplified Chinese); Big5 (Traditional Chinese), EUC-JP (Japanese), EUC-KR (Korean), VISCII (Vietnamese); et cetera), we remove the need to convert between encodings and improves the accessibility of multilingual forums.</p>
|
||||
|
||||
<p>The impact is that the language files for phpBB must now also be encoded as UTF-8, with a caveat that the files must <strong>not contain</strong> a <acronym title="Byte-Order-Mark">BOM</acronym> for compatibility reasons with non-Unicode aware versions of PHP. For those with forums using the Latin character set (ie: most European languages), this change is transparent since UTF-8 is superset to US-ASCII and ISO-8859-1.</p>
|
||||
|
||||
@@ -2319,151 +2314,14 @@ if (utf8_case_fold_nfc($string1) == utf8_case_fold_nfc($string2))
|
||||
|
||||
<hr />
|
||||
|
||||
<a name="vcs"></a><h2>7. VCS Guidelines</h2>
|
||||
<a name="disclaimer"></a><h2>8. Copyright and disclaimer</h2>
|
||||
|
||||
<div class="paragraph">
|
||||
<div class="inner"><span class="corners-top"><span></span></span>
|
||||
|
||||
<div class="content">
|
||||
|
||||
<p>The version control system for phpBB3 is subversion. The repository is available at <a href="http://code.phpbb.com/svn/phpbb" title="repository">http://code.phpbb.com/svn/phpbb</a>.</p>
|
||||
|
||||
<a name="repostruct"></a><h3>7.i. Repository Structure</h3>
|
||||
|
||||
<ul>
|
||||
<li><strong>trunk</strong><br />The latest unstable development version with new features etc. Contains the actual board in <code>/trunk/phpBB</code></li>
|
||||
<li><strong>branches</strong><br />Development branches of stable phpBB releases. Copied from <code>/trunk</code> at the time of release.
|
||||
<ul>
|
||||
<li><strong>phpBB3.0</strong><code>/branches/phpBB-3_0_0/phpBB</code><br />Development branch of the stable 3.0 line. Bug fixes are applied here.</li>
|
||||
<li><strong>phpBB2</strong><code>/branches/phpBB-2_0_0/phpBB</code><br />Old phpBB2 development branch.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>tags</strong><br />Released versions. Copies of trunk or the respective branch, made at the time of release.
|
||||
<ul>
|
||||
<li><code>/tags/release_3_0_BX</code><br />Beta release X of the 3.0 line.</li>
|
||||
<li><code>/tags/release_3_0_RCX</code><br />Release candidate X of the 3.0 line.</li>
|
||||
<li><code>/tags/release_3_0_X-RCY</code><br />Release candidate Y of the stable 3.0.X release.</li>
|
||||
<li><code>/tags/release_3_0_X</code><br />Stable <strong>3.0.X</strong> release.</li>
|
||||
<li><code>/tags/release_2_0_X</code><br />Old stable 2.0.X release.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<a name="commitmessage"></a><h3>7.ii. Commit Messages</h3>
|
||||
|
||||
<p>The commit message should contain a brief explanation of all changes made within the commit. Often identical to the changelog entry. A bug ticket can be referenced by specifying the ticket ID with a hash, e.g. #12345. A reference to another revision should simply be prefixed with r, e.g. r12345.</p>
|
||||
|
||||
<p>Junior Developers need to have their patches approved by a development team member first. The commit message must end in a line with the following format:</p>
|
||||
|
||||
<div class="codebox"><pre>
|
||||
Authorised by: developer1[, developer2[, ...]]
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="back2top"><a href="#wrap" class="top">Back to Top</a></div>
|
||||
|
||||
<span class="corners-bottom"><span></span></span></div>
|
||||
</div>
|
||||
|
||||
<hr />
|
||||
|
||||
<a name="changes"></a><h2>8. Guidelines Changelog</h2>
|
||||
<div class="paragraph">
|
||||
<div class="inner"><span class="corners-top"><span></span></span>
|
||||
|
||||
<div class="content">
|
||||
<h3>Revision 10007</h3>
|
||||
|
||||
<ul>
|
||||
<li>Added <a href="#constants">Special Constants</a> section.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Revision 9817</h3>
|
||||
|
||||
<ul>
|
||||
<li>Added VCS section.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Revision 8732</h3>
|
||||
|
||||
<ul>
|
||||
<li>Added cfg files.</li>
|
||||
<li>Added template <a href="#inheritance">inheritance</a>.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Revision 8596+</h3>
|
||||
|
||||
<ul>
|
||||
<li>Removed sql_build_array('MULTI_INSERT'... statements.</li>
|
||||
<li>Added sql_multi_insert() explanation.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Revision 1.31</h3>
|
||||
|
||||
<ul>
|
||||
<li>Added add_form_key and check_form_key. </li>
|
||||
</ul>
|
||||
|
||||
<h3>Revision 1.24</h3>
|
||||
|
||||
<ul>
|
||||
<li>Added <a href="#translation">5. Character Sets and Encodings</a> section to explain the recommended treatment of strings in phpBB.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Revision 1.16</h3>
|
||||
|
||||
<ul>
|
||||
<li>Added <a href="#translation">6. Translation (<abbr title="Internationalisation">i18n</abbr>/<abbr title="Localisation">L10n</abbr>) Guidelines</a> section to explain expected format and authoring considerations for language packs that are to be created for phpBB.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Revision 1.11-1.15</h3>
|
||||
|
||||
<ul>
|
||||
<li>Various document formatting, spelling, punctuation, grammar bugs.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Revision 1.9-1.10</h3>
|
||||
|
||||
<ul>
|
||||
<li>Added sql_query_limit to <a href="#sql">2.iii. SQL/SQL Layout</a>.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Revision 1.8</h3>
|
||||
|
||||
<ul>
|
||||
<li>Some adjustements to wordings</li>
|
||||
<li>Updated paragraph <a href="#locations">1.iii. File Locations</a> to reflect recent changes</li>
|
||||
<li>Extended paragraph <a href="#codelayout">2.ii. Code Layout</a>.</li>
|
||||
<li>Added sql_in_set and sql_build_query explanation to <a href="#sql">2.iii. SQL/SQL Layout</a>.</li>
|
||||
<li>Updated paragraph <a href="#styling">3. Styling</a>.</li>
|
||||
<li>Updated paragraph <a href="#templating">4. Templating</a> to explain loop checking, loop breaking and other changes we recently made.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Revision 1.5</h3>
|
||||
|
||||
<ul>
|
||||
<li>Changed General function usage paragraph in <a href="#general">2.v. General Guidelines</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="back2top"><a href="#wrap" class="top">Back to Top</a></div>
|
||||
|
||||
<span class="corners-bottom"><span></span></span></div>
|
||||
</div>
|
||||
|
||||
<hr />
|
||||
|
||||
<a name="disclaimer"></a><h2>9. Copyright and disclaimer</h2>
|
||||
|
||||
<div class="paragraph">
|
||||
<div class="inner"><span class="corners-top"><span></span></span>
|
||||
|
||||
<div class="content">
|
||||
|
||||
<p>This application is opensource software released under the <a href="http://opensource.org/licenses/gpl-license.php">GPL</a>. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) 2000, 2002, 2005, 2007 <a href="http://www.phpbb.com/">phpBB Group</a>, All Rights Reserved.</p>
|
||||
<p>This application is opensource software released under the <a href="http://opensource.org/licenses/gpl-2.0.php">GNU General Public License v2</a>. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) <a href="http://www.phpbb.com/">phpBB Group</a>, All Rights Reserved.</p>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -2475,7 +2333,7 @@ Authorised by: developer1[, developer2[, ...]]
|
||||
<!-- END DOCUMENT -->
|
||||
|
||||
<div id="page-footer">
|
||||
<div class="version"> $Id$ </div>
|
||||
<div class="version"> </div>
|
||||
</div>
|
||||
</div></div>
|
||||
|
||||
|
@@ -8,7 +8,7 @@
|
||||
<meta http-equiv="imagetoolbar" content="no" />
|
||||
<meta name="resource-type" content="document" />
|
||||
<meta name="distribution" content="global" />
|
||||
<meta name="copyright" content="2007 phpBB Group" />
|
||||
<meta name="copyright" content="phpBB Group" />
|
||||
<meta name="keywords" content="" />
|
||||
<meta name="description" content="Hook System explanation" />
|
||||
<title>phpBB3 • Hook System</title>
|
||||
@@ -380,6 +380,8 @@ a:active { color: #368AD2; }
|
||||
<code>$template->display($handle, $include_once = true);</code> which is called directly before outputting the (not-yet-compiled) template.<br />
|
||||
<code>exit_handler();</code> which is called at the very end of phpBB3's execution.</p>
|
||||
|
||||
<p>Please note: The <code>$template->display</code> hook takes a third <code>$template</code> argument, which is the template instance being used, which should be used instead of the global.</p>
|
||||
|
||||
<p>There are also valid external constants you may want to use if you embed phpBB3 into your application:</p>
|
||||
|
||||
<div class="codebox"><pre>
|
||||
@@ -865,7 +867,7 @@ function phpbb_hook_register(&$hook)
|
||||
|
||||
<div class="content">
|
||||
|
||||
<p>This application is opensource software released under the <a href="http://opensource.org/licenses/gpl-license.php">GPL</a>. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) 2000, 2002, 2005, 2007 <a href="http://www.phpbb.com/">phpBB Group</a>, All Rights Reserved.</p>
|
||||
<p>This application is opensource software released under the <a href="http://opensource.org/licenses/gpl-2.0.php">GNU General Public License v2</a>. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) <a href="http://www.phpbb.com/">phpBB Group</a>, All Rights Reserved.</p>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -875,7 +877,7 @@ function phpbb_hook_register(&$hook)
|
||||
</div>
|
||||
|
||||
<div id="page-footer">
|
||||
<div class="version">$Id$</div>
|
||||
<div class="version"> </div>
|
||||
</div>
|
||||
</div></div>
|
||||
|
||||
|
60
phpBB/docs/lighttpd.sample.conf
Normal file
60
phpBB/docs/lighttpd.sample.conf
Normal file
@@ -0,0 +1,60 @@
|
||||
# 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
|
||||
|
||||
# Load moules
|
||||
server.modules += (
|
||||
"mod_access",
|
||||
"mod_fastcgi",
|
||||
"mod_accesslog"
|
||||
)
|
||||
|
||||
# If you have domains with and without www prefix,
|
||||
# redirect one to the other.
|
||||
$HTTP["host"] =~ "^(myforums\.com)$" {
|
||||
url.redirect = (
|
||||
".*" => "http://www.%1$0"
|
||||
)
|
||||
}
|
||||
|
||||
$HTTP["host"] == "www.myforums.com" {
|
||||
server.name = "www.myforums.com"
|
||||
server.document-root = "/path/to/phpbb"
|
||||
server.dir-listing = "disable"
|
||||
|
||||
index-file.names = ( "index.php", "index.htm", "index.html" )
|
||||
accesslog.filename = "/var/log/lighttpd/access-www.myforums.com.log"
|
||||
|
||||
# Deny access to internal phpbb files.
|
||||
$HTTP["url"] =~ "^/(config\.php|common\.php|includes|cache|files|store|images/avatars/upload)" {
|
||||
url.access-deny = ( "" )
|
||||
}
|
||||
|
||||
# Deny access to version control system directories.
|
||||
$HTTP["url"] =~ "/\.svn|/\.git" {
|
||||
url.access-deny = ( "" )
|
||||
}
|
||||
|
||||
# Deny access to apache configuration files.
|
||||
$HTTP["url"] =~ "/\.htaccess|/\.htpasswd|/\.htgroups" {
|
||||
url.access-deny = ( "" )
|
||||
}
|
||||
|
||||
fastcgi.server = ( ".php" =>
|
||||
((
|
||||
"bin-path" => "/usr/bin/php-cgi",
|
||||
"socket" => "/tmp/php.socket",
|
||||
"max-procs" => 4,
|
||||
"idle-timeout" => 30,
|
||||
"bin-environment" => (
|
||||
"PHP_FCGI_CHILDREN" => "10",
|
||||
"PHP_FCGI_MAX_REQUESTS" => "10000"
|
||||
),
|
||||
"bin-copy-environment" => (
|
||||
"PATH", "SHELL", "USER"
|
||||
),
|
||||
"broken-scriptfilename" => "enable"
|
||||
))
|
||||
)
|
||||
}
|
89
phpBB/docs/nginx.sample.conf
Normal file
89
phpBB/docs/nginx.sample.conf
Normal file
@@ -0,0 +1,89 @@
|
||||
# Sample nginx configuration file for phpBB.
|
||||
# Global settings have been removed, copy them
|
||||
# from your system's nginx.conf.
|
||||
# Tested with nginx 0.8.35.
|
||||
|
||||
http {
|
||||
# Compression - requires gzip and gzip static modules.
|
||||
gzip on;
|
||||
gzip_static on;
|
||||
gzip_vary on;
|
||||
gzip_http_version 1.1;
|
||||
gzip_min_length 700;
|
||||
|
||||
# Compression levels over 6 do not give an appreciable improvement
|
||||
# in compression ratio, but take more resources.
|
||||
gzip_comp_level 6;
|
||||
|
||||
# IE 6 and lower do not support gzip with Vary correctly.
|
||||
gzip_disable "msie6";
|
||||
# Before nginx 0.7.63:
|
||||
#gzip_disable "MSIE [1-6]\.";
|
||||
|
||||
# Catch-all server for requests to invalid hosts.
|
||||
# Also catches vulnerability scanners probing IP addresses.
|
||||
server {
|
||||
# default specifies that this block is to be used when
|
||||
# no other block matches.
|
||||
listen 80 default;
|
||||
|
||||
server_name bogus;
|
||||
return 444;
|
||||
root /var/empty;
|
||||
}
|
||||
|
||||
# If you have domains with and without www prefix,
|
||||
# redirect one to the other.
|
||||
server {
|
||||
# Default port is 80.
|
||||
#listen 80;
|
||||
|
||||
server_name myforums.com;
|
||||
|
||||
# A trick from http://wiki.nginx.org/Pitfalls#Taxing_Rewrites:
|
||||
rewrite ^ http://www.myforums.com$request_uri permanent;
|
||||
# Equivalent to:
|
||||
#rewrite ^(.*)$ http://www.myforums.com$1 permanent;
|
||||
}
|
||||
|
||||
# The actual board domain.
|
||||
server {
|
||||
#listen 80;
|
||||
server_name www.myforums.com;
|
||||
|
||||
root /path/to/phpbb;
|
||||
|
||||
location / {
|
||||
# phpbb uses index.htm
|
||||
index index.php index.html index.htm;
|
||||
}
|
||||
|
||||
# Deny access to internal phpbb files.
|
||||
location ~ /(config\.php|common\.php|includes|cache|files|store|images/avatars/upload) {
|
||||
deny all;
|
||||
# deny was ignored before 0.8.40 for connections over IPv6.
|
||||
# Use internal directive to prohibit access on older versions.
|
||||
internal;
|
||||
}
|
||||
|
||||
# Pass the php scripts to fastcgi server specified in upstream declaration.
|
||||
location ~ \.php$ {
|
||||
fastcgi_pass php;
|
||||
# Necessary for php.
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
# Unmodified fastcgi_params from nginx distribution.
|
||||
include fastcgi_params;
|
||||
}
|
||||
|
||||
# Deny access to version control system directories.
|
||||
location ~ /\.svn|/\.git {
|
||||
deny all;
|
||||
internal;
|
||||
}
|
||||
}
|
||||
|
||||
# If running php as fastcgi, specify php upstream.
|
||||
upstream php {
|
||||
server unix:/tmp/php.sock;
|
||||
}
|
||||
}
|
@@ -31,6 +31,7 @@ else if (isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'
|
||||
|
||||
if (isset($_GET['avatar']))
|
||||
{
|
||||
require($phpbb_root_path . 'includes/startup.' . $phpEx);
|
||||
require($phpbb_root_path . 'config.' . $phpEx);
|
||||
|
||||
if (!defined('PHPBB_INSTALLED') || empty($dbms) || empty($acm_type))
|
||||
@@ -42,6 +43,7 @@ if (isset($_GET['avatar']))
|
||||
require($phpbb_root_path . 'includes/cache.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/db/' . $dbms . '.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/constants.' . $phpEx);
|
||||
require($phpbb_root_path . 'includes/functions.' . $phpEx);
|
||||
|
||||
$db = new $sql_db();
|
||||
$cache = new cache();
|
||||
@@ -57,11 +59,11 @@ if (isset($_GET['avatar']))
|
||||
$browser = (!empty($_SERVER['HTTP_USER_AGENT'])) ? htmlspecialchars((string) $_SERVER['HTTP_USER_AGENT']) : 'msie 6.0';
|
||||
|
||||
$config = $cache->obtain_config();
|
||||
$filename = $_GET['avatar'];
|
||||
$filename = request_var('avatar', '');
|
||||
$avatar_group = false;
|
||||
$exit = false;
|
||||
|
||||
if ($filename[0] === 'g')
|
||||
if (isset($filename[0]) && $filename[0] === 'g')
|
||||
{
|
||||
$avatar_group = true;
|
||||
$filename = substr($filename, 1);
|
||||
@@ -70,7 +72,7 @@ if (isset($_GET['avatar']))
|
||||
// '==' is not a bug - . as the first char is as bad as no dot at all
|
||||
if (strpos($filename, '.') == false)
|
||||
{
|
||||
header('HTTP/1.0 403 Forbidden');
|
||||
send_status_line(403, 'Forbidden');
|
||||
$exit = true;
|
||||
}
|
||||
|
||||
@@ -84,7 +86,7 @@ if (isset($_GET['avatar']))
|
||||
if (!$exit && !in_array($ext, array('png', 'gif', 'jpg', 'jpeg')))
|
||||
{
|
||||
// no way such an avatar could exist. They are not following the rules, stop the show.
|
||||
header("HTTP/1.0 403 Forbidden");
|
||||
send_status_line(403, 'Forbidden');
|
||||
$exit = true;
|
||||
}
|
||||
|
||||
@@ -94,7 +96,7 @@ if (isset($_GET['avatar']))
|
||||
if (!$filename)
|
||||
{
|
||||
// no way such an avatar could exist. They are not following the rules, stop the show.
|
||||
header("HTTP/1.0 403 Forbidden");
|
||||
send_status_line(403, 'Forbidden');
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -118,11 +120,13 @@ $user->setup('viewtopic');
|
||||
|
||||
if (!$download_id)
|
||||
{
|
||||
send_status_line(404, 'Not Found');
|
||||
trigger_error('NO_ATTACHMENT_SELECTED');
|
||||
}
|
||||
|
||||
if (!$config['allow_attachments'] && !$config['allow_pm_attach'])
|
||||
{
|
||||
send_status_line(404, 'Not Found');
|
||||
trigger_error('ATTACHMENT_FUNCTIONALITY_DISABLED');
|
||||
}
|
||||
|
||||
@@ -135,11 +139,13 @@ $db->sql_freeresult($result);
|
||||
|
||||
if (!$attachment)
|
||||
{
|
||||
send_status_line(404, 'Not Found');
|
||||
trigger_error('ERROR_NO_ATTACHMENT');
|
||||
}
|
||||
|
||||
if ((!$attachment['in_message'] && !$config['allow_attachments']) || ($attachment['in_message'] && !$config['allow_pm_attach']))
|
||||
{
|
||||
send_status_line(404, 'Not Found');
|
||||
trigger_error('ATTACHMENT_FUNCTIONALITY_DISABLED');
|
||||
}
|
||||
|
||||
@@ -152,6 +158,7 @@ if ($attachment['is_orphan'])
|
||||
|
||||
if (!$own_attachment || ($attachment['in_message'] && !$auth->acl_get('u_pm_download')) || (!$attachment['in_message'] && !$auth->acl_get('u_download')))
|
||||
{
|
||||
send_status_line(404, 'Not Found');
|
||||
trigger_error('ERROR_NO_ATTACHMENT');
|
||||
}
|
||||
|
||||
@@ -184,6 +191,7 @@ else
|
||||
}
|
||||
else
|
||||
{
|
||||
send_status_line(403, 'Forbidden');
|
||||
trigger_error('SORRY_AUTH_VIEW_ATTACH');
|
||||
}
|
||||
}
|
||||
@@ -192,7 +200,7 @@ else
|
||||
$row['forum_id'] = false;
|
||||
if (!$auth->acl_get('u_pm_download'))
|
||||
{
|
||||
header('HTTP/1.0 403 Forbidden');
|
||||
send_status_line(403, 'Forbidden');
|
||||
trigger_error('SORRY_AUTH_VIEW_ATTACH');
|
||||
}
|
||||
|
||||
@@ -215,7 +223,7 @@ else
|
||||
|
||||
if (!$allowed)
|
||||
{
|
||||
header('HTTP/1.0 403 Forbidden');
|
||||
send_status_line(403, 'Forbidden');
|
||||
trigger_error('ERROR_NO_ATTACHMENT');
|
||||
}
|
||||
}
|
||||
@@ -224,13 +232,14 @@ else
|
||||
$extensions = array();
|
||||
if (!extension_allowed($row['forum_id'], $attachment['extension'], $extensions))
|
||||
{
|
||||
send_status_line(404, 'Forbidden');
|
||||
trigger_error(sprintf($user->lang['EXTENSION_DISABLED_AFTER_POSTING'], $attachment['extension']));
|
||||
}
|
||||
}
|
||||
|
||||
if (!download_allowed())
|
||||
{
|
||||
header('HTTP/1.0 403 Forbidden');
|
||||
send_status_line(403, 'Forbidden');
|
||||
trigger_error($user->lang['LINKAGE_FORBIDDEN']);
|
||||
}
|
||||
|
||||
@@ -246,6 +255,7 @@ $db->sql_freeresult($result);
|
||||
|
||||
if (!$attachment)
|
||||
{
|
||||
send_status_line(404, 'Not Found');
|
||||
trigger_error('ERROR_NO_ATTACHMENT');
|
||||
}
|
||||
|
||||
@@ -288,6 +298,7 @@ else
|
||||
// This presenting method should no longer be used
|
||||
if (!@is_dir($phpbb_root_path . $config['upload_path']))
|
||||
{
|
||||
send_status_line(500, 'Internal Server Error');
|
||||
trigger_error($user->lang['PHYSICAL_DOWNLOAD_NOT_POSSIBLE']);
|
||||
}
|
||||
|
||||
@@ -376,7 +387,7 @@ function send_avatar_to_browser($file, $browser)
|
||||
}
|
||||
else
|
||||
{
|
||||
header('HTTP/1.0 404 Not Found');
|
||||
send_status_line(404, 'Not Found');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -412,7 +423,8 @@ function send_file_to_browser($attachment, $upload_dir, $category)
|
||||
|
||||
if (!@file_exists($filename))
|
||||
{
|
||||
trigger_error($user->lang['ERROR_NO_ATTACHMENT'] . '<br /><br />' . sprintf($user->lang['FILE_NOT_FOUND_404'], $filename));
|
||||
send_status_line(404, 'Not Found');
|
||||
trigger_error('ERROR_NO_ATTACHMENT');
|
||||
}
|
||||
|
||||
// Correct the mime type - we force application/octetstream for all files, except images
|
||||
@@ -438,9 +450,11 @@ function send_file_to_browser($attachment, $upload_dir, $category)
|
||||
// PHP track_errors setting On?
|
||||
if (!empty($php_errormsg))
|
||||
{
|
||||
send_status_line(500, 'Internal Server Error');
|
||||
trigger_error($user->lang['UNABLE_TO_DELIVER_FILE'] . '<br />' . sprintf($user->lang['TRACKED_PHP_ERROR'], $php_errormsg));
|
||||
}
|
||||
|
||||
send_status_line(500, 'Internal Server Error');
|
||||
trigger_error('UNABLE_TO_DELIVER_FILE');
|
||||
}
|
||||
|
||||
@@ -670,15 +684,7 @@ function set_modified_headers($stamp, $browser)
|
||||
{
|
||||
if ($last_load !== false && $last_load >= $stamp)
|
||||
{
|
||||
if (substr(strtolower(@php_sapi_name()),0,3) === 'cgi')
|
||||
{
|
||||
// in theory, we shouldn't need that due to php doing it. Reality offers a differing opinion, though
|
||||
header('Status: 304 Not Modified', true, 304);
|
||||
}
|
||||
else
|
||||
{
|
||||
header('HTTP/1.0 304 Not Modified', true, 304);
|
||||
}
|
||||
send_status_line(304, 'Not Modified');
|
||||
// seems that we need those too ... browsers
|
||||
header('Pragma: public');
|
||||
header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', time() + 31536000));
|
||||
|
115
phpBB/feed.php
115
phpBB/feed.php
@@ -95,11 +95,13 @@ while ($row = $feed->get_item())
|
||||
|
||||
$title = (isset($row[$feed->get('title')]) && $row[$feed->get('title')] !== '') ? $row[$feed->get('title')] : ((isset($row[$feed->get('title2')])) ? $row[$feed->get('title2')] : '');
|
||||
|
||||
$item_time = (int) $row[$feed->get('date')];
|
||||
$published = ($feed->get('published') !== NULL) ? (int) $row[$feed->get('published')] : 0;
|
||||
$updated = ($feed->get('updated') !== NULL) ? (int) $row[$feed->get('updated')] : 0;
|
||||
|
||||
$item_row = array(
|
||||
'author' => ($feed->get('creator') !== NULL) ? $row[$feed->get('creator')] : '',
|
||||
'pubdate' => feed_format_date($item_time),
|
||||
'published' => ($published > 0) ? feed_format_date($published) : '',
|
||||
'updated' => ($updated > 0) ? feed_format_date($updated) : '',
|
||||
'link' => '',
|
||||
'title' => censor_text($title),
|
||||
'category' => ($config['feed_item_statistics'] && !empty($row['forum_id'])) ? $board_url . '/viewforum.' . $phpEx . '?f=' . $row['forum_id'] : '',
|
||||
@@ -113,7 +115,7 @@ while ($row = $feed->get_item())
|
||||
|
||||
$item_vars[] = $item_row;
|
||||
|
||||
$feed_updated_time = max($feed_updated_time, $item_time);
|
||||
$feed_updated_time = max($feed_updated_time, $published, $updated);
|
||||
}
|
||||
|
||||
// If we do not have any items at all, sending the current time is better than sending no time.
|
||||
@@ -171,6 +173,12 @@ if (defined('DEBUG_EXTRA') && request_var('explain', 0) && $auth->acl_get('a_'))
|
||||
header("Content-Type: application/atom+xml; charset=UTF-8");
|
||||
header("Last-Modified: " . gmdate('D, d M Y H:i:s', $feed_updated_time) . ' GMT');
|
||||
|
||||
if (!empty($user->data['is_bot']))
|
||||
{
|
||||
// Let reverse proxies know we detected a bot.
|
||||
header('X-PHPBB-IS-BOT: yes');
|
||||
}
|
||||
|
||||
echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
|
||||
echo '<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="' . $global_vars['FEED_LANG'] . '">' . "\n";
|
||||
echo '<link rel="self" type="application/atom+xml" href="' . $global_vars['SELF_LINK'] . '" />' . "\n\n";
|
||||
@@ -192,7 +200,13 @@ foreach ($item_vars as $row)
|
||||
echo '<author><name><![CDATA[' . $row['author'] . ']]></name></author>' . "\n";
|
||||
}
|
||||
|
||||
echo '<updated>' . $row['pubdate'] . '</updated>' . "\n";
|
||||
echo '<updated>' . ((!empty($row['updated'])) ? $row['updated'] : $row['published']) . '</updated>' . "\n";
|
||||
|
||||
if (!empty($row['published']))
|
||||
{
|
||||
echo '<published>' . $row['published'] . '</published>' . "\n";
|
||||
}
|
||||
|
||||
echo '<id>' . $row['link'] . '</id>' . "\n";
|
||||
echo '<link href="' . $row['link'] . '"/>' . "\n";
|
||||
echo '<title type="html"><![CDATA[' . $row['title'] . ']]></title>' . "\n\n";
|
||||
@@ -276,8 +290,8 @@ function feed_generate_content($content, $uid, $bitfield, $options)
|
||||
// Add newlines
|
||||
$content = str_replace('<br />', '<br />' . "\n", $content);
|
||||
|
||||
// Relative Path to Absolute path, Windows style
|
||||
$content = str_replace('./', $board_url . '/', $content);
|
||||
// Convert smiley Relative paths to Absolute path, Windows style
|
||||
$content = str_replace($phpbb_root_path . $config['smilies_path'], $board_url . '/' . $config['smilies_path'], $content);
|
||||
|
||||
// Remove "Select all" link and mouse events
|
||||
$content = str_replace('<a href="#" onclick="selectCode(this); return false;">' . $user->lang['SELECT_ALL_CODE'] . '</a>', '', $content);
|
||||
@@ -522,7 +536,7 @@ class phpbb_feed_base
|
||||
|
||||
if (!isset($forum_ids))
|
||||
{
|
||||
$forum_ids = array_keys($auth->acl_getf('f_read'));
|
||||
$forum_ids = array_keys($auth->acl_getf('f_read', true));
|
||||
}
|
||||
|
||||
return $forum_ids;
|
||||
@@ -535,12 +549,30 @@ class phpbb_feed_base
|
||||
|
||||
if (!isset($forum_ids))
|
||||
{
|
||||
$forum_ids = array_keys($auth->acl_getf('m_approve'));
|
||||
$forum_ids = array_keys($auth->acl_getf('m_approve', true));
|
||||
}
|
||||
|
||||
return $forum_ids;
|
||||
}
|
||||
|
||||
function is_moderator_approve_forum($forum_id)
|
||||
{
|
||||
static $forum_ids;
|
||||
|
||||
if (!isset($forum_ids))
|
||||
{
|
||||
$forum_ids = array_flip($this->get_moderator_approve_forums());
|
||||
}
|
||||
|
||||
if (!$forum_id)
|
||||
{
|
||||
// Global announcement, your a moderator in any forum than it's okay.
|
||||
return (!empty($forum_ids)) ? true : false;
|
||||
}
|
||||
|
||||
return (isset($forum_ids[$forum_id])) ? true : false;
|
||||
}
|
||||
|
||||
function get_excluded_forums()
|
||||
{
|
||||
global $db, $cache;
|
||||
@@ -578,30 +610,9 @@ class phpbb_feed_base
|
||||
|
||||
function get_passworded_forums()
|
||||
{
|
||||
global $db, $user;
|
||||
global $user;
|
||||
|
||||
// Exclude passworded forums
|
||||
$sql = 'SELECT f.forum_id, fa.user_id
|
||||
FROM ' . FORUMS_TABLE . ' f
|
||||
LEFT JOIN ' . FORUMS_ACCESS_TABLE . " fa
|
||||
ON (fa.forum_id = f.forum_id
|
||||
AND fa.session_id = '" . $db->sql_escape($user->session_id) . "')
|
||||
WHERE f.forum_password <> ''";
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$forum_ids = array();
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$forum_id = (int) $row['forum_id'];
|
||||
|
||||
if ($row['user_id'] != $user->data['user_id'])
|
||||
{
|
||||
$forum_ids[$forum_id] = $forum_id;
|
||||
}
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
return $forum_ids;
|
||||
return $user->get_passworded_forums();
|
||||
}
|
||||
|
||||
function get_item()
|
||||
@@ -657,7 +668,8 @@ class phpbb_feed_post_base extends phpbb_feed_base
|
||||
|
||||
$this->set('author_id', 'user_id');
|
||||
$this->set('creator', 'username');
|
||||
$this->set('date', 'post_time');
|
||||
$this->set('published', 'post_time');
|
||||
$this->set('updated', 'post_edit_time');
|
||||
$this->set('text', 'post_text');
|
||||
|
||||
$this->set('bitfield', 'bbcode_bitfield');
|
||||
@@ -677,7 +689,8 @@ class phpbb_feed_post_base extends phpbb_feed_base
|
||||
if ($config['feed_item_statistics'])
|
||||
{
|
||||
$item_row['statistics'] = $user->lang['POSTED'] . ' ' . $user->lang['POST_BY_AUTHOR'] . ' ' . $this->user_viewprofile($row)
|
||||
. ' ' . $this->separator_stats . ' ' . $user->format_date($row['post_time']);
|
||||
. ' ' . $this->separator_stats . ' ' . $user->format_date($row[$this->get('published')])
|
||||
. (($this->is_moderator_approve_forum($row['forum_id']) && !$row['post_approved']) ? ' ' . $this->separator_stats . ' ' . $user->lang['POST_UNAPPROVED'] : '');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -698,7 +711,8 @@ class phpbb_feed_topic_base extends phpbb_feed_base
|
||||
|
||||
$this->set('author_id', 'topic_poster');
|
||||
$this->set('creator', 'topic_first_poster_name');
|
||||
$this->set('date', 'topic_time');
|
||||
$this->set('published', 'post_time');
|
||||
$this->set('updated', 'post_edit_time');
|
||||
$this->set('text', 'post_text');
|
||||
|
||||
$this->set('bitfield', 'bbcode_bitfield');
|
||||
@@ -718,9 +732,10 @@ class phpbb_feed_topic_base extends phpbb_feed_base
|
||||
if ($config['feed_item_statistics'])
|
||||
{
|
||||
$item_row['statistics'] = $user->lang['POSTED'] . ' ' . $user->lang['POST_BY_AUTHOR'] . ' ' . $this->user_viewprofile($row)
|
||||
. ' ' . $this->separator_stats . ' ' . $user->format_date($row[$this->get('date')])
|
||||
. ' ' . $this->separator_stats . ' ' . $user->lang['REPLIES'] . ' ' . $row['topic_replies']
|
||||
. ' ' . $this->separator_stats . ' ' . $user->lang['VIEWS'] . ' ' . $row['topic_views'];
|
||||
. ' ' . $this->separator_stats . ' ' . $user->format_date($row[$this->get('published')])
|
||||
. ' ' . $this->separator_stats . ' ' . $user->lang['REPLIES'] . ' ' . (($this->is_moderator_approve_forum($row['forum_id'])) ? $row['topic_replies_real'] : $row['topic_replies'])
|
||||
. ' ' . $this->separator_stats . ' ' . $user->lang['VIEWS'] . ' ' . $row['topic_views']
|
||||
. (($this->is_moderator_approve_forum($row['forum_id']) && ($row['topic_replies_real'] != $row['topic_replies'])) ? ' ' . $this->separator_stats . ' ' . $user->lang['POSTS_UNAPPROVED'] : '');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -780,11 +795,11 @@ class phpbb_feed_overall extends phpbb_feed_post_base
|
||||
// Get the actual data
|
||||
$this->sql = array(
|
||||
'SELECT' => 'f.forum_id, f.forum_name, ' .
|
||||
'p.post_id, p.topic_id, p.post_time, p.post_subject, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url, ' .
|
||||
'p.post_id, p.topic_id, p.post_time, p.post_edit_time, p.post_approved, p.post_subject, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url, ' .
|
||||
'u.username, u.user_id',
|
||||
'FROM' => array(
|
||||
POSTS_TABLE => 'p',
|
||||
USERS_TABLE => 'u',
|
||||
POSTS_TABLE => 'p',
|
||||
),
|
||||
'LEFT_JOIN' => array(
|
||||
array(
|
||||
@@ -912,7 +927,7 @@ class phpbb_feed_forum extends phpbb_feed_post_base
|
||||
}
|
||||
|
||||
$this->sql = array(
|
||||
'SELECT' => 'p.post_id, p.topic_id, p.post_time, p.post_subject, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url, ' .
|
||||
'SELECT' => 'p.post_id, p.topic_id, p.post_time, p.post_edit_time, p.post_approved, p.post_subject, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url, ' .
|
||||
'u.username, u.user_id',
|
||||
'FROM' => array(
|
||||
POSTS_TABLE => 'p',
|
||||
@@ -994,7 +1009,7 @@ class phpbb_feed_topic extends phpbb_feed_post_base
|
||||
if (!$this->topic_data['topic_approved'])
|
||||
{
|
||||
// Also require m_approve
|
||||
$in_fid_ary = array_intersect($in_fid_ary, array_keys($auth->acl_getf('m_approve')));
|
||||
$in_fid_ary = array_intersect($in_fid_ary, $this->get_moderator_approve_forums());
|
||||
|
||||
if (empty($in_fid_ary))
|
||||
{
|
||||
@@ -1077,7 +1092,7 @@ class phpbb_feed_topic extends phpbb_feed_post_base
|
||||
global $auth, $db;
|
||||
|
||||
$this->sql = array(
|
||||
'SELECT' => 'p.post_id, p.post_time, p.post_subject, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url, ' .
|
||||
'SELECT' => 'p.post_id, p.post_time, p.post_edit_time, p.post_approved, p.post_subject, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url, ' .
|
||||
'u.username, u.user_id',
|
||||
'FROM' => array(
|
||||
POSTS_TABLE => 'p',
|
||||
@@ -1116,7 +1131,7 @@ class phpbb_feed_forums extends phpbb_feed_base
|
||||
$this->set('text', 'forum_desc');
|
||||
$this->set('bitfield', 'forum_desc_bitfield');
|
||||
$this->set('bbcode_uid','forum_desc_uid');
|
||||
$this->set('date', 'forum_last_post_time');
|
||||
$this->set('updated', 'forum_last_post_time');
|
||||
$this->set('options', 'forum_desc_options');
|
||||
}
|
||||
|
||||
@@ -1241,8 +1256,8 @@ class phpbb_feed_news extends phpbb_feed_topic_base
|
||||
|
||||
$this->sql = array(
|
||||
'SELECT' => 'f.forum_id, f.forum_name,
|
||||
t.topic_id, t.topic_title, t.topic_poster, t.topic_first_poster_name, t.topic_replies, t.topic_views, t.topic_time,
|
||||
p.post_id, p.post_time, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url',
|
||||
t.topic_id, t.topic_title, t.topic_poster, t.topic_first_poster_name, t.topic_replies, t.topic_replies_real, t.topic_views, t.topic_time, t.topic_last_post_time,
|
||||
p.post_id, p.post_time, p.post_edit_time, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url',
|
||||
'FROM' => array(
|
||||
TOPICS_TABLE => 't',
|
||||
POSTS_TABLE => 'p',
|
||||
@@ -1314,8 +1329,8 @@ class phpbb_feed_topics extends phpbb_feed_topic_base
|
||||
|
||||
$this->sql = array(
|
||||
'SELECT' => 'f.forum_id, f.forum_name,
|
||||
t.topic_id, t.topic_title, t.topic_poster, t.topic_first_poster_name, t.topic_replies, t.topic_views, t.topic_time,
|
||||
p.post_id, p.post_time, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url',
|
||||
t.topic_id, t.topic_title, t.topic_poster, t.topic_first_poster_name, t.topic_replies, t.topic_replies_real, t.topic_views, t.topic_time, t.topic_last_post_time,
|
||||
p.post_id, p.post_time, p.post_edit_time, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url',
|
||||
'FROM' => array(
|
||||
TOPICS_TABLE => 't',
|
||||
POSTS_TABLE => 'p',
|
||||
@@ -1361,8 +1376,6 @@ class phpbb_feed_topics_active extends phpbb_feed_topic_base
|
||||
|
||||
$this->set('author_id', 'topic_last_poster_id');
|
||||
$this->set('creator', 'topic_last_poster_name');
|
||||
$this->set('date', 'topic_last_post_time');
|
||||
$this->set('text', 'post_text');
|
||||
}
|
||||
|
||||
function get_sql()
|
||||
@@ -1412,9 +1425,9 @@ class phpbb_feed_topics_active extends phpbb_feed_topic_base
|
||||
|
||||
$this->sql = array(
|
||||
'SELECT' => 'f.forum_id, f.forum_name,
|
||||
t.topic_id, t.topic_title, t.topic_replies, t.topic_views,
|
||||
t.topic_id, t.topic_title, t.topic_replies, t.topic_replies_real, t.topic_views,
|
||||
t.topic_last_poster_id, t.topic_last_poster_name, t.topic_last_post_time,
|
||||
p.post_id, p.post_time, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url',
|
||||
p.post_id, p.post_time, p.post_edit_time, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url',
|
||||
'FROM' => array(
|
||||
TOPICS_TABLE => 't',
|
||||
POSTS_TABLE => 'p',
|
||||
|
4
phpBB/includes/.htaccess
Normal file
4
phpBB/includes/.htaccess
Normal file
@@ -0,0 +1,4 @@
|
||||
<Files *>
|
||||
Order Allow,Deny
|
||||
Deny from All
|
||||
</Files>
|
@@ -78,15 +78,21 @@ class acm
|
||||
|
||||
if (!$this->_write('data_global'))
|
||||
{
|
||||
if (!function_exists('phpbb_is_writable'))
|
||||
{
|
||||
global $phpbb_root_path;
|
||||
include($phpbb_root_path . 'includes/functions.' . $phpEx);
|
||||
}
|
||||
|
||||
// Now, this occurred how often? ... phew, just tell the user then...
|
||||
if (!@is_writable($this->cache_dir))
|
||||
if (!phpbb_is_writable($this->cache_dir))
|
||||
{
|
||||
// We need to use die() here, because else we may encounter an infinite loop (the message handler calls $cache->unload())
|
||||
die($this->cache_dir . ' is NOT writable.');
|
||||
die('Fatal: ' . $this->cache_dir . ' is NOT writable.');
|
||||
exit;
|
||||
}
|
||||
|
||||
die('Not able to open ' . $this->cache_dir . 'data_global.' . $phpEx);
|
||||
die('Fatal: Not able to open ' . $this->cache_dir . 'data_global.' . $phpEx);
|
||||
exit;
|
||||
}
|
||||
|
||||
@@ -707,7 +713,13 @@ class acm
|
||||
*/
|
||||
function remove_file($filename, $check = false)
|
||||
{
|
||||
if ($check && !@is_writable($this->cache_dir))
|
||||
if (!function_exists('phpbb_is_writable'))
|
||||
{
|
||||
global $phpbb_root_path, $phpEx;
|
||||
include($phpbb_root_path . 'includes/functions.' . $phpEx);
|
||||
}
|
||||
|
||||
if ($check && !phpbb_is_writable($this->cache_dir))
|
||||
{
|
||||
// E_USER_ERROR - not using language entry - intended.
|
||||
trigger_error('Unable to remove files within ' . $this->cache_dir . '. Please check directory permissions.', E_USER_ERROR);
|
||||
|
@@ -37,6 +37,12 @@ if (!defined('PHPBB_ACM_MEMCACHE_HOST'))
|
||||
define('PHPBB_ACM_MEMCACHE_HOST', 'localhost');
|
||||
}
|
||||
|
||||
if (!defined('PHPBB_ACM_MEMCACHE'))
|
||||
{
|
||||
//can define multiple servers with host1/port1,host2/port2 format
|
||||
define('PHPBB_ACM_MEMCACHE', PHPBB_ACM_MEMCACHE_HOST . '/' . PHPBB_ACM_MEMCACHE_PORT);
|
||||
}
|
||||
|
||||
/**
|
||||
* ACM for Memcached
|
||||
* @package acm
|
||||
@@ -54,7 +60,11 @@ class acm extends acm_memory
|
||||
parent::acm_memory();
|
||||
|
||||
$this->memcache = new Memcache;
|
||||
$this->memcache->connect(PHPBB_ACM_MEMCACHE_HOST, PHPBB_ACM_MEMCACHE_PORT);
|
||||
foreach(explode(',', PHPBB_ACM_MEMCACHE) as $u)
|
||||
{
|
||||
$parts = explode('/', $u);
|
||||
$this->memcache->addServer(trim($parts[0]), trim($parts[1]));
|
||||
}
|
||||
$this->flags = (PHPBB_ACM_MEMCACHE_COMPRESS) ? MEMCACHE_COMPRESSED : 0;
|
||||
}
|
||||
|
||||
@@ -125,4 +135,4 @@ class acm extends acm_memory
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
?>
|
||||
|
@@ -407,7 +407,13 @@ class acm_memory
|
||||
*/
|
||||
function remove_file($filename, $check = false)
|
||||
{
|
||||
if ($check && !@is_writable($this->cache_dir))
|
||||
if (!function_exists('phpbb_is_writable'))
|
||||
{
|
||||
global $phpbb_root_path, $phpEx;
|
||||
include($phpbb_root_path . 'includes/functions.' . $phpEx);
|
||||
}
|
||||
|
||||
if ($check && !phpbb_is_writable($this->cache_dir))
|
||||
{
|
||||
// E_USER_ERROR - not using language entry - intended.
|
||||
trigger_error('Unable to remove files within ' . $this->cache_dir . '. Please check directory permissions.', E_USER_ERROR);
|
||||
|
145
phpBB/includes/acm/acm_redis.php
Normal file
145
phpBB/includes/acm/acm_redis.php
Normal file
@@ -0,0 +1,145 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package acm
|
||||
* @copyright (c) 2011 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ignore
|
||||
*/
|
||||
if (!defined('IN_PHPBB'))
|
||||
{
|
||||
exit;
|
||||
}
|
||||
|
||||
// Include the abstract base
|
||||
if (!class_exists('acm_memory'))
|
||||
{
|
||||
require("{$phpbb_root_path}includes/acm/acm_memory.$phpEx");
|
||||
}
|
||||
|
||||
if (!defined('PHPBB_ACM_REDIS_PORT'))
|
||||
{
|
||||
define('PHPBB_ACM_REDIS_PORT', 6379);
|
||||
}
|
||||
|
||||
if (!defined('PHPBB_ACM_REDIS_HOST'))
|
||||
{
|
||||
define('PHPBB_ACM_REDIS_HOST', 'localhost');
|
||||
}
|
||||
|
||||
/**
|
||||
* ACM for Redis
|
||||
*
|
||||
* Compatible with the php extension phpredis available
|
||||
* at https://github.com/nicolasff/phpredis
|
||||
*
|
||||
* @package acm
|
||||
*/
|
||||
class acm extends acm_memory
|
||||
{
|
||||
var $extension = 'redis';
|
||||
|
||||
var $redis;
|
||||
|
||||
function acm()
|
||||
{
|
||||
// Call the parent constructor
|
||||
parent::acm_memory();
|
||||
|
||||
$this->redis = new Redis();
|
||||
$this->redis->connect(PHPBB_ACM_REDIS_HOST, PHPBB_ACM_REDIS_PORT);
|
||||
|
||||
if (defined('PHPBB_ACM_REDIS_PASSWORD'))
|
||||
{
|
||||
if (!$this->redis->auth(PHPBB_ACM_REDIS_PASSWORD))
|
||||
{
|
||||
global $acm_type;
|
||||
|
||||
trigger_error("Incorrect password for the ACM module $acm_type.", E_USER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
$this->redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP);
|
||||
$this->redis->setOption(Redis::OPT_PREFIX, $this->key_prefix);
|
||||
|
||||
if (defined('PHPBB_ACM_REDIS_DB'))
|
||||
{
|
||||
if (!$this->redis->select(PHPBB_ACM_REDIS_DB))
|
||||
{
|
||||
global $acm_type;
|
||||
|
||||
trigger_error("Incorrect database for the ACM module $acm_type.", E_USER_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Unload the cache resources
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function unload()
|
||||
{
|
||||
parent::unload();
|
||||
|
||||
$this->redis->close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Purge cache data
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function purge()
|
||||
{
|
||||
$this->redis->flushDB();
|
||||
|
||||
parent::purge();
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch an item from the cache
|
||||
*
|
||||
* @access protected
|
||||
* @param string $var Cache key
|
||||
* @return mixed Cached data
|
||||
*/
|
||||
function _read($var)
|
||||
{
|
||||
return $this->redis->get($var);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store data in the cache
|
||||
*
|
||||
* @access protected
|
||||
* @param string $var Cache key
|
||||
* @param mixed $data Data to store
|
||||
* @param int $ttl Time-to-live of cached data
|
||||
* @return bool True if the operation succeeded
|
||||
*/
|
||||
function _write($var, $data, $ttl = 2592000)
|
||||
{
|
||||
return $this->redis->setex($var, $ttl, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove an item from the cache
|
||||
*
|
||||
* @access protected
|
||||
* @param string $var Cache key
|
||||
* @return bool True if the operation succeeded
|
||||
*/
|
||||
function _delete($var)
|
||||
{
|
||||
if ($this->redis->delete($var) > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
84
phpBB/includes/acm/acm_wincache.php
Normal file
84
phpBB/includes/acm/acm_wincache.php
Normal file
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package acm
|
||||
* @copyright (c) 2010 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ignore
|
||||
*/
|
||||
if (!defined('IN_PHPBB'))
|
||||
{
|
||||
exit;
|
||||
}
|
||||
|
||||
// Include the abstract base
|
||||
if (!class_exists('acm_memory'))
|
||||
{
|
||||
require("{$phpbb_root_path}includes/acm/acm_memory.$phpEx");
|
||||
}
|
||||
|
||||
/**
|
||||
* ACM for WinCache
|
||||
* @package acm
|
||||
*/
|
||||
class acm extends acm_memory
|
||||
{
|
||||
var $extension = 'wincache';
|
||||
|
||||
/**
|
||||
* Purge cache data
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function purge()
|
||||
{
|
||||
wincache_ucache_clear();
|
||||
|
||||
parent::purge();
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch an item from the cache
|
||||
*
|
||||
* @access protected
|
||||
* @param string $var Cache key
|
||||
* @return mixed Cached data
|
||||
*/
|
||||
function _read($var)
|
||||
{
|
||||
$success = false;
|
||||
$result = wincache_ucache_get($this->key_prefix . $var, $success);
|
||||
|
||||
return ($success) ? $result : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Store data in the cache
|
||||
*
|
||||
* @access protected
|
||||
* @param string $var Cache key
|
||||
* @param mixed $data Data to store
|
||||
* @param int $ttl Time-to-live of cached data
|
||||
* @return bool True if the operation succeeded
|
||||
*/
|
||||
function _write($var, $data, $ttl = 2592000)
|
||||
{
|
||||
return wincache_ucache_set($this->key_prefix . $var, $data, $ttl);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove an item from the cache
|
||||
*
|
||||
* @access protected
|
||||
* @param string $var Cache key
|
||||
* @return bool True if the operation succeeded
|
||||
*/
|
||||
function _delete($var)
|
||||
{
|
||||
return wincache_ucache_delete($this->key_prefix . $var);
|
||||
}
|
||||
}
|
@@ -90,6 +90,7 @@ class acp_attachments
|
||||
$s_assigned_groups = array();
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$row['group_name'] = (isset($user->lang['EXT_GROUP_' . $row['group_name']])) ? $user->lang['EXT_GROUP_' . $row['group_name']] : $row['group_name'];
|
||||
$s_assigned_groups[$row['cat_id']][] = $row['group_name'];
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
@@ -494,6 +495,10 @@ class acp_attachments
|
||||
$sql = 'SELECT group_id
|
||||
FROM ' . EXTENSION_GROUPS_TABLE . "
|
||||
WHERE LOWER(group_name) = '" . $db->sql_escape(utf8_strtolower($new_group_name)) . "'";
|
||||
if ($group_id)
|
||||
{
|
||||
$sql .= ' AND group_id <> ' . $group_id;
|
||||
}
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
if ($db->sql_fetchrow($result))
|
||||
@@ -551,6 +556,7 @@ class acp_attachments
|
||||
$group_id = $db->sql_nextid();
|
||||
}
|
||||
|
||||
$group_name = (isset($user->lang['EXT_GROUP_' . $group_name])) ? $user->lang['EXT_GROUP_' . $group_name] : $group_name;
|
||||
add_log('admin', 'LOG_ATTACH_EXTGROUP_' . strtoupper($action), $group_name);
|
||||
}
|
||||
|
||||
@@ -858,7 +864,7 @@ class acp_attachments
|
||||
'U_EDIT' => $this->u_action . "&action=edit&g={$row['group_id']}",
|
||||
'U_DELETE' => $this->u_action . "&action=delete&g={$row['group_id']}",
|
||||
|
||||
'GROUP_NAME' => $row['group_name'],
|
||||
'GROUP_NAME' => (isset($user->lang['EXT_GROUP_' . $row['group_name']])) ? $user->lang['EXT_GROUP_' . $row['group_name']] : $row['group_name'],
|
||||
'CATEGORY' => $cat_lang[$row['cat_id']],
|
||||
)
|
||||
);
|
||||
@@ -1118,6 +1124,7 @@ class acp_attachments
|
||||
$group_name = array();
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$row['group_name'] = (isset($user->lang['EXT_GROUP_' . $row['group_name']])) ? $user->lang['EXT_GROUP_' . $row['group_name']] : $row['group_name'];
|
||||
$group_name[] = $row;
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
@@ -1215,7 +1222,7 @@ class acp_attachments
|
||||
return;
|
||||
}
|
||||
|
||||
if (!is_writable($phpbb_root_path . $upload_dir))
|
||||
if (!phpbb_is_writable($phpbb_root_path . $upload_dir))
|
||||
{
|
||||
$error[] = sprintf($user->lang['NO_WRITE_UPLOAD'], $upload_dir);
|
||||
return;
|
||||
|
@@ -175,12 +175,21 @@ class acp_ban
|
||||
}
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$banned_options = '';
|
||||
$banned_options = $excluded_options = array();
|
||||
$ban_length = $ban_reasons = $ban_give_reasons = array();
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$banned_options .= '<option' . (($row['ban_exclude']) ? ' class="sep"' : '') . ' value="' . $row['ban_id'] . '">' . $row[$field] . '</option>';
|
||||
$option = '<option value="' . $row['ban_id'] . '">' . $row[$field] . '</option>';
|
||||
|
||||
if ($row['ban_exclude'])
|
||||
{
|
||||
$excluded_options[] = $option;
|
||||
}
|
||||
else
|
||||
{
|
||||
$banned_options[] = $option;
|
||||
}
|
||||
|
||||
$time_length = ($row['ban_end']) ? ($row['ban_end'] - $row['ban_start']) / 60 : 0;
|
||||
|
||||
@@ -224,7 +233,7 @@ class acp_ban
|
||||
$template->assign_block_vars('ban_reason', array(
|
||||
'BAN_ID' => $ban_id,
|
||||
'REASON' => $reason,
|
||||
'A_REASON' => addslashes(htmlspecialchars_decode($reason)),
|
||||
'A_REASON' => addslashes($reason),
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -236,16 +245,31 @@ class acp_ban
|
||||
$template->assign_block_vars('ban_give_reason', array(
|
||||
'BAN_ID' => $ban_id,
|
||||
'REASON' => $reason,
|
||||
'A_REASON' => addslashes(htmlspecialchars_decode($reason)),
|
||||
'A_REASON' => addslashes($reason),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
$options = '';
|
||||
if ($excluded_options)
|
||||
{
|
||||
$options .= '<optgroup label="' . $user->lang['OPTIONS_EXCLUDED'] . '">';
|
||||
$options .= implode('', $excluded_options);
|
||||
$options .= '</optgroup>';
|
||||
}
|
||||
|
||||
if ($banned_options)
|
||||
{
|
||||
$options .= '<optgroup label="' . $user->lang['OPTIONS_BANNED'] . '">';
|
||||
$options .= implode('', $banned_options);
|
||||
$options .= '</optgroup>';
|
||||
}
|
||||
|
||||
$template->assign_vars(array(
|
||||
'S_BAN_END_OPTIONS' => $ban_end_options,
|
||||
'S_BANNED_OPTIONS' => ($banned_options) ? true : false,
|
||||
'BANNED_OPTIONS' => $banned_options)
|
||||
);
|
||||
'S_BANNED_OPTIONS' => ($banned_options || $excluded_options) ? true : false,
|
||||
'BANNED_OPTIONS' => $options,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -33,7 +33,7 @@ class acp_bbcodes
|
||||
// Set up general vars
|
||||
$action = request_var('action', '');
|
||||
$bbcode_id = request_var('bbcode', 0);
|
||||
|
||||
|
||||
$this->tpl_name = 'acp_bbcodes';
|
||||
$this->page_title = 'ACP_BBCODES';
|
||||
$form_key = 'acp_bbcodes';
|
||||
@@ -123,7 +123,7 @@ class acp_bbcodes
|
||||
|
||||
case 'modify':
|
||||
case 'create':
|
||||
|
||||
|
||||
$warn_text = preg_match('%<[^>]*\{text[\d]*\}[^>]*>%i', $bbcode_tpl);
|
||||
if (!$warn_text || confirm_box(true))
|
||||
{
|
||||
@@ -171,8 +171,8 @@ class acp_bbcodes
|
||||
{
|
||||
trigger_error($user->lang['BBCODE_TAG_DEF_TOO_LONG'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if (strlen($bbcode_helpline) > 255)
|
||||
{
|
||||
trigger_error($user->lang['BBCODE_HELPLINE_TOO_LONG'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
@@ -213,7 +213,7 @@ class acp_bbcodes
|
||||
$bbcode_id = NUM_CORE_BBCODES + 1;
|
||||
}
|
||||
|
||||
if ($bbcode_id > 1511)
|
||||
if ($bbcode_id > BBCODE_LIMIT)
|
||||
{
|
||||
trigger_error($user->lang['TOO_MANY_BBCODES'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
@@ -243,7 +243,7 @@ class acp_bbcodes
|
||||
trigger_error($user->lang[$lang] . adm_back_link($this->u_action));
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
confirm_box(false, $user->lang['BBCODE_DANGER'], build_hidden_fields(array(
|
||||
'action' => $action,
|
||||
'bbcode' => $bbcode_id,
|
||||
@@ -317,6 +317,17 @@ class acp_bbcodes
|
||||
$bbcode_tpl = trim($bbcode_tpl);
|
||||
$utf8 = strpos($bbcode_match, 'INTTEXT') !== false;
|
||||
|
||||
// make sure we have utf8 support
|
||||
$utf8_pcre_properties = false;
|
||||
if (version_compare(PHP_VERSION, '5.1.0', '>=') || (version_compare(PHP_VERSION, '5.0.0-dev', '<=') && version_compare(PHP_VERSION, '4.4.0', '>=')))
|
||||
{
|
||||
// While this is the proper range of PHP versions, PHP may not be linked with the bundled PCRE lib and instead with an older version
|
||||
if (@preg_match('/\p{L}/u', 'a') !== false)
|
||||
{
|
||||
$utf8_pcre_properties = true;
|
||||
}
|
||||
}
|
||||
|
||||
$fp_match = preg_quote($bbcode_match, '!');
|
||||
$fp_replace = preg_replace('#^\[(.*?)\]#', '[$1:$uid]', $bbcode_match);
|
||||
$fp_replace = preg_replace('#\[/(.*?)\]$#', '[/$1:$uid]', $fp_replace);
|
||||
@@ -344,7 +355,7 @@ class acp_bbcodes
|
||||
'!([a-zA-Z0-9-+.,_ ]+)!' => "$1"
|
||||
),
|
||||
'INTTEXT' => array(
|
||||
'!([\p{L}\p{N}+-,_.\s]+)!u' => "$1"
|
||||
($utf8_pcre_properties) ? '!([\p{L}\p{N}\-+,_. ]+)!u' : '!([a-zA-Z0-9\-+,_. ]+)!u' => "$1"
|
||||
),
|
||||
'IDENTIFIER' => array(
|
||||
'!([a-zA-Z0-9-_]+)!' => "$1"
|
||||
@@ -363,7 +374,7 @@ class acp_bbcodes
|
||||
'EMAIL' => '(' . get_preg_expression('email') . ')',
|
||||
'TEXT' => '(.*?)',
|
||||
'SIMPLETEXT' => '([a-zA-Z0-9-+.,_ ]+)',
|
||||
'INTTEXT' => '([\p{L}\p{N}+-,_.\s]+)',
|
||||
'INTTEXT' => ($utf8_pcre_properties) ? '([\p{L}\p{N}\-+,_. ]+)' : '([a-zA-Z0-9\-+,_. ]+)',
|
||||
'IDENTIFIER' => '([a-zA-Z0-9-_]+)',
|
||||
'COLOR' => '([a-zA-Z]+|#[0-9abcdefABCDEF]+)',
|
||||
'NUMBER' => '([0-9]+)',
|
||||
@@ -371,8 +382,8 @@ class acp_bbcodes
|
||||
|
||||
$pad = 0;
|
||||
$modifiers = 'i';
|
||||
$modifiers .= ($utf8) ? 'u' : '';
|
||||
|
||||
$modifiers .= ($utf8 && $utf8_pcre_properties) ? 'u' : '';
|
||||
|
||||
if (preg_match_all('/\{(' . implode('|', array_keys($tokens)) . ')[0-9]*\}/i', $bbcode_match, $m))
|
||||
{
|
||||
foreach ($m[0] as $n => $token)
|
||||
@@ -420,7 +431,7 @@ class acp_bbcodes
|
||||
}
|
||||
|
||||
$fp_match = '!' . $fp_match . '!' . $modifiers;
|
||||
$sp_match = '!' . $sp_match . '!s';
|
||||
$sp_match = '!' . $sp_match . '!s' . (($utf8) ? 'u' : '');
|
||||
|
||||
if (strpos($fp_match, 'e') !== false)
|
||||
{
|
||||
|
@@ -58,7 +58,7 @@ class acp_board
|
||||
'board_disable_msg' => false,
|
||||
'default_lang' => array('lang' => 'DEFAULT_LANGUAGE', 'validate' => 'lang', 'type' => 'select', 'function' => 'language_select', 'params' => array('{CONFIG_VALUE}'), 'explain' => false),
|
||||
'default_dateformat' => array('lang' => 'DEFAULT_DATE_FORMAT', 'validate' => 'string', 'type' => 'custom', 'method' => 'dateformat_select', 'explain' => true),
|
||||
'board_timezone' => array('lang' => 'SYSTEM_TIMEZONE', 'validate' => 'string', 'type' => 'select', 'function' => 'tz_select', 'params' => array('{CONFIG_VALUE}', 1), 'explain' => false),
|
||||
'board_timezone' => array('lang' => 'SYSTEM_TIMEZONE', 'validate' => 'string', 'type' => 'select', 'function' => 'tz_select', 'params' => array('{CONFIG_VALUE}', 1), 'explain' => true),
|
||||
'board_dst' => array('lang' => 'SYSTEM_DST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
|
||||
'default_style' => array('lang' => 'DEFAULT_STYLE', 'validate' => 'int', 'type' => 'select', 'function' => 'style_select', 'params' => array('{CONFIG_VALUE}', false), 'explain' => false),
|
||||
'override_user_style' => array('lang' => 'OVERRIDE_STYLE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
@@ -188,7 +188,7 @@ class acp_board
|
||||
'hot_threshold' => array('lang' => 'HOT_THRESHOLD', 'validate' => 'int:0', 'type' => 'text:3:4', 'explain' => true),
|
||||
'max_poll_options' => array('lang' => 'MAX_POLL_OPTIONS', 'validate' => 'int:2:127', 'type' => 'text:4:4', 'explain' => false),
|
||||
'max_post_chars' => array('lang' => 'CHAR_LIMIT', 'validate' => 'int:0', 'type' => 'text:4:6', 'explain' => true),
|
||||
'min_post_chars' => array('lang' => 'MIN_CHAR_LIMIT', 'validate' => 'int:0', 'type' => 'text:4:6', 'explain' => true),
|
||||
'min_post_chars' => array('lang' => 'MIN_CHAR_LIMIT', 'validate' => 'int:1', 'type' => 'text:4:6', 'explain' => true),
|
||||
'max_post_smilies' => array('lang' => 'SMILIES_LIMIT', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true),
|
||||
'max_post_urls' => array('lang' => 'MAX_POST_URLS', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true),
|
||||
'max_post_font_size' => array('lang' => 'MAX_POST_FONT_SIZE', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true, 'append' => ' %'),
|
||||
@@ -234,7 +234,7 @@ class acp_board
|
||||
'max_name_chars' => array('lang' => 'USERNAME_LENGTH', 'validate' => 'int:8:180', 'type' => false, 'method' => false, 'explain' => false,),
|
||||
'max_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:8:255', 'type' => false, 'method' => false, 'explain' => false,),
|
||||
|
||||
'require_activation' => array('lang' => 'ACC_ACTIVATION', 'validate' => 'int', 'type' => 'custom', 'method' => 'select_acc_activation', 'explain' => true),
|
||||
'require_activation' => array('lang' => 'ACC_ACTIVATION', 'validate' => 'int', 'type' => 'select', 'method' => 'select_acc_activation', 'explain' => true),
|
||||
'new_member_post_limit' => array('lang' => 'NEW_MEMBER_POST_LIMIT', 'validate' => 'int:0:255', 'type' => 'text:4:4', 'explain' => true, 'append' => ' ' . $user->lang['POSTS']),
|
||||
'new_member_group_default'=> array('lang' => 'NEW_MEMBER_GROUP_DEFAULT', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
'min_name_chars' => array('lang' => 'USERNAME_LENGTH', 'validate' => 'int:1', 'type' => 'custom:5:180', 'method' => 'username_length', 'explain' => true),
|
||||
@@ -319,6 +319,7 @@ class acp_board
|
||||
'load_online_guests' => array('lang' => 'YES_ONLINE_GUESTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
'load_onlinetrack' => array('lang' => 'YES_ONLINE_TRACK', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
'load_birthdays' => array('lang' => 'YES_BIRTHDAYS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
'load_unreads_search' => array('lang' => 'YES_UNREAD_SEARCH', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
|
||||
'load_moderators' => array('lang' => 'YES_MODERATORS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
|
||||
'load_jumpbox' => array('lang' => 'YES_JUMPBOX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
|
||||
'load_user_activity' => array('lang' => 'LOAD_USER_ACTIVITY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
@@ -382,9 +383,14 @@ class acp_board
|
||||
'referer_validation' => array('lang' => 'REFERER_VALID', 'validate' => 'int:0:3','type' => 'custom', 'method' => 'select_ref_check', 'explain' => true),
|
||||
'check_dnsbl' => array('lang' => 'CHECK_DNSBL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
'email_check_mx' => array('lang' => 'EMAIL_CHECK_MX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
'max_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:8:255', 'type' => false, 'method' => false, 'explain' => false,),
|
||||
'min_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:1', 'type' => 'custom', 'method' => 'password_length', 'explain' => true),
|
||||
'pass_complex' => array('lang' => 'PASSWORD_TYPE', 'validate' => 'string', 'type' => 'select', 'method' => 'select_password_chars', 'explain' => true),
|
||||
'chg_passforce' => array('lang' => 'FORCE_PASS_CHANGE', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
|
||||
'max_login_attempts' => array('lang' => 'MAX_LOGIN_ATTEMPTS', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true),
|
||||
'ip_login_limit_max' => array('lang' => 'IP_LOGIN_LIMIT_MAX', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true),
|
||||
'ip_login_limit_time' => array('lang' => 'IP_LOGIN_LIMIT_TIME', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
|
||||
'ip_login_limit_use_forwarded' => array('lang' => 'IP_LOGIN_LIMIT_USE_FORWARDED', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
'tpl_allow_php' => array('lang' => 'TPL_ALLOW_PHP', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
'form_token_lifetime' => array('lang' => 'FORM_TIME_MAX', 'validate' => 'int:-1', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
|
||||
'form_token_sid_guests' => array('lang' => 'FORM_SID_GUESTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
@@ -764,17 +770,28 @@ class acp_board
|
||||
/**
|
||||
* Select account activation method
|
||||
*/
|
||||
function select_acc_activation($value, $key = '')
|
||||
function select_acc_activation($selected_value, $value)
|
||||
{
|
||||
global $user, $config;
|
||||
|
||||
$radio_ary = array(USER_ACTIVATION_DISABLE => 'ACC_DISABLE', USER_ACTIVATION_NONE => 'ACC_NONE');
|
||||
$act_ary = array(
|
||||
'ACC_DISABLE' => USER_ACTIVATION_DISABLE,
|
||||
'ACC_NONE' => USER_ACTIVATION_NONE,
|
||||
);
|
||||
if ($config['email_enable'])
|
||||
{
|
||||
$radio_ary += array(USER_ACTIVATION_SELF => 'ACC_USER', USER_ACTIVATION_ADMIN => 'ACC_ADMIN');
|
||||
$act_ary['ACC_USER'] = USER_ACTIVATION_SELF;
|
||||
$act_ary['ACC_ADMIN'] = USER_ACTIVATION_ADMIN;
|
||||
}
|
||||
$act_options = '';
|
||||
|
||||
foreach ($act_ary as $key => $value)
|
||||
{
|
||||
$selected = ($selected_value == $value) ? ' selected="selected"' : '';
|
||||
$act_options .= '<option value="' . $value . '"' . $selected . '>' . $user->lang[$key] . '</option>';
|
||||
}
|
||||
|
||||
return h_radio('config[require_activation]', $radio_ary, $value, $key);
|
||||
return $act_options;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -888,8 +905,8 @@ class acp_board
|
||||
$old_tz = $user->timezone;
|
||||
$old_dst = $user->dst;
|
||||
|
||||
$user->timezone = $config['board_timezone'];
|
||||
$user->dst = $config['board_dst'];
|
||||
$user->timezone = $config['board_timezone'] * 3600;
|
||||
$user->dst = $config['board_dst'] * 3600;
|
||||
|
||||
$dateformat_options = '';
|
||||
|
||||
|
@@ -89,14 +89,14 @@ class acp_captcha
|
||||
}
|
||||
else
|
||||
{
|
||||
trigger_error($user->lang['CAPTCHA_UNAVAILABLE'] . adm_back_link($this->u_action));
|
||||
trigger_error($user->lang['CAPTCHA_UNAVAILABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
}
|
||||
trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
|
||||
}
|
||||
else if ($submit)
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link());
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -21,6 +21,7 @@ if (!defined('IN_PHPBB'))
|
||||
*/
|
||||
class acp_database
|
||||
{
|
||||
var $db_tools;
|
||||
var $u_action;
|
||||
|
||||
function main($id, $mode)
|
||||
@@ -28,6 +29,12 @@ class acp_database
|
||||
global $cache, $db, $user, $auth, $template, $table_prefix;
|
||||
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
|
||||
|
||||
if (!class_exists('phpbb_db_tools'))
|
||||
{
|
||||
require($phpbb_root_path . 'includes/db/db_tools.' . $phpEx);
|
||||
}
|
||||
$this->db_tools = new phpbb_db_tools($db);
|
||||
|
||||
$user->add_lang('acp/database');
|
||||
|
||||
$this->tpl_name = 'acp_database';
|
||||
@@ -50,7 +57,7 @@ class acp_database
|
||||
{
|
||||
case 'download':
|
||||
$type = request_var('type', '');
|
||||
$table = request_var('table', array(''));
|
||||
$table = array_intersect($this->db_tools->sql_list_tables(), request_var('table', array('')));
|
||||
$format = request_var('method', '');
|
||||
$where = request_var('where', '');
|
||||
|
||||
@@ -109,6 +116,7 @@ class acp_database
|
||||
|
||||
case 'mssql':
|
||||
case 'mssql_odbc':
|
||||
case 'mssqlnative':
|
||||
$extractor = new mssql_extractor($download, $store, $format, $filename, $time);
|
||||
break;
|
||||
|
||||
@@ -138,6 +146,7 @@ class acp_database
|
||||
|
||||
case 'mssql':
|
||||
case 'mssql_odbc':
|
||||
case 'mssqlnative':
|
||||
$extractor->flush('TRUNCATE TABLE ' . $table_name . "GO\n");
|
||||
break;
|
||||
|
||||
@@ -171,8 +180,7 @@ class acp_database
|
||||
break;
|
||||
|
||||
default:
|
||||
include($phpbb_root_path . 'includes/functions_install.' . $phpEx);
|
||||
$tables = get_tables($db);
|
||||
$tables = $this->db_tools->sql_list_tables();
|
||||
asort($tables);
|
||||
foreach ($tables as $table_name)
|
||||
{
|
||||
@@ -219,6 +227,7 @@ class acp_database
|
||||
case 'submit':
|
||||
$delete = request_var('delete', '');
|
||||
$file = request_var('file', '');
|
||||
$download = request_var('download', '');
|
||||
|
||||
if (!preg_match('#^backup_\d{10,}_[a-z\d]{16}\.(sql(?:\.(?:gz|bz2))?)$#', $file, $matches))
|
||||
{
|
||||
@@ -245,10 +254,8 @@ class acp_database
|
||||
confirm_box(false, $user->lang['DELETE_SELECTED_BACKUP'], build_hidden_fields(array('delete' => $delete, 'file' => $file)));
|
||||
}
|
||||
}
|
||||
else
|
||||
else if ($download || confirm_box(true))
|
||||
{
|
||||
$download = request_var('download', '');
|
||||
|
||||
if ($download)
|
||||
{
|
||||
$name = $matches[0];
|
||||
@@ -392,6 +399,7 @@ class acp_database
|
||||
|
||||
case 'mssql':
|
||||
case 'mssql_odbc':
|
||||
case 'mssqlnative':
|
||||
while (($sql = $fgetd($fp, "GO\n", $read, $seek, $eof)) !== false)
|
||||
{
|
||||
$db->sql_query($sql);
|
||||
@@ -408,6 +416,10 @@ class acp_database
|
||||
trigger_error($user->lang['RESTORE_SUCCESS'] . adm_back_link($this->u_action));
|
||||
break;
|
||||
}
|
||||
else if (!$download)
|
||||
{
|
||||
confirm_box(false, $user->lang['RESTORE_SELECTED_BACKUP'], build_hidden_fields(array('file' => $file)));
|
||||
}
|
||||
|
||||
default:
|
||||
$methods = array('sql');
|
||||
@@ -435,7 +447,7 @@ class acp_database
|
||||
{
|
||||
if (in_array($matches[2], $methods))
|
||||
{
|
||||
$backup_files[gmdate("d-m-Y H:i:s", $matches[1])] = $file;
|
||||
$backup_files[(int) $matches[1]] = $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -450,7 +462,7 @@ class acp_database
|
||||
{
|
||||
$template->assign_block_vars('files', array(
|
||||
'FILE' => $file,
|
||||
'NAME' => $name,
|
||||
'NAME' => $user->format_date($name, 'd-m-Y H:i:s', true),
|
||||
'SUPPORTED' => true,
|
||||
));
|
||||
}
|
||||
@@ -1509,6 +1521,10 @@ class mssql_extractor extends base_extractor
|
||||
{
|
||||
$this->write_data_mssql($table_name);
|
||||
}
|
||||
else if($db->sql_layer === 'mssqlnative')
|
||||
{
|
||||
$this->write_data_mssqlnative($table_name);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->write_data_odbc($table_name);
|
||||
@@ -1608,7 +1624,111 @@ class mssql_extractor extends base_extractor
|
||||
}
|
||||
$this->flush($sql_data);
|
||||
}
|
||||
|
||||
function write_data_mssqlnative($table_name)
|
||||
{
|
||||
global $db;
|
||||
$ary_type = $ary_name = array();
|
||||
$ident_set = false;
|
||||
$sql_data = '';
|
||||
|
||||
// Grab all of the data from current table.
|
||||
$sql = "SELECT * FROM $table_name";
|
||||
$db->mssqlnative_set_query_options(array('Scrollable' => SQLSRV_CURSOR_STATIC));
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$retrieved_data = $db->mssqlnative_num_rows($result);
|
||||
|
||||
if (!$retrieved_data)
|
||||
{
|
||||
$db->sql_freeresult($result);
|
||||
return;
|
||||
}
|
||||
|
||||
$sql = "SELECT * FROM $table_name";
|
||||
$result_fields = $db->sql_query_limit($sql, 1);
|
||||
|
||||
$row = new result_mssqlnative($result_fields);
|
||||
$i_num_fields = $row->num_fields();
|
||||
|
||||
for ($i = 0; $i < $i_num_fields; $i++)
|
||||
{
|
||||
$ary_type[$i] = $row->field_type($i);
|
||||
$ary_name[$i] = $row->field_name($i);
|
||||
}
|
||||
$db->sql_freeresult($result_fields);
|
||||
|
||||
$sql = "SELECT 1 as has_identity
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE COLUMNPROPERTY(object_id('$table_name'), COLUMN_NAME, 'IsIdentity') = 1";
|
||||
$result2 = $db->sql_query($sql);
|
||||
$row2 = $db->sql_fetchrow($result2);
|
||||
|
||||
if (!empty($row2['has_identity']))
|
||||
{
|
||||
$sql_data .= "\nSET IDENTITY_INSERT $table_name ON\nGO\n";
|
||||
$ident_set = true;
|
||||
}
|
||||
$db->sql_freeresult($result2);
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$schema_vals = $schema_fields = array();
|
||||
|
||||
// Build the SQL statement to recreate the data.
|
||||
for ($i = 0; $i < $i_num_fields; $i++)
|
||||
{
|
||||
$str_val = $row[$ary_name[$i]];
|
||||
|
||||
// defaults to type number - better quote just to be safe, so check for is_int too
|
||||
if (is_int($ary_type[$i]) || preg_match('#char|text|bool|varbinary#i', $ary_type[$i]))
|
||||
{
|
||||
$str_quote = '';
|
||||
$str_empty = "''";
|
||||
$str_val = sanitize_data_mssql(str_replace("'", "''", $str_val));
|
||||
}
|
||||
else if (preg_match('#date|timestamp#i', $ary_type[$i]))
|
||||
{
|
||||
if (empty($str_val))
|
||||
{
|
||||
$str_quote = '';
|
||||
}
|
||||
else
|
||||
{
|
||||
$str_quote = "'";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$str_quote = '';
|
||||
$str_empty = 'NULL';
|
||||
}
|
||||
|
||||
if (empty($str_val) && $str_val !== '0' && !(is_int($str_val) || is_float($str_val)))
|
||||
{
|
||||
$str_val = $str_empty;
|
||||
}
|
||||
|
||||
$schema_vals[$i] = $str_quote . $str_val . $str_quote;
|
||||
$schema_fields[$i] = $ary_name[$i];
|
||||
}
|
||||
|
||||
// Take the ordered fields and their associated data and build it
|
||||
// into a valid sql statement to recreate that field in the data.
|
||||
$sql_data .= "INSERT INTO $table_name (" . implode(', ', $schema_fields) . ') VALUES (' . implode(', ', $schema_vals) . ");\nGO\n";
|
||||
|
||||
$this->flush($sql_data);
|
||||
$sql_data = '';
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
if ($ident_set)
|
||||
{
|
||||
$sql_data .= "\nSET IDENTITY_INSERT $table_name OFF\nGO\n";
|
||||
}
|
||||
$this->flush($sql_data);
|
||||
}
|
||||
|
||||
function write_data_odbc($table_name)
|
||||
{
|
||||
global $db;
|
||||
|
@@ -56,6 +56,18 @@ class acp_disallow
|
||||
trigger_error($user->lang['NO_USERNAME_SPECIFIED'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$sql = 'SELECT disallow_id
|
||||
FROM ' . DISALLOW_TABLE . "
|
||||
WHERE disallow_username = '" . $db->sql_escape($disallowed_user) . "'";
|
||||
$result = $db->sql_query($sql);
|
||||
$row = $db->sql_fetchrow($result);
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
if ($row)
|
||||
{
|
||||
trigger_error($user->lang['DISALLOWED_ALREADY'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$sql = 'INSERT INTO ' . DISALLOW_TABLE . ' ' . $db->sql_build_array('INSERT', array('disallow_username' => $disallowed_user));
|
||||
$db->sql_query($sql);
|
||||
|
||||
|
@@ -82,23 +82,48 @@ class acp_email
|
||||
{
|
||||
if ($group_id)
|
||||
{
|
||||
$sql = 'SELECT u.user_email, u.username, u.username_clean, u.user_lang, u.user_jabber, u.user_notify_type
|
||||
FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . ' ug
|
||||
WHERE ug.group_id = ' . $group_id . '
|
||||
$sql_ary = array(
|
||||
'SELECT' => 'u.user_email, u.username, u.username_clean, u.user_lang, u.user_jabber, u.user_notify_type',
|
||||
'FROM' => array(
|
||||
USERS_TABLE => 'u',
|
||||
USER_GROUP_TABLE => 'ug',
|
||||
),
|
||||
'WHERE' => 'ug.group_id = ' . $group_id . '
|
||||
AND ug.user_pending = 0
|
||||
AND u.user_id = ug.user_id
|
||||
AND u.user_allow_massemail = 1
|
||||
AND u.user_type IN (' . USER_NORMAL . ', ' . USER_FOUNDER . ')
|
||||
ORDER BY u.user_lang, u.user_notify_type';
|
||||
AND u.user_type IN (' . USER_NORMAL . ', ' . USER_FOUNDER . ')',
|
||||
'ORDER_BY' => 'u.user_lang, u.user_notify_type',
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql = 'SELECT username, username_clean, user_email, user_jabber, user_notify_type, user_lang
|
||||
FROM ' . USERS_TABLE . '
|
||||
WHERE user_allow_massemail = 1
|
||||
AND user_type IN (' . USER_NORMAL . ', ' . USER_FOUNDER . ')
|
||||
ORDER BY user_lang, user_notify_type';
|
||||
$sql_ary = array(
|
||||
'SELECT' => 'u.username, u.username_clean, u.user_email, u.user_jabber, u.user_lang, u.user_notify_type',
|
||||
'FROM' => array(
|
||||
USERS_TABLE => 'u',
|
||||
),
|
||||
'WHERE' => 'u.user_allow_massemail = 1
|
||||
AND u.user_type IN (' . USER_NORMAL . ', ' . USER_FOUNDER . ')',
|
||||
'ORDER_BY' => 'u.user_lang, u.user_notify_type',
|
||||
);
|
||||
}
|
||||
|
||||
// Mail banned or not
|
||||
if (!isset($_REQUEST['mail_banned_flag']))
|
||||
{
|
||||
$sql_ary['WHERE'] .= ' AND (b.ban_id IS NULL
|
||||
OR b.ban_exclude = 1)';
|
||||
$sql_ary['LEFT_JOIN'] = array(
|
||||
array(
|
||||
'FROM' => array(
|
||||
BANLIST_TABLE => 'b',
|
||||
),
|
||||
'ON' => 'u.user_id = b.ban_userid',
|
||||
),
|
||||
);
|
||||
}
|
||||
$sql = $db->sql_build_query('SELECT', $sql_ary);
|
||||
}
|
||||
$result = $db->sql_query($sql);
|
||||
$row = $db->sql_fetchrow($result);
|
||||
@@ -111,8 +136,9 @@ class acp_email
|
||||
|
||||
$i = $j = 0;
|
||||
|
||||
// Send with BCC, no more than 50 recipients for one mail (to not exceed the limit)
|
||||
$max_chunk_size = 50;
|
||||
// Send with BCC
|
||||
// Maximum number of bcc recipients
|
||||
$max_chunk_size = (int) $config['email_max_chunk_size'];
|
||||
$email_list = array();
|
||||
$old_lang = $row['user_lang'];
|
||||
$old_notify_type = $row['user_notify_type'];
|
||||
@@ -169,10 +195,7 @@ class acp_email
|
||||
|
||||
$messenger->template('admin_send_email', $used_lang);
|
||||
|
||||
$messenger->headers('X-AntiAbuse: Board servername - ' . $config['server_name']);
|
||||
$messenger->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']);
|
||||
$messenger->headers('X-AntiAbuse: Username - ' . $user->data['username']);
|
||||
$messenger->headers('X-AntiAbuse: User IP - ' . $user->ip);
|
||||
$messenger->anti_abuse_headers($config, $user);
|
||||
|
||||
$messenger->subject(htmlspecialchars_decode($subject));
|
||||
$messenger->set_mail_priority($priority);
|
||||
|
@@ -169,7 +169,7 @@ class acp_forums
|
||||
$forum_data['forum_status'] = ITEM_UNLOCKED;
|
||||
}
|
||||
|
||||
$forum_data['show_active'] = ($forum_data['forum_type'] == FORUM_POST) ? request_var('display_recent', true) : request_var('display_active', true);
|
||||
$forum_data['show_active'] = ($forum_data['forum_type'] == FORUM_POST) ? request_var('display_recent', true) : request_var('display_active', false);
|
||||
|
||||
// Get data for forum rules if specified...
|
||||
if ($forum_data['forum_rules'])
|
||||
@@ -190,12 +190,14 @@ class acp_forums
|
||||
$forum_perm_from = request_var('forum_perm_from', 0);
|
||||
$cache->destroy('sql', FORUMS_TABLE);
|
||||
|
||||
$copied_permissions = false;
|
||||
// Copy permissions?
|
||||
if ($forum_perm_from && $forum_perm_from != $forum_data['forum_id'] &&
|
||||
($action != 'edit' || empty($forum_id) || ($auth->acl_get('a_fauth') && $auth->acl_get('a_authusers') && $auth->acl_get('a_authgroups') && $auth->acl_get('a_mauth'))))
|
||||
{
|
||||
copy_forum_permissions($forum_perm_from, $forum_data['forum_id'], ($action == 'edit') ? true : false);
|
||||
cache_moderators();
|
||||
$copied_permissions = true;
|
||||
}
|
||||
/* Commented out because of questionable UI workflow - re-visit for 3.0.7
|
||||
else if (!$this->parent_id && $action != 'edit' && $auth->acl_get('a_fauth') && $auth->acl_get('a_authusers') && $auth->acl_get('a_authgroups') && $auth->acl_get('a_mauth'))
|
||||
@@ -210,15 +212,11 @@ class acp_forums
|
||||
|
||||
$message = ($action == 'add') ? $user->lang['FORUM_CREATED'] : $user->lang['FORUM_UPDATED'];
|
||||
|
||||
// Redirect to permissions
|
||||
if ($auth->acl_get('a_fauth'))
|
||||
// redirect directly to permission settings screen if authed
|
||||
if ($action == 'add' && !$copied_permissions && $auth->acl_get('a_fauth'))
|
||||
{
|
||||
$message .= '<br /><br />' . sprintf($user->lang['REDIRECT_ACL'], '<a href="' . append_sid("{$phpbb_admin_path}index.$phpEx", 'i=permissions' . $acl_url) . '">', '</a>');
|
||||
}
|
||||
|
||||
// redirect directly to permission settings screen if authed
|
||||
if ($action == 'add' && !$forum_perm_from && $auth->acl_get('a_fauth'))
|
||||
{
|
||||
meta_refresh(4, append_sid("{$phpbb_admin_path}index.$phpEx", 'i=permissions' . $acl_url));
|
||||
}
|
||||
|
||||
@@ -639,7 +637,8 @@ class acp_forums
|
||||
'S_PRUNE_OLD_POLLS' => ($forum_data['forum_flags'] & FORUM_FLAG_PRUNE_POLL) ? true : false,
|
||||
'S_PRUNE_ANNOUNCE' => ($forum_data['forum_flags'] & FORUM_FLAG_PRUNE_ANNOUNCE) ? true : false,
|
||||
'S_PRUNE_STICKY' => ($forum_data['forum_flags'] & FORUM_FLAG_PRUNE_STICKY) ? true : false,
|
||||
'S_DISPLAY_ACTIVE_TOPICS' => ($forum_data['forum_flags'] & FORUM_FLAG_ACTIVE_TOPICS) ? true : false,
|
||||
'S_DISPLAY_ACTIVE_TOPICS' => ($forum_data['forum_type'] == FORUM_POST) ? ($forum_data['forum_flags'] & FORUM_FLAG_ACTIVE_TOPICS) : true,
|
||||
'S_ENABLE_ACTIVE_TOPICS' => ($forum_data['forum_type'] == FORUM_CAT) ? ($forum_data['forum_flags'] & FORUM_FLAG_ACTIVE_TOPICS) : false,
|
||||
'S_ENABLE_POST_REVIEW' => ($forum_data['forum_flags'] & FORUM_FLAG_POST_REVIEW) ? true : false,
|
||||
'S_ENABLE_QUICK_REPLY' => ($forum_data['forum_flags'] & FORUM_FLAG_QUICK_REPLY) ? true : false,
|
||||
'S_CAN_COPY_PERMISSIONS' => ($action != 'edit' || empty($forum_id) || ($auth->acl_get('a_fauth') && $auth->acl_get('a_authusers') && $auth->acl_get('a_authgroups') && $auth->acl_get('a_mauth'))) ? true : false,
|
||||
@@ -872,7 +871,7 @@ class acp_forums
|
||||
|
||||
$errors = array();
|
||||
|
||||
if (!$forum_data['forum_name'])
|
||||
if ($forum_data['forum_name'] == '')
|
||||
{
|
||||
$errors[] = $user->lang['FORUM_NAME_EMPTY'];
|
||||
}
|
||||
@@ -980,7 +979,7 @@ class acp_forums
|
||||
|
||||
if (!$row)
|
||||
{
|
||||
trigger_error($user->lang['PARENT_NOT_EXIST'] . adm_back_link($this->u_action . '&' . $this->parent_id), E_USER_WARNING);
|
||||
trigger_error($user->lang['PARENT_NOT_EXIST'] . adm_back_link($this->u_action . '&parent_id=' . $this->parent_id), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if ($row['forum_type'] == FORUM_LINK)
|
||||
@@ -1639,6 +1638,9 @@ class acp_forums
|
||||
|
||||
delete_attachments('topic', $topic_ids, false);
|
||||
|
||||
// Delete shadow topics pointing to topics in this forum
|
||||
delete_topic_shadows($forum_id);
|
||||
|
||||
// Before we remove anything we make sure we are able to adjust the post counts later. ;)
|
||||
$sql = 'SELECT poster_id
|
||||
FROM ' . POSTS_TABLE . '
|
||||
@@ -1705,6 +1707,9 @@ class acp_forums
|
||||
)
|
||||
);
|
||||
|
||||
// Amount of rows we select and delete in one iteration.
|
||||
$batch_size = 500;
|
||||
|
||||
foreach ($tables_ary as $field => $tables)
|
||||
{
|
||||
$start = 0;
|
||||
@@ -1714,7 +1719,7 @@ class acp_forums
|
||||
$sql = "SELECT $field
|
||||
FROM " . POSTS_TABLE . '
|
||||
WHERE forum_id = ' . $forum_id;
|
||||
$result = $db->sql_query_limit($sql, 500, $start);
|
||||
$result = $db->sql_query_limit($sql, $batch_size, $start);
|
||||
|
||||
$ids = array();
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
@@ -1733,7 +1738,7 @@ class acp_forums
|
||||
}
|
||||
}
|
||||
}
|
||||
while ($row);
|
||||
while (sizeof($ids) == $batch_size);
|
||||
}
|
||||
unset($ids);
|
||||
|
||||
|
@@ -49,7 +49,7 @@ class acp_groups
|
||||
|
||||
|
||||
// Clear some vars
|
||||
$can_upload = (file_exists($phpbb_root_path . $config['avatar_path']) && @is_writable($phpbb_root_path . $config['avatar_path']) && $file_uploads) ? true : false;
|
||||
$can_upload = (file_exists($phpbb_root_path . $config['avatar_path']) && phpbb_is_writable($phpbb_root_path . $config['avatar_path']) && $file_uploads) ? true : false;
|
||||
$group_row = array();
|
||||
|
||||
// Grab basic data for group, if group_id is set and exists
|
||||
@@ -394,6 +394,15 @@ class acp_groups
|
||||
}
|
||||
}
|
||||
|
||||
// Validate the length of "Maximum number of allowed recipients per private message" setting.
|
||||
// We use 16777215 as a maximum because it matches MySQL unsigned mediumint maximum value
|
||||
// which is the lowest amongst DBMSes supported by phpBB3
|
||||
if ($max_recipients_error = validate_data($submit_ary, array('max_recipients' => array('num', false, 0, 16777215))))
|
||||
{
|
||||
// Replace "error" string with its real, localised form
|
||||
$error = array_merge($error, array_map(array(&$user, 'lang'), $max_recipients_error));
|
||||
}
|
||||
|
||||
if (!sizeof($error))
|
||||
{
|
||||
// Only set the rank, colour, etc. if it's changed or if we're adding a new
|
||||
|
@@ -394,6 +394,10 @@ class acp_icons
|
||||
{
|
||||
// skip images where add wasn't checked
|
||||
}
|
||||
else if (!file_exists($phpbb_root_path . $img_path . '/' . $image))
|
||||
{
|
||||
$errors[$image] = 'SMILIE_NO_FILE';
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($image_width[$image] == 0 || $image_height[$image] == 0)
|
||||
|
@@ -118,10 +118,7 @@ class acp_inactive
|
||||
|
||||
$messenger->to($row['user_email'], $row['username']);
|
||||
|
||||
$messenger->headers('X-AntiAbuse: Board servername - ' . $config['server_name']);
|
||||
$messenger->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']);
|
||||
$messenger->headers('X-AntiAbuse: Username - ' . $user->data['username']);
|
||||
$messenger->headers('X-AntiAbuse: User IP - ' . $user->ip);
|
||||
$messenger->anti_abuse_headers($config, $user);
|
||||
|
||||
$messenger->assign_vars(array(
|
||||
'USERNAME' => htmlspecialchars_decode($row['username']))
|
||||
@@ -209,10 +206,7 @@ class acp_inactive
|
||||
$messenger->to($row['user_email'], $row['username']);
|
||||
$messenger->im($row['user_jabber'], $row['username']);
|
||||
|
||||
$messenger->headers('X-AntiAbuse: Board servername - ' . $config['server_name']);
|
||||
$messenger->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']);
|
||||
$messenger->headers('X-AntiAbuse: Username - ' . $user->data['username']);
|
||||
$messenger->headers('X-AntiAbuse: User IP - ' . $user->ip);
|
||||
$messenger->anti_abuse_headers($config, $user);
|
||||
|
||||
$messenger->assign_vars(array(
|
||||
'USERNAME' => htmlspecialchars_decode($row['username']),
|
||||
@@ -301,7 +295,7 @@ class acp_inactive
|
||||
'PAGINATION' => generate_pagination($this->u_action . "&$u_sort_param&users_per_page=$per_page", $inactive_count, $per_page, $start, true),
|
||||
'USERS_PER_PAGE' => $per_page,
|
||||
|
||||
'U_ACTION' => $this->u_action . '&start=' . $start,
|
||||
'U_ACTION' => $this->u_action . "&$u_sort_param&users_per_page=$per_page&start=$start",
|
||||
));
|
||||
|
||||
$this->tpl_name = 'acp_inactive';
|
||||
|
@@ -919,6 +919,9 @@ class acp_language
|
||||
$default_lang_id = (int) $db->sql_fetchfield('lang_id');
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
// We want to notify the admin that custom profile fields need to be updated for the new language.
|
||||
$notify_cpf_update = false;
|
||||
|
||||
// From the mysql documentation:
|
||||
// Prior to MySQL 4.0.14, the target table of the INSERT statement cannot appear in the FROM clause of the SELECT part of the query. This limitation is lifted in 4.0.14.
|
||||
// Due to this we stay on the safe side if we do the insertion "the manual way"
|
||||
@@ -932,6 +935,7 @@ class acp_language
|
||||
{
|
||||
$row['lang_id'] = $lang_id;
|
||||
$db->sql_query('INSERT INTO ' . PROFILE_LANG_TABLE . ' ' . $db->sql_build_array('INSERT', $row));
|
||||
$notify_cpf_update = true;
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
@@ -944,12 +948,15 @@ class acp_language
|
||||
{
|
||||
$row['lang_id'] = $lang_id;
|
||||
$db->sql_query('INSERT INTO ' . PROFILE_FIELDS_LANG_TABLE . ' ' . $db->sql_build_array('INSERT', $row));
|
||||
$notify_cpf_update = true;
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
add_log('admin', 'LOG_LANGUAGE_PACK_INSTALLED', $lang_pack['name']);
|
||||
|
||||
trigger_error(sprintf($user->lang['LANGUAGE_PACK_INSTALLED'], $lang_pack['name']) . adm_back_link($this->u_action));
|
||||
$message = sprintf($user->lang['LANGUAGE_PACK_INSTALLED'], $lang_pack['name']);
|
||||
$message .= ($notify_cpf_update) ? '<br /><br />' . $user->lang['LANGUAGE_PACK_CPF_UPDATE'] : '';
|
||||
trigger_error($message . adm_back_link($this->u_action));
|
||||
|
||||
break;
|
||||
|
||||
@@ -1055,14 +1062,14 @@ class acp_language
|
||||
$iso_src .= htmlspecialchars_decode($row['lang_author']);
|
||||
$compress->add_data($iso_src, 'language/' . $row['lang_iso'] . '/iso.txt');
|
||||
|
||||
// index.html files
|
||||
$compress->add_data('', 'language/' . $row['lang_iso'] . '/index.html');
|
||||
$compress->add_data('', 'language/' . $row['lang_iso'] . '/email/index.html');
|
||||
$compress->add_data('', 'language/' . $row['lang_iso'] . '/acp/index.html');
|
||||
// index.htm files
|
||||
$compress->add_data('', 'language/' . $row['lang_iso'] . '/index.htm');
|
||||
$compress->add_data('', 'language/' . $row['lang_iso'] . '/email/index.htm');
|
||||
$compress->add_data('', 'language/' . $row['lang_iso'] . '/acp/index.htm');
|
||||
|
||||
if (sizeof($mod_files))
|
||||
{
|
||||
$compress->add_data('', 'language/' . $row['lang_iso'] . '/mods/index.html');
|
||||
$compress->add_data('', 'language/' . $row['lang_iso'] . '/mods/index.htm');
|
||||
}
|
||||
|
||||
$compress->close();
|
||||
@@ -1120,12 +1127,12 @@ class acp_language
|
||||
{
|
||||
while (($file = readdir($dp)) !== false)
|
||||
{
|
||||
if (!is_dir($phpbb_root_path . 'language/' . $file))
|
||||
if ($file[0] == '.' || !is_dir($phpbb_root_path . 'language/' . $file))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($file[0] != '.' && file_exists("{$phpbb_root_path}language/$file/iso.txt"))
|
||||
if (file_exists("{$phpbb_root_path}language/$file/iso.txt"))
|
||||
{
|
||||
if (!in_array($file, $installed))
|
||||
{
|
||||
@@ -1217,7 +1224,7 @@ $lang = array_merge($lang, array(
|
||||
';
|
||||
|
||||
// Language files in language root directory
|
||||
$this->main_files = array("common.$phpEx", "groups.$phpEx", "install.$phpEx", "mcp.$phpEx", "memberlist.$phpEx", "posting.$phpEx", "search.$phpEx", "ucp.$phpEx", "viewforum.$phpEx", "viewtopic.$phpEx", "help_bbcode.$phpEx", "help_faq.$phpEx");
|
||||
$this->main_files = array("captcha_qa.$phpEx", "captcha_recaptcha.$phpEx", "common.$phpEx", "groups.$phpEx", "install.$phpEx", "mcp.$phpEx", "memberlist.$phpEx", "posting.$phpEx", "search.$phpEx", "ucp.$phpEx", "viewforum.$phpEx", "viewtopic.$phpEx", "help_bbcode.$phpEx", "help_faq.$phpEx");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -127,12 +127,12 @@ class acp_logs
|
||||
// Grab log data
|
||||
$log_data = array();
|
||||
$log_count = 0;
|
||||
view_log($mode, $log_data, $log_count, $config['topics_per_page'], $start, $forum_id, 0, 0, $sql_where, $sql_sort, $keywords);
|
||||
$start = view_log($mode, $log_data, $log_count, $config['topics_per_page'], $start, $forum_id, 0, 0, $sql_where, $sql_sort, $keywords);
|
||||
|
||||
$template->assign_vars(array(
|
||||
'L_TITLE' => $l_title,
|
||||
'L_EXPLAIN' => $l_title_explain,
|
||||
'U_ACTION' => $this->u_action,
|
||||
'U_ACTION' => $this->u_action . "&$u_sort_param$keywords_param&start=$start",
|
||||
|
||||
'S_ON_PAGE' => on_page($log_count, $config['topics_per_page'], $start),
|
||||
'PAGINATION' => generate_pagination($this->u_action . "&$u_sort_param$keywords_param", $log_count, $config['topics_per_page'], $start, true),
|
||||
|
@@ -201,7 +201,7 @@ class acp_main
|
||||
// No maximum post id? :o
|
||||
if (!$max_post_id)
|
||||
{
|
||||
$sql = 'SELECT MAX(post_id)
|
||||
$sql = 'SELECT MAX(post_id) as max_post_id
|
||||
FROM ' . POSTS_TABLE;
|
||||
$result = $db->sql_query($sql);
|
||||
$max_post_id = (int) $db->sql_fetchfield('max_post_id');
|
||||
@@ -398,11 +398,11 @@ class acp_main
|
||||
// Version check
|
||||
$user->add_lang('install');
|
||||
|
||||
if ($auth->acl_get('a_server') && version_compare(PHP_VERSION, '5.2.0', '<'))
|
||||
if ($auth->acl_get('a_server') && version_compare(PHP_VERSION, '5.3.2', '<'))
|
||||
{
|
||||
$template->assign_vars(array(
|
||||
'S_PHP_VERSION_OLD' => true,
|
||||
'L_PHP_VERSION_OLD' => sprintf($user->lang['PHP_VERSION_OLD'], '<a href="http://www.phpbb.com/community/viewtopic.php?f=14&t=1958605">', '</a>'),
|
||||
'L_PHP_VERSION_OLD' => sprintf($user->lang['PHP_VERSION_OLD'], '<a href="http://www.phpbb.com/community/viewtopic.php?f=14&t=2152375">', '</a>'),
|
||||
));
|
||||
}
|
||||
|
||||
@@ -415,11 +415,8 @@ class acp_main
|
||||
{
|
||||
$latest_version_info = explode("\n", $latest_version_info);
|
||||
|
||||
$latest_version = str_replace('rc', 'RC', strtolower(trim($latest_version_info[0])));
|
||||
$current_version = str_replace('rc', 'RC', strtolower($config['version']));
|
||||
|
||||
$template->assign_vars(array(
|
||||
'S_VERSION_UP_TO_DATE' => version_compare($current_version, $latest_version, '<') ? false : true,
|
||||
'S_VERSION_UP_TO_DATE' => phpbb_version_compare(trim($latest_version_info[0]), $config['version'], '<='),
|
||||
));
|
||||
}
|
||||
|
||||
@@ -521,7 +518,7 @@ class acp_main
|
||||
'U_ADMIN_LOG' => append_sid("{$phpbb_admin_path}index.$phpEx", 'i=logs&mode=admin'),
|
||||
'U_INACTIVE_USERS' => append_sid("{$phpbb_admin_path}index.$phpEx", 'i=inactive&mode=list'),
|
||||
'U_VERSIONCHECK' => append_sid("{$phpbb_admin_path}index.$phpEx", 'i=update&mode=version_check'),
|
||||
'U_VERSIONCHECK_FORCE' => append_sid("{$phpbb_admin_path}index.$phpEx", 'i=1&versioncheck_force=1'),
|
||||
'U_VERSIONCHECK_FORCE' => append_sid("{$phpbb_admin_path}index.$phpEx", 'versioncheck_force=1'),
|
||||
|
||||
'S_ACTION_OPTIONS' => ($auth->acl_get('a_board')) ? true : false,
|
||||
'S_FOUNDER' => ($user->data['user_type'] == USER_FOUNDER) ? true : false,
|
||||
@@ -529,7 +526,7 @@ class acp_main
|
||||
);
|
||||
|
||||
$log_data = array();
|
||||
$log_count = 0;
|
||||
$log_count = false;
|
||||
|
||||
if ($auth->acl_get('a_viewlogs'))
|
||||
{
|
||||
@@ -603,6 +600,17 @@ class acp_main
|
||||
$template->assign_var('S_WRITABLE_CONFIG', (bool) (@fileperms($phpbb_root_path . 'config.' . $phpEx) & 0x0002));
|
||||
}
|
||||
|
||||
if (extension_loaded('mbstring'))
|
||||
{
|
||||
$template->assign_vars(array(
|
||||
'S_MBSTRING_LOADED' => true,
|
||||
'S_MBSTRING_FUNC_OVERLOAD_FAIL' => (intval(@ini_get('mbstring.func_overload')) & (MB_OVERLOAD_MAIL | MB_OVERLOAD_STRING)),
|
||||
'S_MBSTRING_ENCODING_TRANSLATION_FAIL' => (@ini_get('mbstring.encoding_translation') != 0),
|
||||
'S_MBSTRING_HTTP_INPUT_FAIL' => (@ini_get('mbstring.http_input') != 'pass'),
|
||||
'S_MBSTRING_HTTP_OUTPUT_FAIL' => (@ini_get('mbstring.http_output') != 'pass'),
|
||||
));
|
||||
}
|
||||
|
||||
// Fill dbms version if not yet filled
|
||||
if (empty($config['dbms_version']))
|
||||
{
|
||||
|
@@ -35,9 +35,9 @@ class acp_php_info
|
||||
|
||||
$this->tpl_name = 'acp_php_info';
|
||||
$this->page_title = 'ACP_PHP_INFO';
|
||||
|
||||
|
||||
ob_start();
|
||||
@phpinfo(INFO_GENERAL | INFO_CONFIGURATION | INFO_MODULES | INFO_VARIABLES);
|
||||
phpinfo(INFO_GENERAL | INFO_CONFIGURATION | INFO_MODULES | INFO_VARIABLES);
|
||||
$phpinfo = ob_get_clean();
|
||||
|
||||
$phpinfo = trim($phpinfo);
|
||||
@@ -67,6 +67,9 @@ class acp_php_info
|
||||
$output = preg_replace('#<img border="0"#i', '<img', $output);
|
||||
$output = str_replace(array('class="e"', 'class="v"', 'class="h"', '<hr />', '<font', '</font>'), array('class="row1"', 'class="row2"', '', '', '<span', '</span>'), $output);
|
||||
|
||||
// Fix invalid anchor names (eg "module_Zend Optimizer")
|
||||
$output = preg_replace_callback('#<a name="([^"]+)">#', array($this, 'remove_spaces'), $output);
|
||||
|
||||
if (empty($output))
|
||||
{
|
||||
trigger_error('NO_PHPINFO_AVAILABLE', E_USER_WARNING);
|
||||
@@ -79,6 +82,11 @@ class acp_php_info
|
||||
|
||||
$template->assign_var('PHPINFO', $output);
|
||||
}
|
||||
|
||||
function remove_spaces($matches)
|
||||
{
|
||||
return '<a name="' . str_replace(' ', '_', $matches[1]) . '">';
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user