Compare commits
1072 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
5df5c64e4f | ||
![]() |
3c4b19743f | ||
![]() |
0e25ce553c | ||
![]() |
2e4bbeb7f7 | ||
![]() |
cb6640343b | ||
![]() |
4658d1cb29 | ||
![]() |
b25feaadf6 | ||
![]() |
2693db5f6f | ||
![]() |
8195b44061 | ||
![]() |
035d0c1012 | ||
![]() |
5a953ce901 | ||
![]() |
01660bd2b4 | ||
![]() |
5b858c521a | ||
![]() |
d1c5a189c3 | ||
![]() |
de1bb37bcb | ||
![]() |
e0036a3e32 | ||
![]() |
7f4737631d | ||
![]() |
317505bf19 | ||
![]() |
55b8645d3f | ||
![]() |
ffb8f0879b | ||
![]() |
79f5614dce | ||
![]() |
2c347d0eac | ||
![]() |
d40178104b | ||
![]() |
55543ee881 | ||
![]() |
d39386cfab | ||
![]() |
b5bbae62b0 | ||
![]() |
71ef30d35e | ||
![]() |
263c7bed07 | ||
![]() |
1458b7a412 | ||
![]() |
3e00c52128 | ||
![]() |
d73aceb272 | ||
![]() |
1c55d4a220 | ||
![]() |
1edf8833c8 | ||
![]() |
0ffc5f68b4 | ||
![]() |
81b6652738 | ||
![]() |
e5b4d2c6b3 | ||
![]() |
da1830371f | ||
![]() |
6ba04967ed | ||
![]() |
f503e140f3 | ||
![]() |
f875f3cd20 | ||
![]() |
72632c7b45 | ||
![]() |
1f2e7bd72d | ||
![]() |
016138ab55 | ||
![]() |
77efb80a12 | ||
![]() |
02eea950e4 | ||
![]() |
2793c41655 | ||
![]() |
62d3c198d5 | ||
![]() |
ef62b53cec | ||
![]() |
7181b988e9 | ||
![]() |
8b0b123f42 | ||
![]() |
f98332c698 | ||
![]() |
b1660bf27a | ||
![]() |
191ad25eb2 | ||
![]() |
7469be6efb | ||
![]() |
47a3bfd265 | ||
![]() |
5ae0be2323 | ||
![]() |
42154d55a0 | ||
![]() |
9dcc08ee6e | ||
![]() |
ba537b42bb | ||
![]() |
9c318f9012 | ||
![]() |
a88103a956 | ||
![]() |
e26e6f3a1c | ||
![]() |
08d67a07e0 | ||
![]() |
6e9a89cb2e | ||
![]() |
e3aa3d4031 | ||
![]() |
156a68f8bd | ||
![]() |
6a28da5d33 | ||
![]() |
ee32384dca | ||
![]() |
19afd73e8a | ||
![]() |
eead6a2975 | ||
![]() |
11b11dd3ee | ||
![]() |
483155cf4c | ||
![]() |
55dbade8d5 | ||
![]() |
d1bc63d07a | ||
![]() |
83a91ec540 | ||
![]() |
7b43c972dd | ||
![]() |
3fdf1d3f44 | ||
![]() |
764db0c203 | ||
![]() |
538076bc45 | ||
![]() |
4327b66f91 | ||
![]() |
3f27724569 | ||
![]() |
9c0c2bbece | ||
![]() |
946144016b | ||
![]() |
5c3b01aca4 | ||
![]() |
50983a2b85 | ||
![]() |
765886f0c7 | ||
![]() |
8ea78a5852 | ||
![]() |
063cbab93e | ||
![]() |
f1670f4012 | ||
![]() |
6fcf0f7117 | ||
![]() |
7a07763625 | ||
![]() |
8d2172a649 | ||
![]() |
b8f65207b6 | ||
![]() |
ea675afe86 | ||
![]() |
cc1cebf359 | ||
![]() |
1e874c7027 | ||
![]() |
a338fd967c | ||
![]() |
8796ff7e72 | ||
![]() |
a8172a518f | ||
![]() |
559c2c7bd2 | ||
![]() |
7a546e5a41 | ||
![]() |
5f7a9154b7 | ||
![]() |
0d52978d9f | ||
![]() |
df48363ea4 | ||
![]() |
34725e0257 | ||
![]() |
df321154f6 | ||
![]() |
f2a3ec1185 | ||
![]() |
ce4aed0f17 | ||
![]() |
d0c82f6fb0 | ||
![]() |
89b76e721d | ||
![]() |
6091290efe | ||
![]() |
e4c4990e7f | ||
![]() |
4f1235bfe9 | ||
![]() |
bf9d440a95 | ||
![]() |
59a149c253 | ||
![]() |
563099f290 | ||
![]() |
3732bf988d | ||
![]() |
ab964fa1de | ||
![]() |
b5c694224e | ||
![]() |
23810345f6 | ||
![]() |
b574a29331 | ||
![]() |
6593e32d83 | ||
![]() |
b09adc836d | ||
![]() |
dcf9a45974 | ||
![]() |
21258313ef | ||
![]() |
f851fa3845 | ||
![]() |
2fdd507902 | ||
![]() |
b850e56ff1 | ||
![]() |
8d10082179 | ||
![]() |
996ae625c9 | ||
![]() |
467f7ef927 | ||
![]() |
fa015b8d39 | ||
![]() |
4b4864561c | ||
![]() |
475cea8549 | ||
![]() |
760214fdbd | ||
![]() |
9c5dcd7b19 | ||
![]() |
720e400f7c | ||
![]() |
c261c6ba48 | ||
![]() |
933d4e1d6f | ||
![]() |
1d08833726 | ||
![]() |
7cfca55e3c | ||
![]() |
7e13b62b8f | ||
![]() |
5ccfcd541e | ||
![]() |
ba4d2a9c48 | ||
![]() |
7a61f613ec | ||
![]() |
073d9da0bc | ||
![]() |
e081a67589 | ||
![]() |
37a27b8065 | ||
![]() |
d34f7eb2fc | ||
![]() |
f6c080cb5c | ||
![]() |
a983fd03b1 | ||
![]() |
5b651886a5 | ||
![]() |
6484ab75d9 | ||
![]() |
becad18465 | ||
![]() |
ec7e5a8838 | ||
![]() |
300c1b4ebc | ||
![]() |
4f0dd89eb9 | ||
![]() |
79f7c3dbd4 | ||
![]() |
f24fc75b12 | ||
![]() |
4fcc71e127 | ||
![]() |
403b4aa89b | ||
![]() |
613bcf379b | ||
![]() |
8f2cc2ca38 | ||
![]() |
cdae11226d | ||
![]() |
79fd97ad78 | ||
![]() |
b477d4c821 | ||
![]() |
289f82ad23 | ||
![]() |
92569b7965 | ||
![]() |
c03b041f40 | ||
![]() |
2ac8ed7411 | ||
![]() |
3280b3b9df | ||
![]() |
05c37b94bb | ||
![]() |
a91e7226dc | ||
![]() |
a39600efe2 | ||
![]() |
4fd5922784 | ||
![]() |
b3d1274ffe | ||
![]() |
9de49b4b6a | ||
![]() |
e6a368c3ac | ||
![]() |
3dca1b519a | ||
![]() |
ae8af396f4 | ||
![]() |
38294420d5 | ||
![]() |
c0dee61add | ||
![]() |
a84c92e007 | ||
![]() |
60a854e5fd | ||
![]() |
fa9f7aab7c | ||
![]() |
d697a556c2 | ||
![]() |
802fd831cb | ||
![]() |
52ca8a844a | ||
![]() |
573fc819d3 | ||
![]() |
ead9d79cb1 | ||
![]() |
43c197316a | ||
![]() |
c318d3a9de | ||
![]() |
80d3f5ffe8 | ||
![]() |
f9d85b10b7 | ||
![]() |
4028a58adc | ||
![]() |
0a3a079b86 | ||
![]() |
d691148c84 | ||
![]() |
48f74b9c7a | ||
![]() |
99338afacb | ||
![]() |
301c3b86e2 | ||
![]() |
130f7ba405 | ||
![]() |
e552bcfe82 | ||
![]() |
ad75499a91 | ||
![]() |
7ddcb441c8 | ||
![]() |
99da8dbec1 | ||
![]() |
743d5164b3 | ||
![]() |
1f7dfdca50 | ||
![]() |
2164d59331 | ||
![]() |
0d845b764b | ||
![]() |
0a2cd69a4b | ||
![]() |
ddb60fa1e0 | ||
![]() |
b7e33c5e6d | ||
![]() |
095ff7963d | ||
![]() |
dfb8be07f0 | ||
![]() |
74b4d98bba | ||
![]() |
8a7e4f0132 | ||
![]() |
6ebdb0ba89 | ||
![]() |
33817e5ab1 | ||
![]() |
cd1b481de5 | ||
![]() |
ab99db62bd | ||
![]() |
dd3d6b3f47 | ||
![]() |
d99f507244 | ||
![]() |
b6c8a0923f | ||
![]() |
0663b3bbf4 | ||
![]() |
d683fce2b9 | ||
![]() |
3d56214c07 | ||
![]() |
e2575c3612 | ||
![]() |
084256ce01 | ||
![]() |
240be18367 | ||
![]() |
ac271839a6 | ||
![]() |
734a63f6c3 | ||
![]() |
e73daedd42 | ||
![]() |
802e6c228c | ||
![]() |
edf2004539 | ||
![]() |
9e949eb32a | ||
![]() |
e255c35002 | ||
![]() |
dfd3c2c4a5 | ||
![]() |
876543f064 | ||
![]() |
e10f82e0e9 | ||
![]() |
f496a48a4d | ||
![]() |
1fbb7c373e | ||
![]() |
d58d7f79e7 | ||
![]() |
0643c56bc5 | ||
![]() |
c51acf9dbd | ||
![]() |
2f2a326eac | ||
![]() |
10dad0fb4e | ||
![]() |
fe01070bd1 | ||
![]() |
b558109844 | ||
![]() |
ac37802b7a | ||
![]() |
f9c8027c3f | ||
![]() |
28dd1969b3 | ||
![]() |
50270f6d6f | ||
![]() |
fad80307d8 | ||
![]() |
323d1b0504 | ||
![]() |
d6c1232d2d | ||
![]() |
678d719036 | ||
![]() |
723e81e90e | ||
![]() |
60d2cfea99 | ||
![]() |
84c39676ee | ||
![]() |
a11d038c1d | ||
![]() |
2f627bf4b0 | ||
![]() |
67c603ef94 | ||
![]() |
dec63f353f | ||
![]() |
7ab6b026fb | ||
![]() |
a2a773d714 | ||
![]() |
aa26a71949 | ||
![]() |
e3c695175b | ||
![]() |
ccdcdd01d8 | ||
![]() |
ef2a408298 | ||
![]() |
6a4dbcef62 | ||
![]() |
c8a87a2a8a | ||
![]() |
d0bfe93d38 | ||
![]() |
75df8c5a6a | ||
![]() |
b55813e362 | ||
![]() |
575f0c62b4 | ||
![]() |
3e9544f1dc | ||
![]() |
152e5ac70e | ||
![]() |
3544643a07 | ||
![]() |
f7ae76d10f | ||
![]() |
add9370696 | ||
![]() |
cadc17cc52 | ||
![]() |
878dfc5a01 | ||
![]() |
2400f7c20a | ||
![]() |
9d7854dda6 | ||
![]() |
7303aabc2b | ||
![]() |
ab478f488a | ||
![]() |
c7a2b090d7 | ||
![]() |
f2c3b6362d | ||
![]() |
c664be7b74 | ||
![]() |
aa17ddbf24 | ||
![]() |
62faacbed6 | ||
![]() |
d03d6e2ec1 | ||
![]() |
93a1760263 | ||
![]() |
0de8894e4d | ||
![]() |
e95ea22dbd | ||
![]() |
5dbfde62a6 | ||
![]() |
0ba886bc6b | ||
![]() |
2684205b5a | ||
![]() |
856507fb66 | ||
![]() |
d019fbc050 | ||
![]() |
129d5653e6 | ||
![]() |
9560ad0c20 | ||
![]() |
a4fa7567aa | ||
![]() |
9ff032740c | ||
![]() |
dbc76abcdd | ||
![]() |
746a5dc816 | ||
![]() |
194d110079 | ||
![]() |
eed490507c | ||
![]() |
2800ab1e88 | ||
![]() |
faf40f8bed | ||
![]() |
3f12ee40ac | ||
![]() |
b4532bd473 | ||
![]() |
b389874a7e | ||
![]() |
ea2dc69f7c | ||
![]() |
b0593b0ae1 | ||
![]() |
664348e475 | ||
![]() |
e3e00f0109 | ||
![]() |
d3850280f4 | ||
![]() |
d8b3b41358 | ||
![]() |
e7706cad74 | ||
![]() |
727d6788fe | ||
![]() |
e3ecf8ec96 | ||
![]() |
1999b19a1c | ||
![]() |
c55e2910ac | ||
![]() |
ad3694ef96 | ||
![]() |
7fd784b2f6 | ||
![]() |
d8f0ac5880 | ||
![]() |
b4ee4de110 | ||
![]() |
b9713fea76 | ||
![]() |
c6dd937922 | ||
![]() |
81d4158c03 | ||
![]() |
bf0e6ff862 | ||
![]() |
8518afe70d | ||
![]() |
091ab688e7 | ||
![]() |
2e5b066d88 | ||
![]() |
cd3a15feab | ||
![]() |
836499a48c | ||
![]() |
4983816ff6 | ||
![]() |
0326657d60 | ||
![]() |
fcff820858 | ||
![]() |
dc536f0fc0 | ||
![]() |
f958b8dd4f | ||
![]() |
352d3b1bde | ||
![]() |
f3061a0e74 | ||
![]() |
d4222e98e6 | ||
![]() |
8dd07d4873 | ||
![]() |
5f891fb9d6 | ||
![]() |
b3b6d0ff5d | ||
![]() |
0ac01b3f0d | ||
![]() |
c6e55edb09 | ||
![]() |
dfc70c098f | ||
![]() |
c1d1e9596a | ||
![]() |
53078e046e | ||
![]() |
2af968031c | ||
![]() |
bdd3c394a3 | ||
![]() |
f719b3c112 | ||
![]() |
8e0001a635 | ||
![]() |
5b3581b88e | ||
![]() |
ca1436ea3f | ||
![]() |
5cd6b79ee0 | ||
![]() |
0ec5942ee4 | ||
![]() |
90af164a8a | ||
![]() |
fd83ee37ae | ||
![]() |
8e935e62be | ||
![]() |
a0d38b1f36 | ||
![]() |
6b49ecc99a | ||
![]() |
ae24a464dc | ||
![]() |
f519784cae | ||
![]() |
601cbd5ab7 | ||
![]() |
fd4a507645 | ||
![]() |
bf8d07226e | ||
![]() |
fcddfb6adf | ||
![]() |
5fcd97129e | ||
![]() |
af3a1c2f55 | ||
![]() |
13584a4d96 | ||
![]() |
6de4953d50 | ||
![]() |
b15c213890 | ||
![]() |
2f52e5d9f3 | ||
![]() |
1d6afea9c4 | ||
![]() |
8d79efd6ad | ||
![]() |
99bcd54afe | ||
![]() |
6ce6eee529 | ||
![]() |
054b40e358 | ||
![]() |
92c0671da2 | ||
![]() |
33d7a0436b | ||
![]() |
0525295d7e | ||
![]() |
87e54ac14f | ||
![]() |
e7fa5eb38a | ||
![]() |
71b4f4a64a | ||
![]() |
64de46943b | ||
![]() |
90d691f251 | ||
![]() |
df2d83b8a0 | ||
![]() |
ab94d0e752 | ||
![]() |
b4645553f2 | ||
![]() |
324ebcc997 | ||
![]() |
b7bb570420 | ||
![]() |
c991e085d4 | ||
![]() |
4e935719d3 | ||
![]() |
22b71ae477 | ||
![]() |
305884b5ee | ||
![]() |
9c143a3461 | ||
![]() |
d94499af86 | ||
![]() |
91fd6cb4e6 | ||
![]() |
fcfad7cef9 | ||
![]() |
7424901aca | ||
![]() |
8c680608ff | ||
![]() |
f8ef1b3b61 | ||
![]() |
2c114aa559 | ||
![]() |
daf8beaf26 | ||
![]() |
959788cee8 | ||
![]() |
7b75a61cdb | ||
![]() |
c071d65c67 | ||
![]() |
044271ad00 | ||
![]() |
b8130d3fd3 | ||
![]() |
4468f3dd37 | ||
![]() |
0c9219f885 | ||
![]() |
25ab4e187c | ||
![]() |
83a51eebfb | ||
![]() |
6e99c6d41f | ||
![]() |
ad570688c9 | ||
![]() |
8378bc0d57 | ||
![]() |
c74bef475b | ||
![]() |
3224dd9862 | ||
![]() |
adf47bb31c | ||
![]() |
66cb0455fd | ||
![]() |
d56965552f | ||
![]() |
07946cbeb2 | ||
![]() |
33de478450 | ||
![]() |
bf867c522a | ||
![]() |
b3a4ffd4a7 | ||
![]() |
ff2b9c7988 | ||
![]() |
ad072ea83a | ||
![]() |
9dae06b589 | ||
![]() |
09db8e072e | ||
![]() |
5ac6ff1405 | ||
![]() |
9b3dbdc54f | ||
![]() |
e11d70de46 | ||
![]() |
f3ddf631c1 | ||
![]() |
f1c95b315c | ||
![]() |
518ae4d97a | ||
![]() |
2a9c28e63b | ||
![]() |
900500ef28 | ||
![]() |
27d76dfa42 | ||
![]() |
51b848c43e | ||
![]() |
f005b7338f | ||
![]() |
04a88c9cbd | ||
![]() |
7c0c85f650 | ||
![]() |
ee9e939f88 | ||
![]() |
e5ca3daa54 | ||
![]() |
8021308822 | ||
![]() |
d9e449b6cf | ||
![]() |
c94bb09123 | ||
![]() |
1cd3ebf3bb | ||
![]() |
2070f91a8f | ||
![]() |
5b6b37a867 | ||
![]() |
2dbf189f43 | ||
![]() |
82e64559a8 | ||
![]() |
d0d77b8775 | ||
![]() |
35c4988c98 | ||
![]() |
10cad086f6 | ||
![]() |
4d5ba90d38 | ||
![]() |
3eb75708de | ||
![]() |
b95d333dc9 | ||
![]() |
887a080198 | ||
![]() |
8f3c3c6ba3 | ||
![]() |
f7c7552d5a | ||
![]() |
b61c6151eb | ||
![]() |
37e2849a3a | ||
![]() |
a4eca93584 | ||
![]() |
13d0718780 | ||
![]() |
38693521b3 | ||
![]() |
447ddeb6d3 | ||
![]() |
f11b2e9132 | ||
![]() |
9d69b9d173 | ||
![]() |
27a44bf9af | ||
![]() |
b68077d969 | ||
![]() |
f475c671f7 | ||
![]() |
1ab32ca3ba | ||
![]() |
8345b839e7 | ||
![]() |
259cda150d | ||
![]() |
8146c90efa | ||
![]() |
da3d078917 | ||
![]() |
72c79e005a | ||
![]() |
d252138867 | ||
![]() |
c20183c547 | ||
![]() |
cd94abb7fd | ||
![]() |
f886245e3c | ||
![]() |
4f413eec12 | ||
![]() |
441bfe74c1 | ||
![]() |
071289bc48 | ||
![]() |
1ba2381437 | ||
![]() |
1e5e576bd0 | ||
![]() |
059b8824a2 | ||
![]() |
d7e6916d8f | ||
![]() |
c821f76f0f | ||
![]() |
e5ad1b45bd | ||
![]() |
08f011eb33 | ||
![]() |
1a6044090a | ||
![]() |
697bf590ff | ||
![]() |
4073da2431 | ||
![]() |
fbca43b239 | ||
![]() |
a03a8bf0d5 | ||
![]() |
75d1ed6eea | ||
![]() |
dd1e604155 | ||
![]() |
c7f2cab56a | ||
![]() |
2bd372dbaa | ||
![]() |
45ecc29e12 | ||
![]() |
69d068e73f | ||
![]() |
0f55211dc9 | ||
![]() |
dbf09ef361 | ||
![]() |
e08557e5ae | ||
![]() |
aaaba5cc84 | ||
![]() |
2cfd0242bd | ||
![]() |
0711d555e1 | ||
![]() |
e8363d7310 | ||
![]() |
be9ce34dc8 | ||
![]() |
bb60d17ccc | ||
![]() |
1aa8062310 | ||
![]() |
711027e450 | ||
![]() |
8115cc5ecc | ||
![]() |
8bae67d9ef | ||
![]() |
bc3fd61bde | ||
![]() |
ba1d52d6dd | ||
![]() |
c02d0fc927 | ||
![]() |
56738389f8 | ||
![]() |
d511679dbd | ||
![]() |
6b931de37d | ||
![]() |
56e9d85fc2 | ||
![]() |
405f890dfc | ||
![]() |
1145c26f2b | ||
![]() |
3890222bbc | ||
![]() |
fba9f66a1f | ||
![]() |
668387e372 | ||
![]() |
f85fad447e | ||
![]() |
56616b805f | ||
![]() |
b9729ad763 | ||
![]() |
a26538c3f0 | ||
![]() |
a55ec208aa | ||
![]() |
1970a00bb6 | ||
![]() |
1e2267bd31 | ||
![]() |
092a03e2cf | ||
![]() |
065661e419 | ||
![]() |
72d7dae7fa | ||
![]() |
5624022064 | ||
![]() |
944d532ad1 | ||
![]() |
11727785c7 | ||
![]() |
9b04dc0e44 | ||
![]() |
ca4f786aa8 | ||
![]() |
152114b054 | ||
![]() |
6aef5ecf4b | ||
![]() |
645e7ee95f | ||
![]() |
798d0948d1 | ||
![]() |
008374748e | ||
![]() |
3333ab4ade | ||
![]() |
f8c2f0f01b | ||
![]() |
6dc62cca13 | ||
![]() |
f3e9f17b85 | ||
![]() |
ed14f9ada0 | ||
![]() |
9250f20559 | ||
![]() |
6157fdc007 | ||
![]() |
5a97e53e21 | ||
![]() |
901cb9eaf6 | ||
![]() |
79de744936 | ||
![]() |
d8a70a3da6 | ||
![]() |
813de7eb3c | ||
![]() |
410c15c997 | ||
![]() |
fb9ead2690 | ||
![]() |
e7c381d651 | ||
![]() |
dca74d7b11 | ||
![]() |
415b31e1b4 | ||
![]() |
af1a6cf5ff | ||
![]() |
d79ae8e927 | ||
![]() |
49fe7a4b38 | ||
![]() |
f5374e8ce7 | ||
![]() |
0c207ce12d | ||
![]() |
3945c2ad52 | ||
![]() |
bc8f24afad | ||
![]() |
fd91d1fb06 | ||
![]() |
6a81794bba | ||
![]() |
6a89b12258 | ||
![]() |
219f128cb7 | ||
![]() |
89a24442c4 | ||
![]() |
62eab175ab | ||
![]() |
e3af63bd93 | ||
![]() |
78454657ca | ||
![]() |
7b770e09f7 | ||
![]() |
933b25194c | ||
![]() |
1cbe452f9c | ||
![]() |
920e9b915f | ||
![]() |
99e38b1b60 | ||
![]() |
2964089483 | ||
![]() |
624a99b179 | ||
![]() |
705277ceb5 | ||
![]() |
bf709786f3 | ||
![]() |
bda7982134 | ||
![]() |
abb2b36ae6 | ||
![]() |
945442a842 | ||
![]() |
30b231cfdf | ||
![]() |
cbdac66fd0 | ||
![]() |
257d4dbdad | ||
![]() |
69064839a7 | ||
![]() |
ed6a740eee | ||
![]() |
d594fa1a54 | ||
![]() |
35e4cd4596 | ||
![]() |
24319ddc7a | ||
![]() |
d3e3efd05e | ||
![]() |
14cb37725e | ||
![]() |
fc3bd432ef | ||
![]() |
b0a5220159 | ||
![]() |
9620ac7d25 | ||
![]() |
7b1989cef2 | ||
![]() |
601d2808a2 | ||
![]() |
71b4963ed8 | ||
![]() |
f124c4844f | ||
![]() |
7f9877b3da | ||
![]() |
1526dde39d | ||
![]() |
7dd6925049 | ||
![]() |
6163d3fbed | ||
![]() |
630d23141d | ||
![]() |
0252006eb1 | ||
![]() |
162777bb46 | ||
![]() |
0d5b9c2f98 | ||
![]() |
5f22ab0361 | ||
![]() |
b1fd1263f1 | ||
![]() |
6226203b0e | ||
![]() |
9f31f90146 | ||
![]() |
5aaf15f81c | ||
![]() |
5ad82a305e | ||
![]() |
296e99772a | ||
![]() |
1365f41b2d | ||
![]() |
13199744ef | ||
![]() |
4e937c32b4 | ||
![]() |
559d13dfd9 | ||
![]() |
a94a9291e6 | ||
![]() |
6ccaf316ab | ||
![]() |
9fff996393 | ||
![]() |
3febb340d4 | ||
![]() |
5abc08ba9d | ||
![]() |
2164e9a5a0 | ||
![]() |
c87100c0fe | ||
![]() |
6a167e99dc | ||
![]() |
052672402e | ||
![]() |
4d566500e9 | ||
![]() |
2dd51d0202 | ||
![]() |
862b58c176 | ||
![]() |
09b6f16a51 | ||
![]() |
ffebcee48b | ||
![]() |
8c50a84516 | ||
![]() |
7c8f87bd78 | ||
![]() |
ded5274be7 | ||
![]() |
d03989481b | ||
![]() |
dac59d3133 | ||
![]() |
7a5333ba62 | ||
![]() |
f8e9fe376b | ||
![]() |
f9ea7af3ab | ||
![]() |
622122562f | ||
![]() |
3b96b21683 | ||
![]() |
3fc8d01070 | ||
![]() |
b0603c6c7d | ||
![]() |
276f3a5516 | ||
![]() |
1859867039 | ||
![]() |
8c83eb805b | ||
![]() |
2667d2b41c | ||
![]() |
1b539f82ac | ||
![]() |
876b1b988a | ||
![]() |
e3bcbc4da9 | ||
![]() |
1f9aa96486 | ||
![]() |
2d17116119 | ||
![]() |
b592d02bb7 | ||
![]() |
961d1acd51 | ||
![]() |
138d22976a | ||
![]() |
848507f7e8 | ||
![]() |
82fed8abfe | ||
![]() |
7941bdc55e | ||
![]() |
d1e6061541 | ||
![]() |
96e55b17b1 | ||
![]() |
6dab50cbd8 | ||
![]() |
89f24c631c | ||
![]() |
5d0a0d352b | ||
![]() |
63bc0a9620 | ||
![]() |
0791ccbcf5 | ||
![]() |
d03ab6c79f | ||
![]() |
72e2a762da | ||
![]() |
cd0b1f10cc | ||
![]() |
a81824a7eb | ||
![]() |
589d07ed40 | ||
![]() |
9a86f1ebed | ||
![]() |
2695995211 | ||
![]() |
ff8105f809 | ||
![]() |
98a05f53d2 | ||
![]() |
549b1a2f13 | ||
![]() |
b50d0cd710 | ||
![]() |
ff135c034c | ||
![]() |
eb93b08342 | ||
![]() |
048c40c16c | ||
![]() |
33b871efa6 | ||
![]() |
2010094f83 | ||
![]() |
693e201900 | ||
![]() |
2333180c50 | ||
![]() |
915e9409dc | ||
![]() |
b6be3226c5 | ||
![]() |
b83cad36b6 | ||
![]() |
fb1b9fea09 | ||
![]() |
45a387000d | ||
![]() |
e6b052f8e9 | ||
![]() |
6365105515 | ||
![]() |
550b664a61 | ||
![]() |
510459b046 | ||
![]() |
adbec47fad | ||
![]() |
ae24a4ea4c | ||
![]() |
db67bb0b98 | ||
![]() |
857ce1324c | ||
![]() |
82d6467cee | ||
![]() |
887c792a76 | ||
![]() |
b3625dffbc | ||
![]() |
90cd5dfae7 | ||
![]() |
8ce791368c | ||
![]() |
05e15ce9ad | ||
![]() |
1926c5ec5b | ||
![]() |
0bb1d869af | ||
![]() |
c654ea329c | ||
![]() |
68d74a490b | ||
![]() |
857aa110c8 | ||
![]() |
6ba24eebb0 | ||
![]() |
023eb3b0ff | ||
![]() |
bf361238cb | ||
![]() |
42d23e9b37 | ||
![]() |
e1ddf58119 | ||
![]() |
4023fda5b6 | ||
![]() |
f34f2da9b9 | ||
![]() |
050f596429 | ||
![]() |
de36cfd2eb | ||
![]() |
b828b8e44a | ||
![]() |
15da31d3eb | ||
![]() |
6158d81b5e | ||
![]() |
b714bf4abe | ||
![]() |
46ca6262b5 | ||
![]() |
cfef209cb7 | ||
![]() |
654c038eab | ||
![]() |
a6beb0d2d5 | ||
![]() |
515b42cd51 | ||
![]() |
6668c47368 | ||
![]() |
b801fdc14f | ||
![]() |
15dcc7b802 | ||
![]() |
3ec6d5e905 | ||
![]() |
92cd64c8e8 | ||
![]() |
955396e575 | ||
![]() |
52efadd442 | ||
![]() |
09234e65fe | ||
![]() |
4d0d601127 | ||
![]() |
bce3756e83 | ||
![]() |
0cf21671a4 | ||
![]() |
5d3fbb4bff | ||
![]() |
68bbf4182f | ||
![]() |
eab416c0b4 | ||
![]() |
c48452b37d | ||
![]() |
a636a87c2b | ||
![]() |
ba8e1c5647 | ||
![]() |
fc30e28e84 | ||
![]() |
cfca37b09c | ||
![]() |
31a3f594f1 | ||
![]() |
9c536bd845 | ||
![]() |
808612cd10 | ||
![]() |
f2c3e558cc | ||
![]() |
3324154208 | ||
![]() |
9c0068d470 | ||
![]() |
5079027978 | ||
![]() |
04dca2f274 | ||
![]() |
168df5d4e2 | ||
![]() |
6cf6f0460e | ||
![]() |
57d8e0b06f | ||
![]() |
55ab90a481 | ||
![]() |
0a8fb40bd7 | ||
![]() |
fb026ec07f | ||
![]() |
79697e9030 | ||
![]() |
873e05538e | ||
![]() |
9dd18a97e8 | ||
![]() |
51acb739e9 | ||
![]() |
7e2be69749 | ||
![]() |
8e0ec47229 | ||
![]() |
ca4b243daa | ||
![]() |
755adb0863 | ||
![]() |
fc6cd29e84 | ||
![]() |
ab73c602c3 | ||
![]() |
862533fd7f | ||
![]() |
ffa3bed620 | ||
![]() |
ba8d56f6ab | ||
![]() |
4bfc804d85 | ||
![]() |
40981daf33 | ||
![]() |
16bcb70863 | ||
![]() |
b1c72df333 | ||
![]() |
39ced581b8 | ||
![]() |
18a325cad8 | ||
![]() |
7b0e891ab3 | ||
![]() |
fc243466da | ||
![]() |
9738c1896d | ||
![]() |
d0976cead9 | ||
![]() |
2e46d80bce | ||
![]() |
283806369a | ||
![]() |
500cb23ab9 | ||
![]() |
88cabf88b2 | ||
![]() |
9dc3d6d8d6 | ||
![]() |
cb8d8c4173 | ||
![]() |
1949c197d6 | ||
![]() |
16dab3a2cc | ||
![]() |
497a073162 | ||
![]() |
22e245ecff | ||
![]() |
b03433d8a8 | ||
![]() |
4f0fca021c | ||
![]() |
5aa1ae003e | ||
![]() |
f29758939c | ||
![]() |
3703c2b431 | ||
![]() |
d289d9a8ff | ||
![]() |
a083dd048d | ||
![]() |
f09c30d370 | ||
![]() |
9e28d46ee7 | ||
![]() |
c133482659 | ||
![]() |
bf71c1aee8 | ||
![]() |
4102b44352 | ||
![]() |
acf2e2fb4a | ||
![]() |
f9de0b5eb9 | ||
![]() |
85083f5979 | ||
![]() |
087988dde3 | ||
![]() |
2dddb853f2 | ||
![]() |
a92355181f | ||
![]() |
2085f7e128 | ||
![]() |
de7366e9a9 | ||
![]() |
7ab1c1170f | ||
![]() |
792770e5e2 | ||
![]() |
dece42c155 | ||
![]() |
1025fad0e6 | ||
![]() |
31537687c1 | ||
![]() |
9c281511fa | ||
![]() |
544375378f | ||
![]() |
c2574235ea | ||
![]() |
0533b8c946 | ||
![]() |
5475bd6b5f | ||
![]() |
2e4321872a | ||
![]() |
515790b1a0 | ||
![]() |
35c9ffcdca | ||
![]() |
920c8a936f | ||
![]() |
6863ba4883 | ||
![]() |
2f49413867 | ||
![]() |
854560b2f5 | ||
![]() |
4a948b8ba2 | ||
![]() |
01c0d021b2 | ||
![]() |
3e49ef42a2 | ||
![]() |
efb1775aff | ||
![]() |
2a1f1c3cd9 | ||
![]() |
3c4ab10b36 | ||
![]() |
1c94169182 | ||
![]() |
53ab7af8dc | ||
![]() |
8d173d369d | ||
![]() |
4535687b48 | ||
![]() |
c415cf5ffb | ||
![]() |
a95c93cd5b | ||
![]() |
62443257fc | ||
![]() |
60a8317115 | ||
![]() |
73ed384215 | ||
![]() |
c4a1f7df5f | ||
![]() |
8b4eccc064 | ||
![]() |
6528a4a60c | ||
![]() |
4d690992ac | ||
![]() |
b83fb05b82 | ||
![]() |
cf12265cd8 | ||
![]() |
e4110a6981 | ||
![]() |
412908026d | ||
![]() |
8a7887cf06 | ||
![]() |
779dd003dd | ||
![]() |
0b2895dc56 | ||
![]() |
fed5d08703 | ||
![]() |
f131f27ac3 | ||
![]() |
19dbbdcf4f | ||
![]() |
d650035980 | ||
![]() |
fbc803d09f | ||
![]() |
df4c594d4f | ||
![]() |
482445cb98 | ||
![]() |
1c002c63a3 | ||
![]() |
cd366b6087 | ||
![]() |
83dc5b7650 | ||
![]() |
d9675b1bc6 | ||
![]() |
036520566c | ||
![]() |
8b302749ff | ||
![]() |
68b3e2cfee | ||
![]() |
9ee6906e4d | ||
![]() |
be38f51cc7 | ||
![]() |
aaed21f752 | ||
![]() |
a1dddd7df8 | ||
![]() |
f26795ca7a | ||
![]() |
7d6bbb3385 | ||
![]() |
37f792d9ce | ||
![]() |
867c86d702 | ||
![]() |
05f8756a12 | ||
![]() |
c581c35a73 | ||
![]() |
b37bd5f0ae | ||
![]() |
56a01e1e64 | ||
![]() |
6aa58bddd8 | ||
![]() |
0515f2825a | ||
![]() |
0d37e07a0d | ||
![]() |
ab69b182e6 | ||
![]() |
7b84614a79 | ||
![]() |
361e536243 | ||
![]() |
39fee6e57d | ||
![]() |
56a0c6e6bf | ||
![]() |
eb8993e746 | ||
![]() |
edeb781600 | ||
![]() |
9aa4e308c1 | ||
![]() |
05abf41b64 | ||
![]() |
ac9c43e280 | ||
![]() |
c05e7f29c5 | ||
![]() |
583f3394fc | ||
![]() |
5e414ebda8 | ||
![]() |
21b1383c9a | ||
![]() |
6c9e09ea73 | ||
![]() |
195ec4b11e | ||
![]() |
bf988a7f6e | ||
![]() |
25f8028ae3 | ||
![]() |
28299744c4 | ||
![]() |
72212f8256 | ||
![]() |
1610a4ab91 | ||
![]() |
87a3d1e5d1 | ||
![]() |
2b6d65e955 | ||
![]() |
cd44d28674 | ||
![]() |
2edeb1b3e2 | ||
![]() |
9f946d4bc4 | ||
![]() |
5266f33af5 | ||
![]() |
85c9a1e84d | ||
![]() |
5951fe21ec | ||
![]() |
c6b6638705 | ||
![]() |
8ab7be9fb8 | ||
![]() |
762fa31c28 | ||
![]() |
c2678aa91f | ||
![]() |
d4900eac84 | ||
![]() |
f9b6e9fa2e | ||
![]() |
cfb460c137 | ||
![]() |
f9e6966687 | ||
![]() |
913b4297cf | ||
![]() |
23c1df72aa | ||
![]() |
cde42ec3fa | ||
![]() |
0104d2fd36 | ||
![]() |
85d1f3419a | ||
![]() |
e45d27b5c7 | ||
![]() |
a3d94db6eb | ||
![]() |
ef904c854b | ||
![]() |
7a7eb4e553 | ||
![]() |
c7f549742d | ||
![]() |
1850ef70d8 | ||
![]() |
0b693a02bd | ||
![]() |
508db95cba | ||
![]() |
bbae0c3ade | ||
![]() |
0239f940a0 | ||
![]() |
1df0c2b313 | ||
![]() |
a9d9ace532 | ||
![]() |
cb83e17710 | ||
![]() |
1727df7082 | ||
![]() |
3d585a3d02 | ||
![]() |
69f822b69c | ||
![]() |
abfe3b08af | ||
![]() |
66a3c46aaf | ||
![]() |
c914a73352 | ||
![]() |
5041ed1564 | ||
![]() |
4daaa67710 | ||
![]() |
dd572b00d0 | ||
![]() |
3fef1a6eec | ||
![]() |
6d81a29bb6 | ||
![]() |
3f1c638a14 | ||
![]() |
7caca74d57 | ||
![]() |
d95aea319e | ||
![]() |
9aed09d250 | ||
![]() |
3ebcd788fb | ||
![]() |
816751f464 | ||
![]() |
f84ae88aa4 | ||
![]() |
315e0400ff | ||
![]() |
22cf7f5d4f | ||
![]() |
6ec829e47f | ||
![]() |
a119d75589 | ||
![]() |
92028a2492 | ||
![]() |
42ef8487c8 | ||
![]() |
e92e5d1040 | ||
![]() |
a1950cf27e | ||
![]() |
27fb0ffb06 | ||
![]() |
6c3439acf9 | ||
![]() |
005356ebb3 | ||
![]() |
f0adabf567 | ||
![]() |
739782109e | ||
![]() |
87ba018ab8 | ||
![]() |
041702615f | ||
![]() |
0a82f306f6 | ||
![]() |
856e72150c | ||
![]() |
e2857f8ca5 | ||
![]() |
04d9ec9c94 | ||
![]() |
e984a467ef | ||
![]() |
8342a7b8a8 | ||
![]() |
269af1930c | ||
![]() |
b7bb950abc | ||
![]() |
4a19458c15 | ||
![]() |
b6db420465 | ||
![]() |
7b234ad41f | ||
![]() |
35b0795b51 | ||
![]() |
04a7796665 | ||
![]() |
755deae717 | ||
![]() |
6d66dc9043 | ||
![]() |
bbd9cd2101 | ||
![]() |
b6ccde075d | ||
![]() |
e94b9006e6 | ||
![]() |
e9c8159bf3 | ||
![]() |
919f69ef46 | ||
![]() |
4ac2fe27d5 | ||
![]() |
be2daeb4ab | ||
![]() |
7b96ce9b8c | ||
![]() |
801188f957 | ||
![]() |
c546a46847 | ||
![]() |
6527d21794 | ||
![]() |
7fad722927 | ||
![]() |
ab249eb95f | ||
![]() |
bdbd215aad | ||
![]() |
68212a36bb | ||
![]() |
ac3691dc08 | ||
![]() |
3a6aab67d5 | ||
![]() |
2c5b3f4da3 | ||
![]() |
73eca63c4f | ||
![]() |
c504588993 | ||
![]() |
5b14c6d4d4 | ||
![]() |
4685c7b868 | ||
![]() |
0e185c8bcf | ||
![]() |
e230949edd | ||
![]() |
a897b5e98c | ||
![]() |
186d3dbd38 | ||
![]() |
127c04070b | ||
![]() |
6ff65050f5 | ||
![]() |
d605ef4b28 | ||
![]() |
9466b7ce75 | ||
![]() |
7f6eff666e | ||
![]() |
e878b4df48 | ||
![]() |
2c3c1529a7 | ||
![]() |
ecce524c7b | ||
![]() |
5af617b869 | ||
![]() |
3f886c9f7c | ||
![]() |
d50fb7a291 | ||
![]() |
37502c5562 | ||
![]() |
7620ec896b | ||
![]() |
8a87186833 | ||
![]() |
b0f8013762 | ||
![]() |
3a6a1c448a | ||
![]() |
2cd9f80b34 | ||
![]() |
d88de8e072 | ||
![]() |
6e6ce55a7b | ||
![]() |
26b88d9d42 | ||
![]() |
27e490912b | ||
![]() |
fe8b0cd944 | ||
![]() |
61bc3a616a | ||
![]() |
430351aee3 | ||
![]() |
eecdcfbabe | ||
![]() |
97776d8f01 | ||
![]() |
48e864dead | ||
![]() |
91c3b343e7 | ||
![]() |
b62ce7ec6f | ||
![]() |
7890eb14d1 | ||
![]() |
15961f0c17 | ||
![]() |
c8c1ba5682 | ||
![]() |
603c2175e3 | ||
![]() |
45aa2c2f23 | ||
![]() |
45f988c420 | ||
![]() |
55e8507cac | ||
![]() |
ec6584555f | ||
![]() |
649facc5ab | ||
![]() |
57c2547098 | ||
![]() |
4fa32e79ce | ||
![]() |
f393e525a6 | ||
![]() |
45b61e5f78 | ||
![]() |
0219cc7a1f | ||
![]() |
b212e9fb0f |
14
.editorconfig
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# EditorConfig is awesome: https://EditorConfig.org
|
||||||
|
|
||||||
|
# top-most EditorConfig file
|
||||||
|
root = true
|
||||||
|
|
||||||
|
# with a newline ending every file
|
||||||
|
[*]
|
||||||
|
indent_style = tab
|
||||||
|
indent_size = 4
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
indent_style = tab
|
11
.gitattributes
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
* text=auto
|
||||||
|
.gitattributes export-ignore
|
||||||
|
.gitignore export-ignore
|
||||||
|
.github export-ignore
|
||||||
|
.editorconfig export-ignore
|
||||||
|
.travis.yml export-ignore
|
||||||
|
_config.yml export-ignore
|
||||||
|
release.sh export-ignore
|
||||||
|
|
||||||
|
*.sh text eol=lf
|
||||||
|
VERSION text eol=lf
|
12
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# These are supported funding model platforms
|
||||||
|
|
||||||
|
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||||
|
patreon: # Replace with a single Patreon username
|
||||||
|
open_collective: # Replace with a single Open Collective username
|
||||||
|
ko_fi: # Replace with a single Ko-fi username
|
||||||
|
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||||
|
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||||
|
liberapay: # Replace with a single Liberapay username
|
||||||
|
issuehunt: # Replace with a single IssueHunt username
|
||||||
|
otechie: # Replace with a single Otechie username
|
||||||
|
custom: paypal.me/slawkens # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
29
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
<!--
|
||||||
|
Please use this issue tracker only for reporting MyAAC bugs.
|
||||||
|
|
||||||
|
If you need support, please use the discord server:
|
||||||
|
|
||||||
|
- https://discord.gg/2J39Wus (we have an own channel named #my-aac there)
|
||||||
|
|
||||||
|
or use otland support boards:
|
||||||
|
|
||||||
|
- https://otland.net/forums/support.16/
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
### Server configuration
|
||||||
|
- Operating System:
|
||||||
|
- Web Server (+ version):
|
||||||
|
- PHP Version:
|
||||||
|
- Server name and version (for example: TFS 0.3):
|
||||||
|
- MyAAC Version:
|
||||||
|
|
||||||
|
### Client configuration (Your Computer)
|
||||||
|
|
||||||
|
- Browser:
|
||||||
|
- Operating System:
|
||||||
|
|
||||||
|
### Description:
|
||||||
|
|
||||||
|
|
||||||
|
### Steps To Reproduce:
|
16
.github/workflows/phplint.yml
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
name: PHP Linting
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches: [master]
|
||||||
|
push:
|
||||||
|
branches: [master]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
phplint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: overtrue/phplint@3.4.0
|
||||||
|
with:
|
||||||
|
path: .
|
||||||
|
options: --exclude="system/libs/polyfill-mbstring/bootstrap80.php"
|
76
.gitignore
vendored
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
Thumbs.db
|
||||||
|
.DS_Store
|
||||||
|
.idea
|
||||||
|
|
||||||
|
#
|
||||||
|
/.htaccess
|
||||||
|
|
||||||
|
# composer
|
||||||
|
composer.lock
|
||||||
|
vendor
|
||||||
|
|
||||||
|
# npm
|
||||||
|
node_modules
|
||||||
|
tools/ext
|
||||||
|
|
||||||
|
# cypress
|
||||||
|
cypress.env.json
|
||||||
|
cypress/e2e/2-advanced-examples
|
||||||
|
cypress/screenshots
|
||||||
|
|
||||||
|
# created by release.sh
|
||||||
|
releases
|
||||||
|
tmp
|
||||||
|
|
||||||
|
config.local.php
|
||||||
|
|
||||||
|
# all custom templates
|
||||||
|
templates/*
|
||||||
|
!templates/tibiacom
|
||||||
|
!templates/kathrine
|
||||||
|
|
||||||
|
# guild images
|
||||||
|
images/guilds/*
|
||||||
|
!images/guilds/default.gif
|
||||||
|
|
||||||
|
# editor images
|
||||||
|
images/editor/*
|
||||||
|
!images/editor/index.html
|
||||||
|
|
||||||
|
# gallery images
|
||||||
|
images/gallery/*
|
||||||
|
!images/gallery/index.html
|
||||||
|
!images/gallery/demon.jpg
|
||||||
|
!images/gallery/demon_thumb.gif
|
||||||
|
|
||||||
|
# cache
|
||||||
|
system/cache/*
|
||||||
|
!system/cache/index.html
|
||||||
|
!system/cache/twig/index.html
|
||||||
|
!system/cache/signatures/index.html
|
||||||
|
!system/cache/plugins/index.html
|
||||||
|
|
||||||
|
# php sessions
|
||||||
|
system/php_sessions/*
|
||||||
|
!system/php_sessions/index.html
|
||||||
|
|
||||||
|
# logs
|
||||||
|
system/logs/*
|
||||||
|
!system/logs/index.html
|
||||||
|
|
||||||
|
# data
|
||||||
|
system/data/*
|
||||||
|
!system/data/index.html
|
||||||
|
|
||||||
|
# plugins
|
||||||
|
plugins/*
|
||||||
|
!plugins/.htaccess
|
||||||
|
!plugins/example.json
|
||||||
|
!plugins/account-create-hint.json
|
||||||
|
!plugins/account-create-hint
|
||||||
|
!plugins/email-confirmed-reward.json
|
||||||
|
!plugins/email-confirmed-reward
|
||||||
|
landing
|
||||||
|
|
||||||
|
# others/rest
|
||||||
|
system/pages/downloads.php
|
@@ -1,33 +1,19 @@
|
|||||||
Options -Indexes -MultiViews
|
<IfModule mod_autoindex.c>
|
||||||
|
Options -Indexes
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
RewriteEngine On
|
<IfModule mod_negotiation.c>
|
||||||
#RewriteBase /
|
Options -MultiViews
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
# Page parser
|
<IfModule mod_rewrite.c>
|
||||||
RewriteCond %{REQUEST_FILENAME} !-f
|
RewriteEngine On
|
||||||
RewriteCond %{REQUEST_FILENAME} !-d
|
|
||||||
RewriteRule ^([A-Za-z0-9-_+']+)\.png/?$ tools/signature/index.php?name=$1 [L]
|
|
||||||
RewriteRule ^characters/([A-Za-z0-9-_+']+)$ index.php?subtopic=characters&name=$1
|
|
||||||
RewriteRule ^guilds/([A-Za-z0-9-_+']+)$ index.php?subtopic=guilds&action=show&guild=$1
|
|
||||||
RewriteRule ^forum/board/([0-9]+)$ index.php?subtopic=forum&action=show_board&id=$1
|
|
||||||
RewriteRule ^forum/board/([0-9]+)/([0-9]+)$ index.php?subtopic=forum&action=show_board&id=$1&page=$2
|
|
||||||
RewriteRule ^forum/thread/([0-9]+)$ index.php?subtopic=forum&action=show_thread&id=$1
|
|
||||||
RewriteRule ^forum/thread/([0-9]+)/([0-9]+)$ index.php?subtopic=forum&action=show_thread&id=$1&page=$2
|
|
||||||
RewriteRule ^forum/board/([0-9]+)/([0-9]+)$ index.php?subtopic=forum&action=show_thread&id=$1&page=$2
|
|
||||||
RewriteRule ^account/manage$ index.php?subtopic=accountmanagement
|
|
||||||
RewriteRule ^account/create$ index.php?subtopic=createaccount
|
|
||||||
RewriteRule ^account/lost$ index.php?subtopic=lostaccount
|
|
||||||
RewriteRule ^account/logout$ index.php?subtopic=accountmanagement&action=logout
|
|
||||||
RewriteRule ^news/archive/([0-9]+)$ index.php?subtopic=newsarchive&id=$1
|
|
||||||
RewriteRule ^news/archive$ index.php?subtopic=newsarchive
|
|
||||||
RewriteRule ^highscores/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)?$ index.php?subtopic=highscores&list=$1&vocation=$2
|
|
||||||
RewriteRule ^highscores/([A-Za-z0-9-_']+)$ index.php?subtopic=highscores&list=$1
|
|
||||||
RewriteRule ^polls/([0-9]+)$ index.php?subtopic=polls&id=$1
|
|
||||||
RewriteRule ^admin/$ admin/index.php
|
|
||||||
RewriteRule ^install/$ install/index.php
|
|
||||||
|
|
||||||
# temp solution >.>
|
# you can put here your myaac root folder
|
||||||
RewriteCond %{REQUEST_FILENAME} !-f
|
# path relative to web root
|
||||||
RewriteCond %{REQUEST_FILENAME} !-d
|
#RewriteBase /myaac/
|
||||||
RewriteRule ^([A-Za-z0-9-_]+)/?$ index.php?p=$1 [L]
|
|
||||||
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)?$ index.php?p=$1&action=$2 [L]
|
RewriteCond %{REQUEST_FILENAME} !-f
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-d
|
||||||
|
RewriteRule ^.*$ index.php [L]
|
||||||
|
</IfModule>
|
||||||
|
20
.travis.yml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
language: php
|
||||||
|
php:
|
||||||
|
- 5.6
|
||||||
|
- 7.0
|
||||||
|
- 7.1
|
||||||
|
- 7.2
|
||||||
|
- 7.3
|
||||||
|
- 7.4
|
||||||
|
- 8.0
|
||||||
|
|
||||||
|
cache:
|
||||||
|
directories:
|
||||||
|
- $HOME/.composer/cache
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
- composer require php-parallel-lint/php-parallel-lint --no-suggest --no-progress --no-interaction --no-ansi --quiet --optimize-autoloader
|
||||||
|
|
||||||
|
script:
|
||||||
|
- php vendor/bin/parallel-lint --no-progress --no-colors --exclude vendor --exclude "system/libs/pot/OTS_DB_PDOQuery_PHP71.php" .
|
132
CHANGELOG
@@ -1,132 +0,0 @@
|
|||||||
[0.2.3 - 31.05.2017]
|
|
||||||
- fixed guild management on OTHire 0.0.3
|
|
||||||
- set default skills to 10 when creating new character
|
|
||||||
- fixed displaying of "Create forum thread" in newses
|
|
||||||
- fixed deleting guild on servers that use players.rank_id field
|
|
||||||
- fixed phpmailer class loading (https://otland.net/threads/myaac-v0-0-1.251454/page-8#post-2445222)
|
|
||||||
- fixed displaying vocation amount on online page
|
|
||||||
- better support for custom vocations, you just need to set in config vocations_amount to yours.
|
|
||||||
- fixed huge space in player name (https://otland.net/threads/myaac-v0-0-1.251454/page-7#post-2444328)
|
|
||||||
- fixed Undefined variable (https://otland.net/threads/myaac-v0-0-1.251454/page-7#post-2444034)
|
|
||||||
- fixed Undefined offset (https://otland.net/threads/myaac-v0-0-1.251454/page-7#post-2444035)
|
|
||||||
|
|
||||||
[0.2.2 - 22.05.2017]
|
|
||||||
- added missing cache/signature directory
|
|
||||||
- fixed https://otland.net/threads/myaac-v0-0-1.251454/page-7#post-2443868
|
|
||||||
|
|
||||||
[0.2.1 - 21.05.2017]
|
|
||||||
- added Swedish translation by Sizaro
|
|
||||||
- fixed some bugs with installlation & characters & houses
|
|
||||||
|
|
||||||
[0.2.0 - 21.05.2017]
|
|
||||||
- added option to change character sex for premium points
|
|
||||||
- moved site_closed to database, now you can close your site through admin panel
|
|
||||||
- added option to admin panel: clear cache
|
|
||||||
- added experiencetable_rows configurable
|
|
||||||
- optimized OTS_Account->getGroupId(), now its using like 20 queries less
|
|
||||||
- optimized OTS_Player->load($id) function, should be much faster now
|
|
||||||
- fixed displaying on highscores special outfits
|
|
||||||
- fixed skull images displaying
|
|
||||||
- fixed displaying unlimited premium account
|
|
||||||
- fixed bug where players.lookaddons doesn't exist (OTHire etc.) (https://otland.net/threads/myaac-v0-0-1.251454/page-6#post-2442407)
|
|
||||||
- fixed signature tibian for OTHire and other servers that doesnt use accounts.premdays field
|
|
||||||
- fixed when player name in signature containst space
|
|
||||||
- don't show "Create forum thread" when editing
|
|
||||||
- fixed red color table after create account
|
|
||||||
- updated download links, as clients.halfaway.net isn't working anymore
|
|
||||||
- fixed some bugs while installing when field `email_next` or `hidden` already exist
|
|
||||||
- fixed movies unexpected comment
|
|
||||||
- added template_place_holder('center_top') to kathrine template
|
|
||||||
|
|
||||||
[0.1.5 - 13.05.2017]
|
|
||||||
- fixed bug with "Integrity constraint violation: 1048 Column 'ip' cannot be null"
|
|
||||||
|
|
||||||
[0.1.4 - 13.05.2017]
|
|
||||||
- added outfit shower, in characters, online, and highscores
|
|
||||||
- updated database to version 2
|
|
||||||
- fixed item images (now using item-images.ots.me host by default)
|
|
||||||
- fixed news ticket and posting long newses (https://otland.net/threads/myaac-v0-0-1.251454/page-5#post-2442026)
|
|
||||||
- news body limit increased to 65535 (mysql text field)
|
|
||||||
- removed some unused code from my old server
|
|
||||||
- added spells & monsters to kathrine template
|
|
||||||
|
|
||||||
[0.1.3 - 11.05.2017]
|
|
||||||
- this is just release to update version number
|
|
||||||
|
|
||||||
[0.1.2 - 11.05.2017]
|
|
||||||
- forgot to update CHANGELOG and MYAAC_VERSION
|
|
||||||
|
|
||||||
[0.1.1 - 11.05.2017]
|
|
||||||
- fixed updating myaac_config with database_version to 1
|
|
||||||
- fixed database updater
|
|
||||||
|
|
||||||
[0.1.0 - 11.05.2017]
|
|
||||||
- added new feature: change character name for premium points (disabled by default, you can enable it in config under account_change_character_name in config.php)
|
|
||||||
- added automatic database updater (data migrations)
|
|
||||||
- renamed events to hooks
|
|
||||||
- moved hooks to database
|
|
||||||
- now you can use hooks in plugins
|
|
||||||
- set account.type field to 5 on install, if TFS 1.0+
|
|
||||||
- added example plugin
|
|
||||||
- new, latest google analytics code
|
|
||||||
- fixed bug with loading account.name that has numbers in it
|
|
||||||
- fixed many bugs in player editor in admin panel
|
|
||||||
- added error handling to plugin manager and some more verification in
|
|
||||||
- file has been correctly unpacked/uploaded
|
|
||||||
- fixed Statistics page in admin panel when using account.number
|
|
||||||
- fixed bug when creating/recovering account on servers with
|
|
||||||
- account.salt field (TFS 0.3 for example)
|
|
||||||
- fixed forum showing thread with html tags (added from news manager)
|
|
||||||
- new, latest code for youtube videos in movies page
|
|
||||||
- fixed showing vocation images when using $config['online_vocations_images']
|
|
||||||
- many fixes in polls (also importing proper schema)
|
|
||||||
- fixed hovering on buttons in kathrine template (on accountmanagement page)
|
|
||||||
- fixed signatures (many fixes)
|
|
||||||
- added missing gesior signature system
|
|
||||||
|
|
||||||
[0.0.6 - 06.05.2017]
|
|
||||||
- fixed bug while installing (https://otland.net/threads/myaac-v0-0-1.251454/page-3#post-2440543)
|
|
||||||
- fixed bug when creating character (not showing errors) (one more time)
|
|
||||||
- fixed support for TFS 0.2 series
|
|
||||||
- added FAQ link
|
|
||||||
|
|
||||||
[0.0.5 - 05.05.2017]
|
|
||||||
- fixed bug when creating character (not showing errors)
|
|
||||||
- Fixed characters loading with names that has been created with other AAC
|
|
||||||
- fixed links to shop in default template
|
|
||||||
- fixed some weird PHP 7.1 warnings/notices
|
|
||||||
- Fixed config loading with some weird comments
|
|
||||||
- fixed bug with status info utf8 encoding (https://otland.net/threads/myaac-v0-0-1.251454/page-2#post-2440259)
|
|
||||||
- fixed when ip in log_action is NULL (https://otland.net/threads/myaac-v0-0-1.251454/page-2#post-2440357)
|
|
||||||
- fixed bug when guild doesn't exist on characters page (https://otland.net/threads/myaac-v0-0-1.251454/page-2#post-2440320)
|
|
||||||
- disabled friendly_urls by default
|
|
||||||
- fixes when $config['database_*'] is set
|
|
||||||
- added CHANGELOG
|
|
||||||
|
|
||||||
[0.0.3 - 03.05.2017]
|
|
||||||
- Full support for OTHire 0.0.3
|
|
||||||
- added support for otservers that doesn't use account.name field, instead just account number will be used
|
|
||||||
- fixed encryption detection on TFS 0.3
|
|
||||||
- fixed bug when server_config table doesn't exist
|
|
||||||
- (install) moved admin account creation to new step
|
|
||||||
- fixed news comment link
|
|
||||||
- by default, the installer creates now the Admin player, for admin account
|
|
||||||
- fixed installation errors
|
|
||||||
- fixed config.lua loading with some weird comments
|
|
||||||
|
|
||||||
[0.0.2 - 02.05.2017]
|
|
||||||
- updated forum links to use friendly_urls
|
|
||||||
- some more info will be shown when cannot connect to database
|
|
||||||
- show more error infos when creating character
|
|
||||||
- fixed forum link on newses
|
|
||||||
- fixed spells loading when there's vocation name instead of id
|
|
||||||
- fixed bug when you have changed template but it doesn't exist anymore
|
|
||||||
- fixed vocations with promotion loading
|
|
||||||
- fixed support for gesior pages and templates
|
|
||||||
- added function OTS_Acount:getGroupId()
|
|
||||||
|
|
||||||
[0.0.1 - 01.05.2017]
|
|
||||||
This is first official release of MyAAC.
|
|
||||||
Features are listed here
|
|
||||||
|
|
||||||
For more information, see the release announcement on OTLand: https://otland.net/threads/myaac-v0-0-1.251454/
|
|
966
CHANGELOG.md
Normal file
@@ -0,0 +1,966 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
## [0.8.20 - 26.11.2024]
|
||||||
|
|
||||||
|
Small fix regarding the latest release and the linux system.
|
||||||
|
|
||||||
|
Download this one, instead of the 0.8.19 if you are using linux.
|
||||||
|
|
||||||
|
If you are using 0.8.19, make this update:
|
||||||
|
|
||||||
|
The fix is to make this change in the system/libs/hooks.php
|
||||||
|
|
||||||
|
Change
|
||||||
|
```
|
||||||
|
require_once LIBS . 'src/plugins.php';
|
||||||
|
```
|
||||||
|
|
||||||
|
Into:
|
||||||
|
```
|
||||||
|
require_once LIBS . 'src/Plugins.php';
|
||||||
|
```
|
||||||
|
|
||||||
|
Yeah, we just changed 'p' to 'P' - that's just case-sensitive nature of linux.
|
||||||
|
|
||||||
|
## [0.8.19 - 19.11.2024]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* syntactic sugar for db structure changes (https://github.com/slawkens/myaac/commit/e0036a3e32e8c37c28665dd7ae18ac9b8fc167d9)
|
||||||
|
* add "None" vocation to highscores (https://github.com/slawkens/myaac/commit/7f4737631dfcb6ec255c6d9301304d3bf222a033)
|
||||||
|
* new hooks in account manage + create (https://github.com/slawkens/myaac/commit/d40178104b0f411b9672102c49a4b87ac16e1779)
|
||||||
|
* new functions: getGuildNameById($id) + getGuildLogoById($id) + Plugins::installMenus($templateName, $menus, $clearOld = false) (https://github.com/slawkens/myaac/commit/de1bb37bcb6d111fbdf185ef9c2fec7e7f05053e + https://github.com/slawkens/myaac/commit/d1c5a189c3b182a36933ed507c6ae36b61fe1d45 + https://github.com/slawkens/myaac/commit/5a953ce901522d080aa16fcfcd268e9544bf6e1a)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* set default encryption to sha1 (https://github.com/slawkens/myaac/commit/55b8645d3f38c47f4aafc1906625b676c429cdd5)
|
||||||
|
* prefer get_browser_real_ip() over REMOTE_ADDR (cause of Cloudflare and similar services) (https://github.com/slawkens/myaac/commit/b5bbae62b09db50a73bfa3e288245ea718005aa9)
|
||||||
|
* allow account_create_character_create even if account_mail_verify is activated (https://github.com/slawkens/myaac/commit/1edf8833c844b25372017e4affaf12aa02cdce7a)
|
||||||
|
* better https detection (patched from develop) (https://github.com/slawkens/myaac/commit/d73aceb272d0615244fcfd0998d75e6c6c15d3fe)
|
||||||
|
* require login before create new thread (#261, @anyeor)
|
||||||
|
* better tables.headline.html.twig (patched from 1.0) (https://github.com/slawkens/myaac/commit/71ef30d35ecb2f876e9b861f211f737302bf408e)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* bans page fixed functions getPlayerNameByAccount + getPlayerNameById (https://github.com/slawkens/myaac/commit/d39386cfabfa13e5c916ead69e2f8f90fdc47f4f)
|
||||||
|
* account verify - do not allow login without verified email (https://github.com/slawkens/myaac/commit/1edf8833c844b25372017e4affaf12aa02cdce7a, Thanks @anyeor)
|
||||||
|
* if <flags> is not present in monster.xml (https://github.com/slawkens/myaac/commit/81b6652738a7b04be3980cbf55443a6fbe437b34)
|
||||||
|
* $db->update when there is null value (https://github.com/slawkens/myaac/commit/1458b7a412ff6875cebba1b88d380f7f959ee6be)
|
||||||
|
* error on $db __destruct saving current script name in CLI (https://github.com/slawkens/myaac/commit/01660bd2b4967315c0e16d2f83c6c39f0b78683d)
|
||||||
|
|
||||||
|
## [0.8.18 - 29.05.2024]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* hook in guilds page to support guild wars (https://github.com/slawkens/myaac/commit/f875f3cd2059fac5c23a08ce73dd8621a66613e0)
|
||||||
|
|
||||||
|
## [0.8.17 - 18.05.2024]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* TwigTypeCastingExtension (https://github.com/slawkens/myaac/commit/7181b988e9518320d57486670ca4e2d3b2fe1cfa)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* fix XSS in creatures.php (https://github.com/slawkens/myaac/commit/02eea950e4fd756e8d5c32e56181986d51f5ac70, @gesior)
|
||||||
|
* don't allow redirect to external website (https://github.com/slawkens/myaac/commit/ef62b53cec5a479cc85aa15940ad9ebbcefde876)
|
||||||
|
* change_info if account_country is disabled (https://github.com/slawkens/myaac/commit/62d3c198d567541a90900fe2d7ede070e7b1ff68)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* use word-break: break-all in guilds description + character comment (https://github.com/slawkens/myaac/commit/191ad25eb2d4c1cec6f6668da7a345fec0ad2a7f)
|
||||||
|
* set default status_ip to 127.0.0.1, most server are hosted locally anyway (https://github.com/slawkens/myaac/commit/2793c41655b47f7db295143a298ccda70f11462b)
|
||||||
|
|
||||||
|
## [0.8.16 - 12.02.2024]
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* broken installation
|
||||||
|
* database and finish step warnings/errors (https://github.com/slawkens/myaac/pull/245, @danilopucci)
|
||||||
|
* silently ignore if the hook does not exist
|
||||||
|
|
||||||
|
## [0.8.15 - 09.12.2023]
|
||||||
|
|
||||||
|
More security fixes, especially in bugtracker.
|
||||||
|
|
||||||
|
## [0-8.14 - 27.11.2023]
|
||||||
|
Security fixes.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* XSS vulnerability in bugtracker (https://github.com/slawkens/myaac/commit/83a91ec540072d319dd338abff45f8d5ebf48190)
|
||||||
|
* XSS vulnerability in forum (https://github.com/slawkens/myaac/commit/d1bc63d07ad88a143358cacd2c417891eea74dcc + https://github.com/slawkens/myaac/commit/55dbade8d5280c5baed45e5f7ebc3613b8e9b9e8)
|
||||||
|
* Session Fixation (https://github.com/slawkens/myaac/commit/483155cf4c1e3068aaee0d44541dfa61f6223379)
|
||||||
|
* displaying ban info on account page (https://github.com/slawkens/myaac/commit/764db0c203d1826ffce3a5a78f83a97e56bd0685)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* Clear some additional cache keys - like database cache (https://github.com/slawkens/myaac/commit/4327b66f915d06dce504211692173606b9ef3b4e)
|
||||||
|
|
||||||
|
## [0.8.13 - 16.09.2023]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* latest client versions to config (https://github.com/slawkens/myaac/commit/765886f0c782807400c429577cde5e45bd7c308f)
|
||||||
|
* patching from develop - twig context for hooks (https://github.com/slawkens/myaac/commit/f1670f4012cc7595433fe0b1937c1f9b15a60b07)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* fixed XSS vulnerability in some pages (https://github.com/slawkens/myaac/commit/5c3b01aca4f3cfe8abc86b8ce48194b2da87b808)
|
||||||
|
|
||||||
|
Nothing more or less!
|
||||||
|
|
||||||
|
## [0.8.12 - 07.08.2023]
|
||||||
|
I've moved the repository back to my personal account. (Just so you know!)
|
||||||
|
|
||||||
|
I will also try to add git commits pointed to each change, lets see if you like it or not - you can comment in discussion, that will be created just after releasing this version :)
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* forum: better error messages (Suggested by @anyeor) (https://github.com/slawkens/myaac/commit/34725e0257684fe5fa43875cc3a8f587ba04642e)
|
||||||
|
* more support for GesiorAAC classes, so some of them will work with MyAAC (https://github.com/slawkens/myaac/commit/a8172a518ff8939c4402349b16c064fcaf855d31)
|
||||||
|
* word-break on forum thread & reply (Suggested by @anyeor) (https://github.com/slawkens/myaac/commit/ce4aed0f1719d2aadc749e5238e883e3c10e2686)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* not working pages/links from database, introduced in 0.8.10 (Thanks to OtLand user - https://otland.net/members/0lo.99657/ for report) (https://github.com/slawkens/myaac/commit/1e874c7027769bd09e772a1cdac75d7e37991256)
|
||||||
|
* it was possible to create topic in board that was closed, ommiting the error check (Thanks to @anyeor for report) (https://github.com/slawkens/myaac/commit/0d52978d9fb99869500d35e7676f454ca5eaba14)
|
||||||
|
* PHP 8.2 compatibility - removed deprecated functions utf8_encode & utf8_decode (https://github.com/slawkens/myaac/commit/a338fd967cdbcc89e86be4e6b66b2cad2ff23251)
|
||||||
|
* guild description not being correctly shown (Reported by @anyeor) (https://github.com/slawkens/myaac/commit/f2a3ec1185df64ad9084d4ff55790ae4a5b3e5fd, https://github.com/slawkens/myaac/commit/df321154f63d458a4bc7d83bac5e3447b67317a4)
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
* Some old code for verifying messages length (Reported by @anyeor) (https://github.com/slawkens/myaac/commit/df48363ea4ced4350fd90ffddf57d464ba5afa8b)
|
||||||
|
* some info about config failed to load, was never working (https://github.com/slawkens/myaac/commit/7a546e5a41036b0e9e926d337c6f2e3c41c591d2)
|
||||||
|
|
||||||
|
## [0.8.11 - 30.06.2023]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* new function from 0.9 - Cache::remember($key, $ttl, $callback)
|
||||||
|
* new characters page hooks
|
||||||
|
* line number & file to exception handler, to easier localize exceptions
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* rename to .htaccess.dist, causes some problems on default setup
|
||||||
|
* removing unneccessary PHP closing tags to prevent potential issues (by @SRNT-GG)
|
||||||
|
* display warning if hook file does not exist
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* important: Not allow create char if limit is exceeded (by @anyeor) could have been used to spam database
|
||||||
|
* deleted chars: cannot change comment, name, gender, cannot create guild, cannot be invited, cannot accept invite, cannot be passed leadership to
|
||||||
|
* forum: quote and edit post buttons not being shown
|
||||||
|
* twig exception thrown when player does not exist, on character change comment (thanks @anyeor)
|
||||||
|
* BASE_DIR when accessing /tools
|
||||||
|
* do not display warning if HTTP_ACCEPT_LANGUAGE is not set
|
||||||
|
|
||||||
|
## [0.8.10 - 18.05.2023]
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* PHP 7.2.5 is now required, cause of Twig 2.x
|
||||||
|
* allow pages to be placed in templates folder, under pages/ subfolder
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* Twig error with global variable on create account
|
||||||
|
* links/redirects from facebook, etc. like ?fbclid=x
|
||||||
|
* do not allow to continue install when there is no server database imported
|
||||||
|
* cannot go forward when config.local.php cannot be saved
|
||||||
|
* when server uses another items serializer
|
||||||
|
* small bug on install - please fill all input
|
||||||
|
|
||||||
|
## [0.8.9 - 16.03.2023]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* You can now disable server status checking for testing purposes, useful for local testing when there is no server running
|
||||||
|
* with this, the page won't need 2 seconds to load
|
||||||
|
* set status_enabled to false in config.php
|
||||||
|
* new buttons code for tibiacom template, can create button with any text
|
||||||
|
* patched some small changes from develop branch
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* add .git to denied folders in nginx-sample.conf
|
||||||
|
* plugins folder is now accessible from outside
|
||||||
|
* add plugins folder to twig search paths
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* player save on tfs 1.5 with new ipv6
|
||||||
|
* more php 8.x compatibility
|
||||||
|
* rel path for exception message, causing message to be not in red background
|
||||||
|
|
||||||
|
## [0.8.8 - 18.02.2023]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* mail confirmed reward
|
||||||
|
* support for latest group changes in TFS
|
||||||
|
* new function: escapeHtml
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
* TinyMCE to v4.9.1 (latest release in 4.x series)
|
||||||
|
* Twig to v2.15.4
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* you can now place custom pages in your template directory under pages/ folder
|
||||||
|
* HOOK_LOGOUT parameters, now only account_id is passed
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* ipv6 introduced in latest TFS
|
||||||
|
* config.account_premium_days for TFS 1.4+
|
||||||
|
* better compatibility with GesiorAAC
|
||||||
|
* PHP 8.1 compatibility
|
||||||
|
* myaac_ db table detection failure
|
||||||
|
* reload creatures error, when items cache has been cleared
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
* accounts.blocked column, which is not used by AAC
|
||||||
|
|
||||||
|
## [0.8.7 - 31.08.2022]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* login.php for client 12.x is now part of official repo
|
||||||
|
* browsehappy code
|
||||||
|
* config use character sample skill (#201, @gpedro)
|
||||||
|
* custom words blocked (#190, @gpedro)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* save php sessions in myaac dir
|
||||||
|
* don't count deleted players when creating new character
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* patch vulnerability in change_rank.php (#194, @gesior, @thatmichaelguy)
|
||||||
|
* fix guild invite page (#196, @worthdavi)
|
||||||
|
* players not showing on highscores page (#195)
|
||||||
|
* highscores page bug with high pages
|
||||||
|
* $player->getStorage() does not work at all (#169, @gesior)
|
||||||
|
* copying sample character when it have items with quotes (#200, @gpedro)
|
||||||
|
* IPv6 issue when env is set to dev (#171)
|
||||||
|
* admin page changed feet to match body colour (#174, @silic0nalph4)
|
||||||
|
* exception being thrown when creating duplicated character name (#191)
|
||||||
|
* rules page formatting (#177, @silic0nalph4)
|
||||||
|
* account character create if auto_login is enabled
|
||||||
|
* undefined variable notice on database_log enabled
|
||||||
|
* removed VERSION file
|
||||||
|
|
||||||
|
## [0.8.6 - 10.07.2021]
|
||||||
|
This update contains very important security fix.
|
||||||
|
|
||||||
|
Please update your MyAAC instances to this version.
|
||||||
|
|
||||||
|
## [0.8.5 - 08.06.2021]
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* bcmath module is not required anymore
|
||||||
|
* Gratis premium account fixes (#156, by @czbadaro)
|
||||||
|
* Update 404 response (#163, by @anyeor)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* compatibility with PHP 7.0 and lower
|
||||||
|
* deleting ranks in guilds (#158, by @Misztrz)
|
||||||
|
* guild back buttons (change logo & motd)
|
||||||
|
* forum table style (boards & thread view)
|
||||||
|
* guild list description new lines `<br>` being ignored (Thanks @anyeor for reporting)
|
||||||
|
|
||||||
|
|
||||||
|
## [0.8.4 - 18.02.2021]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* support for accounts.premium_ends_at (Latest TFS 1.x)
|
||||||
|
* more clients to clients.conf.php
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* minimum PHP 5.6 is now required
|
||||||
|
* password can now contain any characters
|
||||||
|
* add SSL on external image requests of items and outfits (@fernandomatos)
|
||||||
|
* Use local storage for saving menu items (tibiacom template) - fixes bug with some websites like wykop.pl (browser freeze)
|
||||||
|
* increase size of myaac_visitors.page column to 2048 (Thanks to OtLand user kaleuui)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* compatibility with PHP 8.0 (latest XAMPP)
|
||||||
|
* displaying PHP errors on env = "prod"
|
||||||
|
* the Guildnick not showing in the guild pages (@leesneaks)
|
||||||
|
* you cannot delete character more than twice (Thanks Okke)
|
||||||
|
* ignore arrays in config.lua (fixes experienceStages loading)
|
||||||
|
* parsing empty strings in config.lua (with comments)
|
||||||
|
* headling.php cannot find font
|
||||||
|
|
||||||
|
## [0.8.3 - 27.10.2020]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* pdo_mysql as required extension
|
||||||
|
* some notice about Email validation in create account
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* Move register DATABASE_VERSION into schema.sql
|
||||||
|
* Caused migrations being fired when user manually imported database
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* creating very uncommon (bugged) account names
|
||||||
|
* XSS in character search
|
||||||
|
* Admin menu news editing warning when leaving page without touching the inputs
|
||||||
|
* Guild Invite not working on otservbr-global
|
||||||
|
* two boxes being show on email_change_cancel
|
||||||
|
* when adding poll = template tibiacom broken
|
||||||
|
* houses: Unknown column 'guild' in 'where clause (https://github.com/slawkens/myaac/issues/131)
|
||||||
|
* account create when account_mail_verify is enabled
|
||||||
|
* CloudFlare IP detection
|
||||||
|
* network_twitter link in tibiacom template
|
||||||
|
|
||||||
|
## [0.8.2 - 03.06.2020]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* Log query time in database_log (can be used for benchmarking)
|
||||||
|
* new PHP constant: IS_CLI
|
||||||
|
* $_SERVER['REQUEST_URI'] to database.log
|
||||||
|
* outfit to highscores box in tibiacom template
|
||||||
|
* system/data to .gitignore
|
||||||
|
* error_reporting in admin panel (when in dev mode), so it shows php notices and warnings
|
||||||
|
* example quests in config.php
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* account_login input type from password to text
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* Guild Invite not working on otservbr-global (#123)
|
||||||
|
* news not updating after adding in admin panel
|
||||||
|
* wrong mana of character samples (#125)
|
||||||
|
* missing rules page on clean install
|
||||||
|
* double space character name creation (@Lee, #121)
|
||||||
|
* creatures page: Max count and chance not shown on hovered items
|
||||||
|
* exception being thrown when characters.frags enabled on TFS 1.x
|
||||||
|
* TFS 0.4 guilds creation (Where guilds.checkdata and motd doesn't have default value)
|
||||||
|
* ERR_TOO_MANY_REDIRECTS browser error on template change
|
||||||
|
* updating template menus on template change
|
||||||
|
* Account change info when config.account_country is disabled
|
||||||
|
* cancel change email request
|
||||||
|
* config.character_name_min/max_length being ignored in change_name.php
|
||||||
|
* some rare bugs when database is no up-to-date and someone enters admin panel
|
||||||
|
* extra line that is added when using a newer version than official release (@Lee)
|
||||||
|
* admin links in featured article
|
||||||
|
* some PHP Notice when HTTP_HOST is not set (Can happen on some old versions of HTTP protocol)
|
||||||
|
* Show character indicator in check_name.js
|
||||||
|
* Houses list View button was wrong (was from bootstrap)
|
||||||
|
* OTS_House __construct - not loading by houseid parameter
|
||||||
|
* message() function when executed in CLI
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
* unused myaac_commands table from schema
|
||||||
|
* MyISAM engine from migration scripts (#128)
|
||||||
|
|
||||||
|
## [0.8.1 - 10.03.2020]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* Support for Nostalrius OTS
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* Move TODO to wiki
|
||||||
|
* .tooltip css class to .item_image (bootstrap conflict)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* Reloading of creatures/monsters throwing an exception
|
||||||
|
* Loading custom pages with old Gesior variables [#108](https://github.com/slawkens/myaac/issues/107)
|
||||||
|
* Some weird behaviour with installation of plugins
|
||||||
|
* CHANGELOG.md loading in Admin Panel
|
||||||
|
* spells displaying when level = 0
|
||||||
|
* Some PHP warnings and notices
|
||||||
|
|
||||||
|
## [0.8.0 - 19.02.2020]
|
||||||
|
|
||||||
|
### Added:
|
||||||
|
* new Awesome Bootstrap Admin Panel by Lee (@Leesneaks)
|
||||||
|
* using Bootstrap 3
|
||||||
|
* all existing pages were adjusted
|
||||||
|
* new editor: Accounts
|
||||||
|
* improved editor: Players
|
||||||
|
* new Reports View page
|
||||||
|
* Modules directory, which can be added using Plugins (@Leesneaks, @whiteblXK)
|
||||||
|
* move News Management here (@whiteblXK)
|
||||||
|
* interactive player outfit chooser (@tobi132)
|
||||||
|
* added Highscores by balance
|
||||||
|
* possibility to define colors and "Open in New Tab" on Template Menus (needs to be supported by Template)
|
||||||
|
* support for database persistent and socket connections (performance boost)
|
||||||
|
* Team page - display outfits of the players (configurable)
|
||||||
|
* added clear_cache.php, send_email.php bin commands (@slawkens, @tobi132)
|
||||||
|
* added locale pt_br (@ivenspontes)
|
||||||
|
* added load time into items & weapons loading admin page
|
||||||
|
* new, beautiful exception handler
|
||||||
|
* added travisci to prevent mistype (@gpedro, #89)
|
||||||
|
* added showing database name into installation script (@tobi132)
|
||||||
|
* compatibility with old z_ gesior table (@tobi132, #46)
|
||||||
|
* added nginx-sample.conf, .editorconfig, VERSION
|
||||||
|
* database towns table support for TFS 1.3 (@tobi132)
|
||||||
|
* added enable_tinymce option to Pages editor
|
||||||
|
|
||||||
|
### Fixed:
|
||||||
|
* account login redirect with special chars (like '&' and '?')
|
||||||
|
* black skull info at serverInfo (@tornadia)
|
||||||
|
* set correct limit at lastkills page from config (anyeor from OtLand)
|
||||||
|
* myaac_monsters table column loot problem (#79)
|
||||||
|
* players column deleted install description (@gpedro, #91)
|
||||||
|
* experience table being to wide and buggy on some templates (@tobi132, #90)
|
||||||
|
* fix errors with .htaccess files
|
||||||
|
* added index.html to prevent indexing the folder by mod_index
|
||||||
|
|
||||||
|
### Changed:
|
||||||
|
* Environment is now configurable by env setting (Significantly better load times with 'prod')
|
||||||
|
* replace spells, monsters tables with JavaScript Sortable Tables - DataTables (@Leesneaks)
|
||||||
|
* change default MySQL Storage Engine to InnoDB and Default Character Set to utf8
|
||||||
|
* updated OTS_House class to support latest TFS 1.x (new columns)
|
||||||
|
* updated monster images to the original ones from tibia.com
|
||||||
|
* increased the minimum length (3 -> 4) and decreased the maximum length (25 -> 21) of the New Character Name (by @vankk)
|
||||||
|
* use $db->exec instead of $db->query optimisation
|
||||||
|
* move items from database to Cache_PHP (Much more faster load time)
|
||||||
|
* allow simultaneous loading of config.ini and config.php in templates
|
||||||
|
* updated copyright year and SSL link (@EPuncker, #88)
|
||||||
|
* move commands, rules and downloads pages into database (@tobi132)
|
||||||
|
* better view of guilds (new buttons, table look and feel) (@tobi132)
|
||||||
|
* remove stupid alerts on account create
|
||||||
|
* remove .dist extension from .htaccess
|
||||||
|
|
||||||
|
### New Configurables (config.php)
|
||||||
|
* env (Environment)
|
||||||
|
* account_create_auto_login (Auto Login after Create Account - Registration)
|
||||||
|
* account_create_character_create (Create Character directly on Create Account page) (@tobi132)
|
||||||
|
* footer_show_load_time (display load time of the page in the footer)
|
||||||
|
* database_socket (Connection via Unix Socket)
|
||||||
|
* database_persistent (Database Persistent Connection)
|
||||||
|
* database_log (Logging of Database Queries)
|
||||||
|
* admin_panel_modules (Modules displayed in Admin Panel Dashboard)
|
||||||
|
* status_timeout, status_interval
|
||||||
|
* smtp_debug (More info about SMTP errors in error.log)
|
||||||
|
* team_display_outfit (Display outfit of the team members on teams page)
|
||||||
|
* highscores_balance (Display highscores by balance)
|
||||||
|
* character_name_min/max_length (Minimum and maximum length of character name)
|
||||||
|
* characters.deleted (display deleted characters on characters page)
|
||||||
|
|
||||||
|
### Forum:
|
||||||
|
* show image in full screen on click
|
||||||
|
* show user avatar (outfit) in posts
|
||||||
|
* replaced forum actions links (move, remove, edit, quote) with images
|
||||||
|
* redirect directly to the thread on user login (on new reply)
|
||||||
|
|
||||||
|
### Installer:
|
||||||
|
* AJAX loader for the important stuff
|
||||||
|
* create admin account: ask for e-mail + character name
|
||||||
|
* load items & weapons
|
||||||
|
* check user IP on install to prevent install by random user
|
||||||
|
* remember status of the installation
|
||||||
|
* remember language on first step (welcome)
|
||||||
|
* ask user for timezone
|
||||||
|
* auto detected browser language in select language
|
||||||
|
|
||||||
|
### Plugins
|
||||||
|
* sandbox for plugins, don't install when requirements are not satisfied
|
||||||
|
* allow comments inside plugin json file (php style)
|
||||||
|
* new require options for plugins: (look into example.json)
|
||||||
|
* require database version, table or column of the MyAAC schema
|
||||||
|
* require php-extension
|
||||||
|
* require semantic-version (like in composer.json)
|
||||||
|
* new hooks: LOGIN, LOGIN_ATTEMPT, LOGOUT, HOOK_ACCOUNT_CREATE_*
|
||||||
|
|
||||||
|
### Cache
|
||||||
|
* php 7.x APCu cache support (faster cache engine)
|
||||||
|
* new cache engine: plain PHP (is good with pure php 7.0+ and opcache)
|
||||||
|
* cache lastkills.php, $db->hasTable, $db->hasColumn, hooks and template menus
|
||||||
|
* stop using global $cache variable, use Singleton pattern instead
|
||||||
|
|
||||||
|
### Twig
|
||||||
|
* move pages to Twig templates: team, lastkills, serverinfo, houses, guilds.list, guild.view, admin.logs, admin.reports (@whiteblXK, @tobi132)
|
||||||
|
* replace "$twig->render()" with "$this->display"
|
||||||
|
* move Twig functions to separate file
|
||||||
|
* move tibiacom boxes to Twig templates
|
||||||
|
* allow Pages to be loaded as Twig template (this allows using Twig variables in Pages) (@tobi132)
|
||||||
|
* allow string to be passed to hook twig function
|
||||||
|
|
||||||
|
### Functions
|
||||||
|
* config($key), configLua($key)
|
||||||
|
* clearCache()
|
||||||
|
* OTS_Account:
|
||||||
|
* getCountry()
|
||||||
|
* setLastLogin($lastlogin) (@Leesneaks)
|
||||||
|
* setWebFlags(webflags) (@Leesneaks)
|
||||||
|
* OTS_Player:
|
||||||
|
* getAccountId()
|
||||||
|
* countBlessings() (@Leesneaks)
|
||||||
|
* checkBlessings($count) (@Leesneaks)
|
||||||
|
* is_sub_dir (in system/libs/plugins.php)
|
||||||
|
* Twig:
|
||||||
|
* getPlayerLink($name, $generate = true)
|
||||||
|
* removed SQLquote and SQLquery from OTS_Base_DB
|
||||||
|
* Add optional $params param into log_append (will log arrays) (@tobi132)
|
||||||
|
|
||||||
|
### Internal
|
||||||
|
* moved clients list to the new file (clients.conf.php)
|
||||||
|
* changed tableExist and fieldExist to $db->hasTable(table) + $db->hasColumn(table, column)
|
||||||
|
* changed deprecated $ots->createObject() functions with their OTS_ equivalents
|
||||||
|
* add global helper config($key) function + twig binding
|
||||||
|
* use config() instead of global $config
|
||||||
|
* remove unnecessary parentheses in include/require PHP functions
|
||||||
|
* use __DIR__ instead of dirname(__FILE__) - since PHP 5.3.0
|
||||||
|
* change intval() function to (int) casting (up to 6x faster)
|
||||||
|
* add release.sh script (for GitHub releases)
|
||||||
|
* use curl as alternative option for reporting install
|
||||||
|
|
||||||
|
### Libraries
|
||||||
|
* updated Twig to version v1.35.0
|
||||||
|
* updated TinyMCE to version v4.7.4
|
||||||
|
|
||||||
|
### Deprecations
|
||||||
|
* change deprecated HTML <center> tag to <div style="text-align:center">
|
||||||
|
* replace deprecated HTML <font> tag with <span>
|
||||||
|
|
||||||
|
## [0.7.11 - 04.05.2019]
|
||||||
|
### Added:
|
||||||
|
* support for some old servers, where arrays are used in config.lua
|
||||||
|
* an additional text to the install page informing that user can reinstall MyAAC by deleting config.local.php
|
||||||
|
|
||||||
|
### Fixed:
|
||||||
|
* XSS in forum show_thread
|
||||||
|
* guilds - "Add new rank" function
|
||||||
|
* multiple mail recipients when using admin mailer function
|
||||||
|
* Admin Panel - MyAAC logs not shown if servers logs directory doesn't exist (#47)
|
||||||
|
* missing prefix for cache get() and delete() functions
|
||||||
|
* add fatal error message when myaac tables in database do not exist
|
||||||
|
* the mystical defect where "Create Account" button was not highlighted (on the account/manage page)
|
||||||
|
* bug where server_config table does not exist (OTHire as an example)
|
||||||
|
* database_name in Usage_Statistics
|
||||||
|
* forgot to open <head> in install template
|
||||||
|
|
||||||
|
### Changed:
|
||||||
|
* do not display software version
|
||||||
|
|
||||||
|
## [0.7.10 - 03.03.2018]
|
||||||
|
### Added:
|
||||||
|
* new configurable: smtp_secure
|
||||||
|
* robots.txt
|
||||||
|
|
||||||
|
### Fixed:
|
||||||
|
* editing an existing page that had php enabled
|
||||||
|
* chrome bug on save (when editing page) ERR_BLOCKED_BY_XSS_AUDITOR
|
||||||
|
* showing IP and Port in admin panel (#44, by miqueiaspenha)
|
||||||
|
* deleting plugin showing "You don't have rights to delete"
|
||||||
|
* some bug with PHPMailer not finding its language file
|
||||||
|
* default accounts.vote value
|
||||||
|
* saving some really high long ip addresses
|
||||||
|
|
||||||
|
### Changed:
|
||||||
|
* update config.highscores_ids_hidden on install when there are samples already in database
|
||||||
|
* auto add z_polls table on install
|
||||||
|
|
||||||
|
### Internal:
|
||||||
|
* changed mb_strtolower functions to strtolower()
|
||||||
|
* added new function: $hooks->exist($type)
|
||||||
|
|
||||||
|
## [0.7.9 - 13.01.2018]
|
||||||
|
* removed 6mb of trash (some useless things)
|
||||||
|
* (fix) TFS 1.x not showing promoted vocations in highscores
|
||||||
|
* otserv 0.6.x: fixed some warning (on the characters page) and fatal mysql error (on the mango signature)
|
||||||
|
* fixed default stamina on otserv 0.6.x engine (and some others perhaps)
|
||||||
|
* install: change permission check to is_writable
|
||||||
|
* changed highscores_groups_hidden to 3 (for TFS 1.x)
|
||||||
|
* updated background-artwork (tibiacom template) to the latest version, removed other ones
|
||||||
|
|
||||||
|
## [0.7.8 - 12.01.2018]
|
||||||
|
* fixed installation error " call to undefined method OTS_DB_MySQL::hasColumn()"
|
||||||
|
* updated tinymce to the latest (4.7.4) version
|
||||||
|
* enabled emoticons plugin in tinymce :)
|
||||||
|
* some security fixes
|
||||||
|
|
||||||
|
## [0.7.7 - 08.01.2018]
|
||||||
|
* important fix for servers with promotion column (caused player.vocation to be resetted when saving player, for example: on change name, accept invite to guild, leave guild)
|
||||||
|
* immediately reload config.lua when there's change in config.server_path detected
|
||||||
|
* added new forum option: "Enable HTML" (only for moderators)
|
||||||
|
* fixed othire default column value (#26)
|
||||||
|
* fixed saving custom vocations in admin panel (#36)
|
||||||
|
* fixed warning in highscores when vocation doesn't exist
|
||||||
|
* fixed characters page - config.characters.frags "Notice: Use of undefined constant"
|
||||||
|
* fixed getBoolean function when boolean is passed
|
||||||
|
* fixed empty success message on leave guild
|
||||||
|
* fixed displaying premium account days
|
||||||
|
* function OTS_Account:getPremDays will now return -1 if there's freePremium configurable enabled on the server
|
||||||
|
* fixed tr bgcolor in characters view (Frags) (#38)
|
||||||
|
* fixed some warning in guild show
|
||||||
|
* fixed PHP warning about country not existing on online and characters pages
|
||||||
|
* fixed forum bbcode parsing
|
||||||
|
* don't add extra <br/> to the TinyMCE news forum posts
|
||||||
|
* (internal) using $player->getVocationName() where possible instead of older method
|
||||||
|
|
||||||
|
## [0.7.6 - 05.01.2017]
|
||||||
|
* fixed othire account creating/installation
|
||||||
|
* fixed table name players -> players_online
|
||||||
|
* fixed unexpected error logging about email fail
|
||||||
|
* added max_execution_time to the install finish step
|
||||||
|
* some small fix regarding highscores vocation box
|
||||||
|
|
||||||
|
## [0.7.5 - 04.01.2017]
|
||||||
|
* fixed bug on othire with config.account_premium_days
|
||||||
|
* fixed bug on TFS 1.x when online_afk is enabled
|
||||||
|
* warning about leaving news page with changes
|
||||||
|
* added player status to tibiacom top 5 highscores box
|
||||||
|
* save detected country on create account in session
|
||||||
|
* fixed getPremDays and isPremium functions (newest 11.x engines are bugged when it comes to PACC, its not fault of MyAAC)
|
||||||
|
* fix when there are no changelogs or highscores yet
|
||||||
|
* small fix regarding getTopPlayers function which was ignoring $limit variable
|
||||||
|
* fixed news adding when type != ARTICLE
|
||||||
|
* fixed template path finding
|
||||||
|
* fixed displaying article_text when it was empty saved
|
||||||
|
|
||||||
|
## [0.7.4 - 24.12.2017]
|
||||||
|
* fixed mysql fatal error on tibiacom template - top 5 box
|
||||||
|
* fixed displaying of level percent bar on tibian signature
|
||||||
|
* inform user about Twig cache failure on installation, instead of http 500 error
|
||||||
|
* when dir system/cache is not writable by the webserver, then show some nice notice to the user about it instead of http 500 error
|
||||||
|
* remember client version select and usage stats checkbox in session on install
|
||||||
|
* automatically update highscores_ids_hidden for users who installed myaac before (migration)
|
||||||
|
|
||||||
|
## [0.7.3 - 18.12.2017]
|
||||||
|
* auto generate myaac cache & session prefix on install to be unique across installations
|
||||||
|
* fixed hiding shop system menu on tibiacom template when disabled in config
|
||||||
|
* prevent adding duplicated newses with installation
|
||||||
|
* some changes to sample characters: chanced town_id to 1, posx: 1000, posy: 1000, posz: 1000 and default group_id to 1 so you can change in-game outfits and they will be used
|
||||||
|
* added version 772 constant to install client choose (OTHire)
|
||||||
|
* better solution for hidding samples (configurable) - highscores_ids_hidden
|
||||||
|
* fixed account.login redirect not working on tibiacom template
|
||||||
|
* installation: warn about wrong admin account name/id and password
|
||||||
|
* fixed last menu closing in tibiacom template
|
||||||
|
* updated polish locale (translation) on install
|
||||||
|
* (internal) removed some duplicated code on install finish
|
||||||
|
* (internal) renamed installation step files to be in correct order
|
||||||
|
* added TODO file
|
||||||
|
|
||||||
|
## [0.7.1 - 13.12.2017]
|
||||||
|
* added changelog menu item to kathrine template
|
||||||
|
* fixed some php short tag in changelogs page
|
||||||
|
* fixed guild change description back button
|
||||||
|
* removed duplicated "Support List" menu item from tibiacom template
|
||||||
|
* changed some notice when version check is failed
|
||||||
|
* (internal) moved changelog to twig
|
||||||
|
|
||||||
|
## [0.7.0 - 20.11.2017]
|
||||||
|
* moved template menus to database, they're now dynamically loaded
|
||||||
|
* added anonymous usage statistics reporting (only if user agrees, first usage report will be send after 7 days)
|
||||||
|
* you can edit them in Admin Panel under 'Menus' option
|
||||||
|
* you can also add custom links, like http://google.pl
|
||||||
|
* added networks (facebook and twitter) and highscores (top 5) boxes to tibiacom template, configurable in templates/tibiacom/config.php
|
||||||
|
* added news ticker for kathrine template
|
||||||
|
* added featured article to tibiacom template (you can add them with add news button)
|
||||||
|
* added tinymce editor to 'Pages' in admin panel
|
||||||
|
* added links to edit/delete/hide custom page directly from page
|
||||||
|
* update forum post after editing news (when forum post has been created)
|
||||||
|
* enabled code plugin for tinymce which enabled raw html code editing
|
||||||
|
* removed videos pages, as it can be easily added using custom Menus and Pages with insert Media
|
||||||
|
* removed bug_report configurable, its now enabled by default
|
||||||
|
* log some error info when mail cannot be send on account create
|
||||||
|
* twig getLink function will now return with full url (BASE_URL included)
|
||||||
|
* verify install post values directly on config page and display error
|
||||||
|
* updated tinymce to version 4.7.2 (from 4.7.0)
|
||||||
|
* updated phpmailer to version 5.2.26 (from 5.2.23)
|
||||||
|
* (#30) (fix) recovering account on servers that doesn't support salts
|
||||||
|
* (fix) account email confirm function
|
||||||
|
* (fix) showing changelog with urls in Admin Panel
|
||||||
|
* (fix) uninstalling plugin
|
||||||
|
* (fix) polls box in tibiacom template
|
||||||
|
* (fix) remove hooks from db on plugin deinstall
|
||||||
|
* (fix) some weird include possibilities with forum and account actions (verify action name)
|
||||||
|
* (fix) loading hooks from plugin installed from command line
|
||||||
|
* (fix) some changelog PHP Notice warning
|
||||||
|
* (internal) moved uninstall logic to Plugins class
|
||||||
|
* (internal) moved tibiacom boxes to separate directory
|
||||||
|
* (internal) moved news tickers to twig template
|
||||||
|
* (internal) moved Forum class to separate file
|
||||||
|
* (internal) moved deprecated functions to compat.php
|
||||||
|
* (internal) added some compat functions that are used by shop system
|
||||||
|
* (internal) renamed constant TICKET -> TICKER
|
||||||
|
* (internal) shortened message functions
|
||||||
|
|
||||||
|
## [0.6.6 - 22.10.2017]
|
||||||
|
* fixed some php fatal error on spells page
|
||||||
|
* changed spells.vocations field in db size to 300
|
||||||
|
* please reload your spells after this update!
|
||||||
|
|
||||||
|
## [0.6.5 - 21.10.2017]
|
||||||
|
* fixed displaying custom pages
|
||||||
|
* fixed adding new group forum board
|
||||||
|
|
||||||
|
## [0.6.4 - 20.10.2017]
|
||||||
|
* reverted OTS_Account::getLastLogin() cause its used by tibia11-login plugin
|
||||||
|
|
||||||
|
## [0.6.3 - 20.10.2017]
|
||||||
|
* fixed creating account
|
||||||
|
* fixed viewing thread without being logged
|
||||||
|
* fixed showing premium account status
|
||||||
|
|
||||||
|
## [0.6.2 - 20.10.2017]
|
||||||
|
* added forums for guilds and groups
|
||||||
|
* added nice looking menu for my account page in default template
|
||||||
|
* new command line tool: install_plugin.php - can be used to install plugins from command line. Usage: "php install_plugin.php path_to_file"
|
||||||
|
* added new tooltip to view characters equipment item name and monster loot
|
||||||
|
* added items.xml loader class and weapons.xml loader class
|
||||||
|
* minimum PHP version to install AAC is now 5.3.0 cause of Anonymous functions used by Twig
|
||||||
|
* Added 'Are you sure?' popup when uninstalling plugin
|
||||||
|
* added some warnings when plugin json file is incomplete
|
||||||
|
* fixed showing in characters ban expires when is unlimited
|
||||||
|
* fixed displaying monster loot when item.name in loot is used instead of item.id
|
||||||
|
* load also runes into spells table
|
||||||
|
* display plugin uninstall option only if its possible
|
||||||
|
* after changing template you will be redirected to latest viewed page
|
||||||
|
* display gallery add image form only on main gallery page
|
||||||
|
* (internal) moved most of guilds html-in-php code to twig
|
||||||
|
* (internal) moved spells page to twig template
|
||||||
|
* (internal) removed useless spells.spell column that was duplicate of spells.words
|
||||||
|
* (internal) save monster loot in database in json format instead loading it every time from xml file
|
||||||
|
* (internal) store monster voices and immunities in json format
|
||||||
|
* (internal) moved buttons to separate template
|
||||||
|
* (internal) moved online search form to twig
|
||||||
|
* (internal) added new function getItemNameById($id)
|
||||||
|
* (internal) Moved plugin install logic to a new class: Plugins
|
||||||
|
* (internal) changed spells.vocations database field to store json data instead of comma separated
|
||||||
|
* (internal) removed $hook_types array, using defined() and constant() functions now
|
||||||
|
* (internal) removed useless monsters.gfx_name field from database
|
||||||
|
* (internal) renamed database field monsters.hide_creature to hidden
|
||||||
|
* (internal) renamed existing Items class to Items_Images
|
||||||
|
* (internal) optimized Spells class
|
||||||
|
* (internal) new function: OTS_Guild::hasMember(OTS_Player $player)
|
||||||
|
* (internal) new function: Forum::hasAccess($board_id)
|
||||||
|
|
||||||
|
## [0.6.1 - 17.10.2017]
|
||||||
|
* fixed signatures loading
|
||||||
|
* new configurable: session_prefix, to allow more websites on one machine (must be unique for every website on your dedicated server!)
|
||||||
|
* better error handling for monsters and spells loader (save errors to system/logs/error.log)
|
||||||
|
* check if file exist before loading (monsters and spells)
|
||||||
|
* (internal) Account::getAccess() = Account::getGroupId()
|
||||||
|
* (internal) moved account actions (pages) to account/ directory
|
||||||
|
* (internal) moved forum actions (pages) to forum/ directory
|
||||||
|
* (internal) moved forum.edit_post to twig templates
|
||||||
|
|
||||||
|
## [0.6.0 - 16.10.2017]
|
||||||
|
* added faq management - add/edit/move/hide/delete from website
|
||||||
|
* new account.login view for tibiacom template
|
||||||
|
* monsters and spells are now being loaded at the installation of the AAC
|
||||||
|
* fix for php versions under 5.5 where empty() function supported only variables
|
||||||
|
* added missing change email and change info buttons to account.management default template
|
||||||
|
* added new indicator icons for create account, create character and change character name
|
||||||
|
* fixed config loader when some inline comments are present
|
||||||
|
* fixed editing page in admin panel that contains some html code
|
||||||
|
* fixed forum new post on mac os and some specific mysql versions
|
||||||
|
* attempt to fix incorrect views counter behavior (its resetting to 0 in some cases)
|
||||||
|
* enabled cache http headers for signatures
|
||||||
|
* check if monster file exist before loading it
|
||||||
|
* fixed if plugin zip file name contains dot (.)
|
||||||
|
* renamed screenshots to gallery and movies to videos
|
||||||
|
* moved install pages to twig
|
||||||
|
* fixed Account::getGuildAccess function
|
||||||
|
* removed never used library from sources - dwoo
|
||||||
|
* moved check_* functions to class Validator
|
||||||
|
* from now all validators ajax requests will fire onblur instead of onkeyup
|
||||||
|
* ajax requests returns now json instead of xml
|
||||||
|
* added 404 response when file is not found
|
||||||
|
|
||||||
|
## [0.5.1 - 11.10.2017]
|
||||||
|
* fixed forum add/edit board
|
||||||
|
* new configurable: highscores_length, how much highscores to display
|
||||||
|
* fixed highscores links (ALL, previous and next page)
|
||||||
|
* update templates cache when installing/uninstalling plugin
|
||||||
|
* moved character deaths and frags table generation to twig
|
||||||
|
* fixed some bug when you uninstall plugin and then try to install again on the same page
|
||||||
|
* check if plugin exist before uninstalling
|
||||||
|
* fixed some warning in OTS_Base_DB
|
||||||
|
|
||||||
|
## [0.5.0 - 10.10.2017]
|
||||||
|
* moved .htaccess rules to plain php (index.php)
|
||||||
|
* updated tinymce to the latest (4.7.0) version, you can now embed code, for example youtube videos
|
||||||
|
* added option to uninstall plugin
|
||||||
|
* added option to require specified myaac, php or database version for plugins, without that plugin won't be installed
|
||||||
|
* change accountmanagement links to use friendly_urls
|
||||||
|
* fixed creating new forum thread
|
||||||
|
* sample characters are now assigned to admin account and have group_id 4 to not be shown on highscores
|
||||||
|
* added links loaded from database to admin panel - for future plugins
|
||||||
|
* print some info to error.log when can't find config.lua
|
||||||
|
* some fixes in account changecomment action
|
||||||
|
* show info when account name/number or password is empty on login
|
||||||
|
* fixed showing account login errors
|
||||||
|
* added few characters hooks
|
||||||
|
* fixed some kathrine template js bug when shop is disabled
|
||||||
|
* you can now use slash '/' in custom pages loaded from database
|
||||||
|
* added new twig function getLink that convert link taking into account config.friendly_urls
|
||||||
|
* internalLayoutLink -> getLink
|
||||||
|
|
||||||
|
## [0.4.3 - 05.10.2017]
|
||||||
|
* better config loader taken from latest gesior, you can now include files in your config by doing dofile('config.local.lua')
|
||||||
|
* fixed country detection in create account
|
||||||
|
* fixed showing of character deaths and frags
|
||||||
|
* fixed https://otland.net/threads/myaac-v0-0-1.251454/page-13#post-2466303
|
||||||
|
* fixed https://otland.net/threads/myaac-v0-0-1.251454/page-13#post-2466313
|
||||||
|
* fixed rook sample, which will now have level 1, 150 health, 0 mana, and 400 cap.
|
||||||
|
* fixed samples being deleted by tfs 1.0+ cause of 'deletion' field set to 1
|
||||||
|
* pages loaded from database have higher priority than normal .php pages, so they will be loaded first if they exist
|
||||||
|
* moved many pages to twig templates
|
||||||
|
* change download client links from clients.halfaway.net to tibia-clients.com
|
||||||
|
* added bugtracker to kathrine template
|
||||||
|
* added CREDITS file
|
||||||
|
|
||||||
|
## [0.4.2 - 14.09.2017]
|
||||||
|
* updated version number
|
||||||
|
|
||||||
|
## [0.4.1 - 13.09.2017]
|
||||||
|
* fixed log in to admin panel
|
||||||
|
* fixed File is not .zip plugin upload error
|
||||||
|
|
||||||
|
## [0.4.0 - 13.09.2017
|
||||||
|
* added option to add/edit/delete/hide/move forum boards
|
||||||
|
* moved some of HTML-in-PHP code to Twig templates
|
||||||
|
* added bug_report configurable which can enable/disable bug tracker
|
||||||
|
* log errors instead of showing them to users with system directories
|
||||||
|
* fix when $_SERVER['HTTP_ACCEPT_ENCODING'] is not set
|
||||||
|
* when it fails to load config.lua it will output error also to error.log
|
||||||
|
* automatically detect json file in .zip instead of basing on filename (admin panel - plugins)
|
||||||
|
* hopefully fixed the error with "The file you are trying to upload is not a .zip file. Please try again."
|
||||||
|
* fixed wrong name of table in bugtracker
|
||||||
|
* fixed some bugs in bugtracker
|
||||||
|
* added report bug link in templates
|
||||||
|
* fixed some rare error when user is logged in for longer than 15 minutes and tries to login again
|
||||||
|
* fixed some grammar errors
|
||||||
|
* some small improvements
|
||||||
|
* fixed some separators in kathrine template
|
||||||
|
|
||||||
|
## [0.3.0 - 28.08.2017]
|
||||||
|
* added administration panel for screenshots management with auto thumbnail generator and image auto-resizing
|
||||||
|
* added Twig template engine and moved some html-in-php code to it
|
||||||
|
* automatically detect player country based on user location (IP) on create account
|
||||||
|
* player sex (gender) is now configurable at $config['genders']
|
||||||
|
* fixed recovering account and changing password when salt is enabled
|
||||||
|
* fixed installing samples when for example Rook Sample already exist and other samples not
|
||||||
|
* fixed some mysql error when character you trying to create already exist
|
||||||
|
* fixed some warning when you select nonexistent country
|
||||||
|
* password change minimal/maximal length notice is now more precise
|
||||||
|
* added 'enabled' field in myaac_hooks table, which can enable or disable specified hook
|
||||||
|
* removed DEFAULT '' for TEXT field. It didn't worked under some systems like MAC OS X.
|
||||||
|
* minimum PHP version to install the MyAAC is now 5.2.0 cause of pathinfo (extension) function
|
||||||
|
* removed unused admin stylish template
|
||||||
|
* removed some unused cities field from myaac_spells table
|
||||||
|
* moved news adding at installation from schema.sql to finish.php
|
||||||
|
* some optimizations
|
||||||
|
|
||||||
|
## [0.2.4 - 09.06.2017]
|
||||||
|
* fixed invite to guild
|
||||||
|
* added id field on monsters, so you can delete them in phpmyadmin
|
||||||
|
* fixed adding some creatures with ' and "
|
||||||
|
* fixed when there are spaces at beginning of the file (creatures)
|
||||||
|
* fixed when file is unable to parse (creatures)
|
||||||
|
* fixed typo loss_items => loss_containers
|
||||||
|
* more elegant way of showing message on reload creatures and spells
|
||||||
|
|
||||||
|
## [0.2.3 - 31.05.2017]
|
||||||
|
* fixed guild management on OTHire 0.0.3
|
||||||
|
* set default skills to 10 when creating new character
|
||||||
|
* fixed displaying of "Create forum thread" in newses
|
||||||
|
* fixed deleting guild on servers that use players.rank_id field
|
||||||
|
* fixed phpmailer class loading (https://otland.net/threads/myaac-v0-0-1.251454/page-8#post-2445222)
|
||||||
|
* fixed displaying vocation amount on online page
|
||||||
|
* better support for custom vocations, you just need to set in config vocations_amount to yours.
|
||||||
|
* fixed huge space in player name (https://otland.net/threads/myaac-v0-0-1.251454/page-7#post-2444328)
|
||||||
|
* fixed Undefined variable (https://otland.net/threads/myaac-v0-0-1.251454/page-7#post-2444034)
|
||||||
|
* fixed Undefined offset (https://otland.net/threads/myaac-v0-0-1.251454/page-7#post-2444035)
|
||||||
|
|
||||||
|
## [0.2.2 - 22.05.2017]
|
||||||
|
* added missing cache/signature directory
|
||||||
|
* fixed https://otland.net/threads/myaac-v0-0-1.251454/page-7#post-2443868
|
||||||
|
|
||||||
|
## [0.2.1 - 21.05.2017]
|
||||||
|
* added Swedish translation by Sizaro
|
||||||
|
* fixed some bugs with installlation & characters & houses
|
||||||
|
|
||||||
|
## [0.2.0 - 21.05.2017]
|
||||||
|
* added option to change character sex for premium points
|
||||||
|
* moved site_closed to database, now you can close your site through admin panel
|
||||||
|
* added option to admin panel: clear cache
|
||||||
|
* added experiencetable_rows configurable
|
||||||
|
* optimized OTS_Account->getGroupId(), now its using like 20 queries less
|
||||||
|
* optimized OTS_Player->load($id) function, should be much faster now
|
||||||
|
* fixed displaying on highscores special outfits
|
||||||
|
* fixed skull images displaying
|
||||||
|
* fixed displaying unlimited premium account
|
||||||
|
* fixed bug where players.lookaddons doesn't exist (OTHire etc.) (https://otland.net/threads/myaac-v0-0-1.251454/page-6#post-2442407)
|
||||||
|
* fixed signature tibian for OTHire and other servers that doesnt use accounts.premdays field
|
||||||
|
* fixed when player name in signature containst space
|
||||||
|
* don't show "Create forum thread" when editing
|
||||||
|
* fixed red color table after create account
|
||||||
|
* updated download links, as clients.halfaway.net isn't working anymore
|
||||||
|
* fixed some bugs while installing when field `email_next` or `hidden` already exist
|
||||||
|
* fixed movies unexpected comment
|
||||||
|
* added template_place_holder('center_top') to kathrine template
|
||||||
|
|
||||||
|
## [0.1.5 - 13.05.2017]
|
||||||
|
* fixed bug with "Integrity constraint violation: 1048 Column 'ip' cannot be null"
|
||||||
|
|
||||||
|
## [0.1.4 - 13.05.2017]
|
||||||
|
* added outfit shower, in characters, online, and highscores
|
||||||
|
* updated database to version 2
|
||||||
|
* fixed item images (now using item-images.ots.me host by default)
|
||||||
|
* fixed news ticket and posting long newses (https://otland.net/threads/myaac-v0-0-1.251454/page-5#post-2442026)
|
||||||
|
* news body limit increased to 65535 (mysql text field)
|
||||||
|
* removed some unused code from my old server
|
||||||
|
* added spells & monsters to kathrine template
|
||||||
|
|
||||||
|
## [0.1.3 - 11.05.2017]
|
||||||
|
* this is just release to update version number
|
||||||
|
|
||||||
|
## [0.1.2 - 11.05.2017]
|
||||||
|
* forgot to update CHANGELOG and MYAAC_VERSION
|
||||||
|
|
||||||
|
## [0.1.1 - 11.05.2017]
|
||||||
|
* fixed updating myaac_config with database_version to 1
|
||||||
|
* fixed database updater
|
||||||
|
|
||||||
|
## [0.1.0 - 11.05.2017]
|
||||||
|
* added new feature: change character name for premium points (disabled by default, you can enable it in config under account_change_character_name in config.php)
|
||||||
|
* added automatic database updater (data migrations)
|
||||||
|
* renamed events to hooks
|
||||||
|
* moved hooks to database
|
||||||
|
* now you can use hooks in plugins
|
||||||
|
* set account.type field to 5 on install, if TFS 1.0+
|
||||||
|
* added example plugin
|
||||||
|
* new, latest google analytics code
|
||||||
|
* fixed bug with loading account.name that has numbers in it
|
||||||
|
* fixed many bugs in player editor in admin panel
|
||||||
|
* added error handling to plugin manager and some more verification in
|
||||||
|
* file has been correctly unpacked/uploaded
|
||||||
|
* fixed Statistics page in admin panel when using account.number
|
||||||
|
* fixed bug when creating/recovering account on servers with
|
||||||
|
* account.salt field (TFS 0.3 for example)
|
||||||
|
* fixed forum showing thread with html tags (added from news manager)
|
||||||
|
* new, latest code for youtube videos in movies page
|
||||||
|
* fixed showing vocation images when using $config['online_vocations_images']
|
||||||
|
* many fixes in polls (also importing proper schema)
|
||||||
|
* fixed hovering on buttons in kathrine template (on accountmanagement page)
|
||||||
|
* fixed signatures (many fixes)
|
||||||
|
* added missing gesior signature system
|
||||||
|
|
||||||
|
## [0.0.6 - 06.05.2017]
|
||||||
|
* fixed bug while installing (https://otland.net/threads/myaac-v0-0-1.251454/page-3#post-2440543)
|
||||||
|
* fixed bug when creating character (not showing errors) (one more time)
|
||||||
|
* fixed support for TFS 0.2 series
|
||||||
|
* added FAQ link
|
||||||
|
|
||||||
|
## [0.0.5 - 05.05.2017]
|
||||||
|
* fixed bug when creating character (not showing errors)
|
||||||
|
* Fixed characters loading with names that has been created with other AAC
|
||||||
|
* fixed links to shop in default template
|
||||||
|
* fixed some weird PHP 7.1 warnings/notices
|
||||||
|
* Fixed config loading with some weird comments
|
||||||
|
* fixed bug with status info utf8 encoding (https://otland.net/threads/myaac-v0-0-1.251454/page-2#post-2440259)
|
||||||
|
* fixed when ip in log_action is NULL (https://otland.net/threads/myaac-v0-0-1.251454/page-2#post-2440357)
|
||||||
|
* fixed bug when guild doesn't exist on characters page (https://otland.net/threads/myaac-v0-0-1.251454/page-2#post-2440320)
|
||||||
|
* disabled friendly_urls by default
|
||||||
|
* fixes when $config['database_*'] is set
|
||||||
|
* added CHANGELOG
|
||||||
|
|
||||||
|
## [0.0.3 - 03.05.2017]
|
||||||
|
* Full support for OTHire 0.0.3
|
||||||
|
* added support for otservers that doesn't use account.name field, instead just account number will be used
|
||||||
|
* fixed encryption detection on TFS 0.3
|
||||||
|
* fixed bug when server_config table doesn't exist
|
||||||
|
* (install) moved admin account creation to new step
|
||||||
|
* fixed news comment link
|
||||||
|
* by default, the installer creates now the Admin player, for admin account
|
||||||
|
* fixed installation errors
|
||||||
|
* fixed config.lua loading with some weird comments
|
||||||
|
|
||||||
|
## [0.0.2 - 02.05.2017]
|
||||||
|
* updated forum links to use friendly_urls
|
||||||
|
* some more info will be shown when cannot connect to database
|
||||||
|
* show more error infos when creating character
|
||||||
|
* fixed forum link on newses
|
||||||
|
* fixed spells loading when there's vocation name instead of id
|
||||||
|
* fixed bug when you have changed template but it doesn't exist anymore
|
||||||
|
* fixed vocations with promotion loading
|
||||||
|
* fixed support for gesior pages and templates
|
||||||
|
* added function OTS_Acount:getGroupId()
|
||||||
|
|
||||||
|
## [0.0.1 - 01.05.2017]
|
||||||
|
This is first official release of MyAAC.
|
||||||
|
Features are listed here
|
||||||
|
|
||||||
|
For more information, see the release announcement on OTLand: https://otland.net/threads/myaac-v0-0-1.251454/
|
14
CONTRIBUTORS.txt
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# automatically exported using this script:
|
||||||
|
# git log --all --format='%cN <%cE>' | sort -u > contributors
|
||||||
|
# in no particular order
|
||||||
|
# cleaned for readability
|
||||||
|
|
||||||
|
Evil Puncker <EPuncker@users.noreply.github.com>
|
||||||
|
Fernando Matos <fernando@pixele.com.br>
|
||||||
|
Lee <42119604+Leesneaks@users.noreply.github.com>
|
||||||
|
caio <caio.zucoli@gmail.com>
|
||||||
|
slawkens <slawkens@gmail.com>
|
||||||
|
tobi132 <52947952+tobi132@users.noreply.github.com>
|
||||||
|
vankk <nwtr.otland@hotmail.com>
|
||||||
|
whiteblXK <krzys16001@gmail.com>
|
||||||
|
xitobuh <jonas.hockert92@gmail.com>
|
3
CREDITS
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
* Gesior.pl (2007 - 2008)
|
||||||
|
* Slawkens (2009 - 2023)
|
||||||
|
* Contributors listed in CONTRIBUTORS.txt
|
80
README.md
@@ -1,18 +1,31 @@
|
|||||||
# myaac
|
# [MyAAC](https://my-aac.org)
|
||||||
|
|
||||||
MyAAC is a free and open-source Automatic Account Creator (AAC) written in PHP. It is a fork of the [Gesior](https://github.com/gesior/Gesior2012) project. It supports only MySQL databases.
|
MyAAC is a free and open-source Automatic Account Creator (AAC) written in PHP. It is a fork of the [Gesior](https://github.com/gesior/Gesior2012) project. It supports only MySQL databases.
|
||||||
|
|
||||||
Official website: http://my-aac.org
|
Official website: https://my-aac.org
|
||||||
|
|
||||||
### REQUIREMENTS
|
[](https://github.com/slawkens/myaac/actions)
|
||||||
|
[](https://opensource.org/licenses/gpl-license)
|
||||||
|
[](https://github.com/slawkens/myaac/releases)
|
||||||
|
[](https://discord.gg/2J39Wus)
|
||||||
|
[](https://github.com/slawkens/myaac/issues?q=is%3Aissue+is%3Aclosed)
|
||||||
|
|
||||||
|
| Version | Status | Branch | Requirements |
|
||||||
|
|:--------|:-----------------------|:--------|:---------------|
|
||||||
|
| **1.x** | **Active development** | develop | **PHP >= 8.1** |
|
||||||
|
| 0.9.x | Not developed anymore | 0.9 | PHP >= 7.2.5 |
|
||||||
|
| 0.8.x | Active support | master | PHP >= 7.2.5 |
|
||||||
|
| 0.7.x | End Of Life | 0.7 | PHP >= 5.3.3 |
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
|
||||||
- PHP 5.1.0 or later
|
|
||||||
- MySQL database
|
- MySQL database
|
||||||
- PDO PHP Extension
|
- PHP Extensions: pdo, xml, json
|
||||||
- XML PHP Extension
|
- (optional) apache2 mod_rewrite (to use friendly_urls)
|
||||||
- ZIP PHP Extension
|
- (optional) zip PHP Extension (to install plugins)
|
||||||
- (optional) mod_rewrite to use friendly_urls
|
- (optional) gd PHP Extension (for generating signature images)
|
||||||
|
|
||||||
### INSTALLATION AND CONFIGURATION
|
### Installation
|
||||||
|
|
||||||
Just decompress and untar the source (which you should have done by now,
|
Just decompress and untar the source (which you should have done by now,
|
||||||
if you're reading this), into your webserver's document root.
|
if you're reading this), into your webserver's document root.
|
||||||
@@ -27,19 +40,52 @@ Official website: http://my-aac.org
|
|||||||
chmod 660 config.local.php
|
chmod 660 config.local.php
|
||||||
chmod 660 images/guilds
|
chmod 660 images/guilds
|
||||||
chmod 660 images/houses
|
chmod 660 images/houses
|
||||||
chmod 660 images/screenshots
|
chmod 660 images/gallery
|
||||||
|
chmod -R 760 system/cache
|
||||||
|
|
||||||
Visit http://your_domain/install (http://localhost/install) and follow instructions in the browser.
|
Visit http://your_domain/install (http://localhost/install) and follow instructions in the browser.
|
||||||
|
|
||||||
### KNOWN PROBLEMS
|
### Configuration
|
||||||
|
|
||||||
- none -
|
Check *config.php* to get more informations. (Notice: MyAAC 1.0+ doesn't use config.php anymore, it has been moved to Admin Panel - Settings page).
|
||||||
|
|
||||||
### OTHER NOTES
|
Use *config.local.php* for your local configuration changes.
|
||||||
|
|
||||||
If you have a great idea or want contribute to the project - visit our website at http://www.my-aac.org
|
### Branches
|
||||||
|
|
||||||
### LICENSING
|
This repository follows the Git Flow Workflow.
|
||||||
|
Cheatsheet: [Git-Flow-Cheetsheet](https://danielkummer.github.io/git-flow-cheatsheet)
|
||||||
|
|
||||||
This program and all associated files are released under the GNU Public
|
That means, we use:
|
||||||
License, see LICENSE for details.
|
* master branch, for current stable release
|
||||||
|
* develop branch, for development version (next release)
|
||||||
|
* feature branches, for features etc.
|
||||||
|
|
||||||
|
### Known Problems
|
||||||
|
|
||||||
|
- Some compatibility issues with some exotical distibutions.
|
||||||
|
|
||||||
|
### Contributing
|
||||||
|
|
||||||
|
Contributions are more than welcome.
|
||||||
|
|
||||||
|
Pull requests should be made to the *develop* branch as that is the working branch, master is for release code.
|
||||||
|
|
||||||
|
Bug fixes to current release should be done to master branch.
|
||||||
|
|
||||||
|
Look: [Contributing](https://github.com/otsoft/myaac/wiki/Contributing) in our wiki.
|
||||||
|
|
||||||
|
### Other Notes
|
||||||
|
|
||||||
|
If you have a great idea or want contribute to the project - visit our website at https://www.my-aac.org
|
||||||
|
|
||||||
|
## Project supported by JetBrains
|
||||||
|
|
||||||
|
Many thanks to Jetbrains for kindly providing a license for me to work on this and other open-source projects.
|
||||||
|
|
||||||
|
[](https://www.jetbrains.com/?from=https://github.com/slawkens)
|
||||||
|
|
||||||
|
### License
|
||||||
|
|
||||||
|
This program and all associated files are released under the GNU Public License.
|
||||||
|
See [LICENSE](https://github.com/slawkens/myaac/blob/master/LICENSE) for details.
|
||||||
|
16
SECURITY.md
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# Security Policy
|
||||||
|
|
||||||
|
## Supported Versions
|
||||||
|
|
||||||
|
| Version | Supported |
|
||||||
|
| ------- | ------------------ |
|
||||||
|
| 1.x.y | :white_check_mark: |
|
||||||
|
| 0.9.x | :x: |
|
||||||
|
| 0.8.x | :white_check_mark: |
|
||||||
|
| < 0.7 | :x: |
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
If you found a security vulnerability, please write an email to security@my-aac.org
|
||||||
|
|
||||||
|
All reports will be taken very seriously, and a fix will be posted as soon as possible.
|
1
_config.yml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
theme: jekyll-theme-slate
|
@@ -1 +1,2 @@
|
|||||||
<?php
|
<?php
|
||||||
|
// nothing yet here
|
@@ -1 +1,71 @@
|
|||||||
<?php
|
<?php
|
||||||
|
// few things we'll need
|
||||||
|
require '../common.php';
|
||||||
|
|
||||||
|
define('ADMIN_PANEL', true);
|
||||||
|
define('MYAAC_ADMIN', true);
|
||||||
|
|
||||||
|
if(file_exists(BASE . 'config.local.php')) {
|
||||||
|
require_once BASE . 'config.local.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
if(file_exists(BASE . 'install') && (!isset($config['installed']) || !$config['installed']))
|
||||||
|
{
|
||||||
|
header('Location: ' . BASE_URL . 'install/');
|
||||||
|
throw new RuntimeException('Setup detected that <b>install/</b> directory exists. Please visit <a href="' . BASE_URL . 'install">this</a> url to start MyAAC Installation.<br/>Delete <b>install/</b> directory if you already installed MyAAC.<br/>Remember to REFRESH this page when you\'re done!');
|
||||||
|
}
|
||||||
|
|
||||||
|
$content = '';
|
||||||
|
|
||||||
|
// validate page
|
||||||
|
$page = isset($_GET['p']) ? $_GET['p'] : '';
|
||||||
|
if(empty($page) || preg_match("/[^a-zA-Z0-9_\-]/", $page))
|
||||||
|
$page = 'dashboard';
|
||||||
|
|
||||||
|
$page = strtolower($page);
|
||||||
|
define('PAGE', $page);
|
||||||
|
|
||||||
|
require SYSTEM . 'functions.php';
|
||||||
|
require SYSTEM . 'init.php';
|
||||||
|
|
||||||
|
if(config('env') === 'dev') {
|
||||||
|
ini_set('display_errors', 1);
|
||||||
|
ini_set('display_startup_errors', 1);
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
}
|
||||||
|
|
||||||
|
// event system
|
||||||
|
require_once SYSTEM . 'hooks.php';
|
||||||
|
$hooks = new Hooks();
|
||||||
|
$hooks->load();
|
||||||
|
|
||||||
|
require SYSTEM . 'status.php';
|
||||||
|
require SYSTEM . 'login.php';
|
||||||
|
require SYSTEM . 'migrate.php';
|
||||||
|
require ADMIN . 'includes/functions.php';
|
||||||
|
|
||||||
|
$twig->addGlobal('config', $config);
|
||||||
|
$twig->addGlobal('status', $status);
|
||||||
|
|
||||||
|
// if we're not logged in - show login box
|
||||||
|
if(!$logged || !admin()) {
|
||||||
|
$page = 'login';
|
||||||
|
}
|
||||||
|
|
||||||
|
// include our page
|
||||||
|
$file = ADMIN . 'pages/' . $page . '.php';
|
||||||
|
if(!@file_exists($file)) {
|
||||||
|
$page = '404';
|
||||||
|
$file = SYSTEM . 'pages/404.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
include($file);
|
||||||
|
|
||||||
|
$content .= ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
|
||||||
|
// template
|
||||||
|
$template_path = 'template/';
|
||||||
|
require ADMIN . $template_path . 'template.php';
|
||||||
|
|
||||||
|
490
admin/pages/accounts.php
Normal file
@@ -0,0 +1,490 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Account editor
|
||||||
|
*
|
||||||
|
* @package MyAAC
|
||||||
|
* @author Lee
|
||||||
|
* @copyright 2019 MyAAC
|
||||||
|
* @link https://my-aac.org
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
|
||||||
|
$title = 'Account editor';
|
||||||
|
$base = BASE_URL . 'admin/?p=accounts';
|
||||||
|
|
||||||
|
if ($config['account_country'])
|
||||||
|
require SYSTEM . 'countries.conf.php';
|
||||||
|
|
||||||
|
function echo_success($message)
|
||||||
|
{
|
||||||
|
echo '<p class="success">' . $message . '</p>';
|
||||||
|
}
|
||||||
|
|
||||||
|
function echo_error($message)
|
||||||
|
{
|
||||||
|
global $error;
|
||||||
|
echo '<p class="error">' . $message . '</p>';
|
||||||
|
$error = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function verify_number($number, $name, $max_length)
|
||||||
|
{
|
||||||
|
if (!Validator::number($number))
|
||||||
|
echo_error($name . ' can contain only numbers.');
|
||||||
|
|
||||||
|
$number_length = strlen($number);
|
||||||
|
if ($number_length <= 0 || $number_length > $max_length)
|
||||||
|
echo_error($name . ' cannot be longer than ' . $max_length . ' digits.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$hasSecretColumn = $db->hasColumn('accounts', 'secret');
|
||||||
|
$hasCoinsColumn = $db->hasColumn('accounts', 'coins');
|
||||||
|
$hasPointsColumn = $db->hasColumn('accounts', 'premium_points');
|
||||||
|
$hasTypeColumn = $db->hasColumn('accounts', 'type');
|
||||||
|
$hasGroupColumn = $db->hasColumn('accounts', 'group_id');
|
||||||
|
|
||||||
|
if ($config['account_country']) {
|
||||||
|
$countries = array();
|
||||||
|
foreach (array('pl', 'se', 'br', 'us', 'gb') as $c)
|
||||||
|
$countries[$c] = $config['countries'][$c];
|
||||||
|
|
||||||
|
$countries['--'] = '----------';
|
||||||
|
foreach ($config['countries'] as $code => $c)
|
||||||
|
$countries[$code] = $c;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<link rel="stylesheet" type="text/css" href="<?php echo BASE_URL; ?>tools/css/jquery.datetimepicker.css"/ >
|
||||||
|
<script src="<?php echo BASE_URL; ?>tools/js/jquery.datetimepicker.js"></script>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
$id = 0;
|
||||||
|
if (isset($_REQUEST['id']))
|
||||||
|
$id = (int)$_REQUEST['id'];
|
||||||
|
else if (isset($_REQUEST['search_name'])) {
|
||||||
|
if (strlen($_REQUEST['search_name']) < 3 && !Validator::number($_REQUEST['search_name'])) {
|
||||||
|
echo 'Player name is too short.';
|
||||||
|
} else {
|
||||||
|
if (Validator::number($_REQUEST['search_name']))
|
||||||
|
$id = $_REQUEST['search_name'];
|
||||||
|
else {
|
||||||
|
$query = $db->query('SELECT `id` FROM `accounts` WHERE `name` = ' . $db->quote($_REQUEST['search_name']));
|
||||||
|
if ($query->rowCount() == 1) {
|
||||||
|
$query = $query->fetch();
|
||||||
|
$id = $query['id'];
|
||||||
|
} else {
|
||||||
|
$query = $db->query('SELECT `id`, `name` FROM `accounts` WHERE `name` LIKE ' . $db->quote('%' . $_REQUEST['search_name'] . '%'));
|
||||||
|
if ($query->rowCount() > 0 && $query->rowCount() <= 10) {
|
||||||
|
echo 'Do you mean?<ul>';
|
||||||
|
foreach ($query as $row)
|
||||||
|
echo '<li><a href="' . $base . '&id=' . $row['id'] . '">' . $row['name'] . '</a></li>';
|
||||||
|
echo '</ul>';
|
||||||
|
} else if ($query->rowCount() > 10)
|
||||||
|
echo 'Specified name resulted with too many accounts.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$groups = new OTS_Groups_List();
|
||||||
|
if ($id > 0) {
|
||||||
|
$account = new OTS_Account();
|
||||||
|
$account->load($id);
|
||||||
|
|
||||||
|
if (isset($account, $_POST['save']) && $account->isLoaded()) {// we want to save
|
||||||
|
$error = false;
|
||||||
|
|
||||||
|
$_error = '';
|
||||||
|
$account_db = new OTS_Account();
|
||||||
|
if(USE_ACCOUNT_NAME) {
|
||||||
|
$name = $_POST['name'];
|
||||||
|
|
||||||
|
$account_db->find($name);
|
||||||
|
if ($account_db->isLoaded() && $account->getName() != $name)
|
||||||
|
echo_error('This name is already used. Please choose another name!');
|
||||||
|
}
|
||||||
|
|
||||||
|
$account_db->load($id);
|
||||||
|
if (!$account_db->isLoaded())
|
||||||
|
echo_error('Account with this id doesn\'t exist.');
|
||||||
|
|
||||||
|
//type/group
|
||||||
|
if($hasTypeColumn || $hasGroupColumn) {
|
||||||
|
$group = $_POST['group'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$password = ((!empty($_POST["pass"]) ? $_POST['pass'] : null));
|
||||||
|
if (!Validator::password($password)) {
|
||||||
|
$errors['password'] = Validator::getLastError();
|
||||||
|
}
|
||||||
|
|
||||||
|
//secret
|
||||||
|
if($hasSecretColumn) {
|
||||||
|
$secret = $_POST['secret'];
|
||||||
|
}
|
||||||
|
|
||||||
|
//key
|
||||||
|
$key = $_POST['key'];
|
||||||
|
$email = $_POST['email'];
|
||||||
|
if (!Validator::email($email))
|
||||||
|
$errors['email'] = Validator::getLastError();
|
||||||
|
|
||||||
|
//tibia coins
|
||||||
|
if ($hasCoinsColumn) {
|
||||||
|
$t_coins = $_POST['t_coins'];
|
||||||
|
verify_number($t_coins, 'Tibia coins', 12);
|
||||||
|
}
|
||||||
|
// prem days
|
||||||
|
$p_days = (int)$_POST['p_days'];
|
||||||
|
verify_number($p_days, 'Prem days', 11);
|
||||||
|
|
||||||
|
//prem points
|
||||||
|
$p_points = $_POST['p_points'];
|
||||||
|
verify_number($p_points, 'Prem Points', 11);
|
||||||
|
|
||||||
|
//rl name
|
||||||
|
$rl_name = $_POST['rl_name'];
|
||||||
|
|
||||||
|
//location
|
||||||
|
$rl_loca = $_POST['rl_loca'];
|
||||||
|
|
||||||
|
//country
|
||||||
|
$rl_country = $_POST['rl_country'];
|
||||||
|
|
||||||
|
$web_flags = $_POST['web_flags'];
|
||||||
|
verify_number($web_flags, 'Web Flags', 1);
|
||||||
|
|
||||||
|
//created
|
||||||
|
$created = $_POST['created'];
|
||||||
|
verify_number($created, 'Created', 11);
|
||||||
|
|
||||||
|
//web last login
|
||||||
|
$web_lastlogin = $_POST['web_lastlogin'];
|
||||||
|
verify_number($web_lastlogin, 'Web Last logout', 11);
|
||||||
|
|
||||||
|
if (!$error) {
|
||||||
|
if(USE_ACCOUNT_NAME) {
|
||||||
|
$account->setName($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($hasTypeColumn) {
|
||||||
|
$account->setCustomField('type', $group);
|
||||||
|
} elseif ($hasGroupColumn) {
|
||||||
|
$account->setCustomField('group_id', $group);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($hasSecretColumn) {
|
||||||
|
$account->setCustomField('secret', $secret);
|
||||||
|
}
|
||||||
|
$account->setCustomField('key', $key);
|
||||||
|
$account->setEMail($email);
|
||||||
|
if ($hasCoinsColumn) {
|
||||||
|
$account->setCustomField('coins', $t_coins);
|
||||||
|
}
|
||||||
|
|
||||||
|
$lastDay = 0;
|
||||||
|
if($p_days != 0 && $p_days != OTS_Account::GRATIS_PREMIUM_DAYS) {
|
||||||
|
$lastDay = time();
|
||||||
|
} else if ($lastDay != 0) {
|
||||||
|
$lastDay = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$account->setPremDays($p_days);
|
||||||
|
$account->setLastLogin($lastDay);
|
||||||
|
if ($hasPointsColumn) {
|
||||||
|
$account->setCustomField('premium_points', $p_points);
|
||||||
|
}
|
||||||
|
$account->setRLName($rl_name);
|
||||||
|
$account->setLocation($rl_loca);
|
||||||
|
$account->setCountry($rl_country);
|
||||||
|
$account->setCustomField('created', $created);
|
||||||
|
$account->setWebFlags($web_flags);
|
||||||
|
$account->setCustomField('web_lastlogin', $web_lastlogin);
|
||||||
|
|
||||||
|
if (isset($password)) {
|
||||||
|
$config_salt_enabled = $db->hasColumn('accounts', 'salt');
|
||||||
|
if ($config_salt_enabled) {
|
||||||
|
$salt = generateRandomString(10, false, true, true);
|
||||||
|
$password = $salt . $password;
|
||||||
|
$account_logged->setCustomField('salt', $salt);
|
||||||
|
}
|
||||||
|
|
||||||
|
$password = encrypt($password);
|
||||||
|
$account->setPassword($password);
|
||||||
|
|
||||||
|
if ($config_salt_enabled)
|
||||||
|
$account->setCustomField('salt', $salt);
|
||||||
|
}
|
||||||
|
|
||||||
|
$account->save();
|
||||||
|
echo_success('Account saved at: ' . date('G:i'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$search_account = '';
|
||||||
|
if (isset($_REQUEST['search_name']))
|
||||||
|
$search_account = $_REQUEST['search_name'];
|
||||||
|
else if (isset($_REQUEST['search_account']))
|
||||||
|
$search_account = $_REQUEST['search_account'];
|
||||||
|
else if ($id > 0 && isset($account) && $account->isLoaded()) {
|
||||||
|
if(USE_ACCOUNT_NAME) {
|
||||||
|
$search_account = $account->getName();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$search_account = $account->getId();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
<div class="row">
|
||||||
|
<?php if (isset($account) && $account->isLoaded()) { ?>
|
||||||
|
|
||||||
|
<form action="<?php echo $base . ((isset($id) && $id > 0) ? '&id=' . $id : ''); ?>" method="post"
|
||||||
|
class="form-horizontal">
|
||||||
|
<div class="col-md-8">
|
||||||
|
<div class="box box-primary">
|
||||||
|
<div class="box-body">
|
||||||
|
<div class="row">
|
||||||
|
<?php if(USE_ACCOUNT_NAME): ?>
|
||||||
|
<div class="col-xs-4">
|
||||||
|
<label for="name" class="control-label">Account Name:</label>
|
||||||
|
<input type="text" class="form-control" id="name" name="name"
|
||||||
|
autocomplete="off" style="cursor: auto;"
|
||||||
|
value="<?php echo $account->getName(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
<div class="col-xs-5">
|
||||||
|
<label for="c_pass" class="control-label">Password: (check to change)</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<span class="input-group-addon">
|
||||||
|
<input type="checkbox"
|
||||||
|
name="c_pass"
|
||||||
|
id="c_pass"
|
||||||
|
value="false"
|
||||||
|
class="input_control"/>
|
||||||
|
</span>
|
||||||
|
<input type="text" class="form-control" id="pass" name="pass"
|
||||||
|
autocomplete="off" maxlength="20"
|
||||||
|
value=""/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-3">
|
||||||
|
<label for="account_id" class="control-label">Account ID:</label>
|
||||||
|
<input type="text" class="form-control" id="account_id" name="account_id"
|
||||||
|
autocomplete="off" style="cursor: auto;" size="8" maxlength="11" disabled
|
||||||
|
value="<?php echo $account->getId(); ?>"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<?php
|
||||||
|
$acc_group = $account->getAccGroupId();
|
||||||
|
if ($hasTypeColumn) {
|
||||||
|
$groups = new OTS_Groups_List();
|
||||||
|
|
||||||
|
$acc_type = array("Normal", "Tutor", "Senior Tutor", "Gamemaster", "God");
|
||||||
|
if ($groups->getHighestId() == 6) {
|
||||||
|
$acc_type = array("Normal", "Tutor", "Senior Tutor", "Gamemaster", "Community Manager", "God");
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="group" class="control-label">Account Type:</label>
|
||||||
|
<select name="group" id="group" class="form-control">
|
||||||
|
<?php foreach ($acc_type as $id => $a_type): ?>
|
||||||
|
<option value="<?php echo($id + 1); ?>" <?php echo($acc_group == ($id + 1) ? 'selected' : ''); ?>><?php echo $a_type; ?></option>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
} elseif ($hasGroupColumn) {
|
||||||
|
?>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="group" class="control-label">Account Type:</label>
|
||||||
|
<select name="group" id="group" class="form-control">
|
||||||
|
<?php
|
||||||
|
foreach ($groups->getGroups() as $id => $group): ?>
|
||||||
|
<option value="<?php echo $id; ?>" <?php echo($acc_group == $id ? 'selected' : ''); ?>><?php echo $group->getName(); ?></option>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<?php } ?>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="web_flags" class="control-label">Website Access:</label>
|
||||||
|
<select name="web_flags" id="web_flags" class="form-control">
|
||||||
|
<?php $web_acc = array("None", "Admin", "Super Admin", "(Admin + Super Admin)");
|
||||||
|
foreach ($web_acc as $id => $a_type): ?>
|
||||||
|
<option value="<?php echo($id); ?>" <?php echo($account->getWebFlags() == ($id) ? 'selected' : ''); ?>><?php echo $a_type; ?></option>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<?php if($hasSecretColumn): ?>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="secret" class="control-label">Secret:</label>
|
||||||
|
<input type="text" class="form-control" id="secret" name="secret"
|
||||||
|
autocomplete="off" style="cursor: auto;" size="8" maxlength="11"
|
||||||
|
value="<?php echo $account->getCustomField('secret'); ?>"/>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="key" class="control-label">Key:</label>
|
||||||
|
<input type="text" class="form-control" id="key" name="key"
|
||||||
|
autocomplete="off" style="cursor: auto;" size="8" maxlength="11"
|
||||||
|
value="<?php echo $account->getCustomField('key'); ?>"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="email" class="control-label">Email:</label>
|
||||||
|
<input type="text" class="form-control" id="email" name="email"
|
||||||
|
autocomplete="off" maxlength="20"
|
||||||
|
value="<?php echo $account->getEMail(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<?php if ($hasCoinsColumn): ?>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="t_coins" class="control-label">Tibia Coins:</label>
|
||||||
|
<input type="text" class="form-control" id="t_coins" name="t_coins"
|
||||||
|
autocomplete="off" maxlength="8"
|
||||||
|
value="<?php echo $account->getCustomField('coins') ?>"/>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="p_days" class="control-label">Premium Days:</label>
|
||||||
|
<input type="text" class="form-control" id="p_days" name="p_days"
|
||||||
|
autocomplete="off" maxlength="11"
|
||||||
|
value="<?php echo $account->getPremDays(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<?php if ($hasPointsColumn): ?>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="p_points" class="control-label">Premium Points:</label>
|
||||||
|
<input type="text" class="form-control" id="p_points" name="p_points"
|
||||||
|
autocomplete="off" maxlength="8"
|
||||||
|
value="<?php echo $account->getCustomField('premium_points') ?>"/>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-4">
|
||||||
|
<label for="rl_name" class="control-label">RL Name:</label>
|
||||||
|
<input type="text" class="form-control" id="rl_name" name="rl_name"
|
||||||
|
autocomplete="off" maxlength="20"
|
||||||
|
value="<?php echo $account->getRLName(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-4">
|
||||||
|
<label for="rl_loca" class="control-label">Location:</label>
|
||||||
|
<input type="text" class="form-control" id="rl_loca" name="rl_loca"
|
||||||
|
autocomplete="off" maxlength="20"
|
||||||
|
value="<?php echo $account->getLocation(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-4">
|
||||||
|
<label for="rl_country" class="control-label">Country:</label>
|
||||||
|
<select name="rl_country" id="rl_country" class="form-control">
|
||||||
|
<?php foreach ($countries as $id => $a_type): ?>
|
||||||
|
<option value="<?php echo($id); ?>" <?php echo($account->getCountry() == ($id) ? 'selected' : ''); ?>><?php echo $a_type; ?></option>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-4">
|
||||||
|
<label for="created" class="control-label">Created:</label>
|
||||||
|
<input type="text" class="form-control" id="created" name="created"
|
||||||
|
autocomplete="off" maxlength="20"
|
||||||
|
value="<?php echo $account->getCustomField('created'); ?>"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-4">
|
||||||
|
<label for="web_lastlogin" class="control-label">Web Last Login:</label>
|
||||||
|
<input type="text" class="form-control" id="web_lastlogin" name="web_lastlogin"
|
||||||
|
autocomplete="off" maxlength="20"
|
||||||
|
value="<?php echo $account->getCustomField('web_lastlogin'); ?>"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input type="hidden" name="save" value="yes"/>
|
||||||
|
<div class="box-footer">
|
||||||
|
<a href="<?php echo ADMIN_URL; ?>?p=accounts"><span class="btn btn-danger">Cancel</span></a>
|
||||||
|
<div class="pull-right">
|
||||||
|
<input type="submit" class="btn btn-primary" value="Update">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<?php } ?>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<div class="box box-primary">
|
||||||
|
<div class="box-header with-border">
|
||||||
|
<h3 class="box-title">Search Account:</h3>
|
||||||
|
<div class="box-tools pull-right">
|
||||||
|
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box-body">
|
||||||
|
<form action="<?php echo $base; ?>" method="post">
|
||||||
|
<div class="input-group input-group-sm">
|
||||||
|
<input type="text" class="form-control" name="search_name" value="<?php echo escapeHtml($search_account); ?>"
|
||||||
|
maxlength="32" size="32">
|
||||||
|
<span class="input-group-btn">
|
||||||
|
<button type="submit" type="button" class="btn btn-info btn-flat">Search</button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
if (isset($account) && $account->isLoaded()) {
|
||||||
|
$account_players = array();
|
||||||
|
$query = $db->query('SELECT `name`,`level`,`vocation` FROM `players` WHERE `account_id` = ' . $account->getId() . ' ORDER BY `name`')->fetchAll();
|
||||||
|
if (isset($query)) {
|
||||||
|
?>
|
||||||
|
<div class="box">
|
||||||
|
<div class="box-header">
|
||||||
|
<h3 class="box-title">Character List:</h3>
|
||||||
|
</div>
|
||||||
|
<div class="box-body no-padding">
|
||||||
|
<table class="table table-striped">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th style="width: 10px">#</th>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Level</th>
|
||||||
|
<th style="width: 40px">Edit</th>
|
||||||
|
</tr>
|
||||||
|
<?php
|
||||||
|
$i = 1;
|
||||||
|
foreach ($query as $p) {
|
||||||
|
$account_players[] = $p;
|
||||||
|
echo '<tr>
|
||||||
|
<td>' . $i . '.</td>
|
||||||
|
<td>' . $p['name'] . '</td>
|
||||||
|
<td>' . $p['level'] . '</td>
|
||||||
|
<td><a href="?p=players&search_name=' . $p['name'] . '"><span class="btn btn-success btn-sm edit btn-flat"><i class="fa fa-edit"></i></span></a></span></td>
|
||||||
|
</tr>';
|
||||||
|
$i++;
|
||||||
|
} ?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
};
|
||||||
|
};
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$('#lastlogout').datetimepicker({format: 'unixtime'});
|
||||||
|
$('#created').datetimepicker({format: 'unixtime'});
|
||||||
|
$('#web_lastlogin').datetimepicker({format: 'unixtime'});
|
||||||
|
$(document).ready(function () {
|
||||||
|
$('.input_control').change(function () {
|
||||||
|
$('input[name=pass]')[0].disabled = !this.checked;
|
||||||
|
$('input[name=pass]')[0].value = '';
|
||||||
|
}).change();
|
||||||
|
});
|
||||||
|
</script>
|
26
admin/pages/changelog.php
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* CHANGELOG viewer
|
||||||
|
*
|
||||||
|
* @package MyAAC
|
||||||
|
* @author Slawkens <slawkens@gmail.com>
|
||||||
|
* @copyright 2019 MyAAC
|
||||||
|
* @link https://my-aac.org
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
$title = 'MyAAC Changelog';
|
||||||
|
|
||||||
|
if (!file_exists(BASE . 'CHANGELOG.md')) {
|
||||||
|
echo 'File CHANGELOG.md doesn\'t exist.';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
require LIBS . 'Parsedown.php';
|
||||||
|
|
||||||
|
$changelog = file_get_contents(BASE . 'CHANGELOG.md');
|
||||||
|
|
||||||
|
$Parsedown = new Parsedown();
|
||||||
|
|
||||||
|
$changelog = $Parsedown->text($changelog); # prints: <p>Hello <em>Parsedown</em>!</p>
|
||||||
|
|
||||||
|
echo '<div>' . $changelog . '</div>';
|
91
admin/pages/dashboard.php
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Dashboard
|
||||||
|
*
|
||||||
|
* @package MyAAC
|
||||||
|
* @author Slawkens <slawkens@gmail.com>
|
||||||
|
* @copyright 2019 MyAAC
|
||||||
|
* @link https://my-aac.org
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
$title = 'Dashboard';
|
||||||
|
|
||||||
|
if (isset($_GET['clear_cache'])) {
|
||||||
|
if (clearCache()) {
|
||||||
|
success('Cache cleared.');
|
||||||
|
} else {
|
||||||
|
error('Error while clearing cache.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_GET['maintenance'])) {
|
||||||
|
$_status = (int)$_POST['status'];
|
||||||
|
$message = $_POST['message'];
|
||||||
|
if (empty($message)) {
|
||||||
|
error('Message cannot be empty.');
|
||||||
|
} else if (strlen($message) > 255) {
|
||||||
|
error('Message is too long. Maximum length allowed is 255 chars.');
|
||||||
|
} else {
|
||||||
|
$tmp = '';
|
||||||
|
if (fetchDatabaseConfig('site_closed', $tmp))
|
||||||
|
updateDatabaseConfig('site_closed', $_status);
|
||||||
|
else
|
||||||
|
registerDatabaseConfig('site_closed', $_status);
|
||||||
|
|
||||||
|
if (fetchDatabaseConfig('site_closed_message', $tmp))
|
||||||
|
updateDatabaseConfig('site_closed_message', $message);
|
||||||
|
else
|
||||||
|
registerDatabaseConfig('site_closed_message', $message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$is_closed = getDatabaseConfig('site_closed') == '1';
|
||||||
|
|
||||||
|
$closed_message = 'Server is under maintenance, please visit later.';
|
||||||
|
$tmp = '';
|
||||||
|
if (fetchDatabaseConfig('site_closed_message', $tmp))
|
||||||
|
$closed_message = $tmp;
|
||||||
|
|
||||||
|
$query = $db->query('SELECT count(*) as `how_much` FROM `accounts`;');
|
||||||
|
$query = $query->fetch();
|
||||||
|
$total_accounts = $query['how_much'];
|
||||||
|
|
||||||
|
$query = $db->query('SELECT count(*) as `how_much` FROM `players`;');
|
||||||
|
$query = $query->fetch();
|
||||||
|
$total_players = $query['how_much'];
|
||||||
|
|
||||||
|
$query = $db->query('SELECT count(*) as `how_much` FROM `guilds`;');
|
||||||
|
$query = $query->fetch();
|
||||||
|
$total_guilds = $query['how_much'];
|
||||||
|
|
||||||
|
$query = $db->query('SELECT count(*) as `how_much` FROM `houses`;');
|
||||||
|
$query = $query->fetch();
|
||||||
|
$total_houses = $query['how_much'];
|
||||||
|
|
||||||
|
$twig->display('admin.statistics.html.twig', array(
|
||||||
|
'total_accounts' => $total_accounts,
|
||||||
|
'total_players' => $total_players,
|
||||||
|
'total_guilds' => $total_guilds,
|
||||||
|
'total_houses' => $total_houses
|
||||||
|
));
|
||||||
|
|
||||||
|
$twig->display('admin.dashboard.html.twig', array(
|
||||||
|
'is_closed' => $is_closed,
|
||||||
|
'closed_message' => $closed_message,
|
||||||
|
'status' => $status,
|
||||||
|
'account_type' => USE_ACCOUNT_NAME ? 'name' : 'number'
|
||||||
|
));
|
||||||
|
|
||||||
|
echo '<div class="row">';
|
||||||
|
|
||||||
|
$configAdminPanelModules = config('admin_panel_modules');
|
||||||
|
if(isset($configAdminPanelModules))
|
||||||
|
$configAdminPanelModules = explode(',', $configAdminPanelModules);
|
||||||
|
|
||||||
|
$twig_loader->prependPath(__DIR__ . '/modules/templates');
|
||||||
|
foreach($configAdminPanelModules as $box) {
|
||||||
|
$file = __DIR__ . '/modules/' . $box . '.php';
|
||||||
|
if(file_exists($file)) {
|
||||||
|
include($file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
echo '</div>';
|
35
admin/pages/items.php
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Load items.xml
|
||||||
|
*
|
||||||
|
* @package MyAAC
|
||||||
|
* @author Slawkens <slawkens@gmail.com>
|
||||||
|
* @copyright 2019 MyAAC
|
||||||
|
* @link https://my-aac.org
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
$title = 'Load items.xml';
|
||||||
|
|
||||||
|
require_once LIBS . 'items.php';
|
||||||
|
require_once LIBS . 'weapons.php';
|
||||||
|
|
||||||
|
$twig->display('admin.items.html.twig');
|
||||||
|
|
||||||
|
$reload = isset($_REQUEST['reload']) && (int)$_REQUEST['reload'] === 1;
|
||||||
|
if ($reload) {
|
||||||
|
$items_start_time = microtime(true);
|
||||||
|
if (Items::loadFromXML(true)) {
|
||||||
|
success('Successfully loaded items (in ' . round(microtime(true) - $items_start_time, 4) . ' seconds).');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
error(Items::getError());
|
||||||
|
}
|
||||||
|
|
||||||
|
$weapons_start_time = microtime(true);
|
||||||
|
if (Weapons::loadFromXML(true)) {
|
||||||
|
success('Successfully loaded weapons (in ' . round(microtime(true) - $weapons_start_time, 4) . ' seconds).');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
error(Weapons::getError());
|
||||||
|
}
|
||||||
|
}
|
26
admin/pages/login.php
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Login
|
||||||
|
*
|
||||||
|
* @package MyAAC
|
||||||
|
* @author Slawkens <slawkens@gmail.com>
|
||||||
|
* @copyright 2019 MyAAC
|
||||||
|
* @link https://my-aac.org
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
$title = 'Login';
|
||||||
|
$logout = '';
|
||||||
|
if ($action == 'logout') {
|
||||||
|
$logout = "You have been logged out!";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($errors)) {
|
||||||
|
foreach ($errors as $error) {
|
||||||
|
error($error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$twig->display('admin.login.html.twig', array(
|
||||||
|
'logout' => $logout,
|
||||||
|
'account' => USE_ACCOUNT_NAME ? 'Name' : 'Number',
|
||||||
|
));
|
81
admin/pages/logs.php
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Logs
|
||||||
|
*
|
||||||
|
* @package MyAAC
|
||||||
|
* @author Slawkens <slawkens@gmail.com>
|
||||||
|
* @copyright 2019 MyAAC
|
||||||
|
* @link https://my-aac.org
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
$title = 'Logs Viewer';
|
||||||
|
|
||||||
|
$files = array();
|
||||||
|
$aac_path_logs = BASE . 'system/logs/';
|
||||||
|
foreach (scandir($aac_path_logs, SCANDIR_SORT_ASCENDING) as $f) {
|
||||||
|
if ($f[0] === '.' || is_dir($aac_path_logs . $f)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$files[] = array($f, $aac_path_logs);
|
||||||
|
}
|
||||||
|
|
||||||
|
$server_path_logs = $config['server_path'] . 'logs/';
|
||||||
|
if (!file_exists($server_path_logs)) {
|
||||||
|
$server_path_logs = $config['data_path'] . 'logs/';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (file_exists($server_path_logs)) {
|
||||||
|
foreach (scandir($server_path_logs, SCANDIR_SORT_ASCENDING) as $f) {
|
||||||
|
if ($f[0] === '.') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_dir($server_path_logs . $f)) {
|
||||||
|
foreach (scandir($server_path_logs . $f, SCANDIR_SORT_ASCENDING) as $f2) {
|
||||||
|
if ($f2[0] === '.') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$files[] = array($f . '/' . $f2, $server_path_logs);
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$files[] = array($f, $server_path_logs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($files as &$f) {
|
||||||
|
$f['mtime'] = filemtime($f[1] . $f[0]);
|
||||||
|
$f['name'] = $f[0];
|
||||||
|
}
|
||||||
|
unset($f);
|
||||||
|
|
||||||
|
$twig->display('admin.logs.html.twig', array('files' => $files));
|
||||||
|
|
||||||
|
define('EXIST_NONE', 0);
|
||||||
|
define('EXIST_SERVER_LOG', 1);
|
||||||
|
define('EXIST_AAC_LOG', 2);
|
||||||
|
|
||||||
|
$exist = EXIST_NONE;
|
||||||
|
$file = isset($_GET['file']) ? $_GET['file'] : null;
|
||||||
|
if (!empty($file)) {
|
||||||
|
if (!preg_match('/[^A-z0-9\' _\/\-\.]/', $file)) {
|
||||||
|
if (file_exists($aac_path_logs . $file)) {
|
||||||
|
$exist = EXIST_AAC_LOG;
|
||||||
|
} else if (file_exists($server_path_logs . $file)) {
|
||||||
|
$exist = EXIST_SERVER_LOG;
|
||||||
|
} else {
|
||||||
|
echo 'Specified file does not exist.';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($exist !== EXIST_NONE) {
|
||||||
|
$content = nl2br(file_get_contents(($exist === EXIST_SERVER_LOG ? $server_path_logs : $aac_path_logs) . $file));
|
||||||
|
$twig->display('admin.logs.view.html.twig', array('file' => $file, 'content' => $content));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
echo 'Invalid file name specified.';
|
||||||
|
}
|
||||||
|
}
|
69
admin/pages/mailer.php
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Mailer
|
||||||
|
*
|
||||||
|
* @package MyAAC
|
||||||
|
* @author Slawkens <slawkens@gmail.com>
|
||||||
|
* @copyright 2019 MyAAC
|
||||||
|
* @link https://my-aac.org
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
$title = 'Mailer';
|
||||||
|
|
||||||
|
if (!hasFlag(FLAG_CONTENT_MAILER) && !superAdmin()) {
|
||||||
|
echo 'Access denied.';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$config['mail_enabled']) {
|
||||||
|
echo 'Mail support disabled.';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$mail_content = isset($_POST['mail_content']) ? stripslashes($_POST['mail_content']) : NULL;
|
||||||
|
$mail_subject = isset($_POST['mail_subject']) ? stripslashes($_POST['mail_subject']) : NULL;
|
||||||
|
$preview = isset($_REQUEST['preview']);
|
||||||
|
|
||||||
|
$preview_done = false;
|
||||||
|
if ($preview) {
|
||||||
|
if (!empty($mail_content) && !empty($mail_subject)) {
|
||||||
|
$preview_done = _mail($account_logged->getCustomField('email'), $mail_subject, $mail_content);
|
||||||
|
|
||||||
|
if (!$preview_done)
|
||||||
|
error('Error while sending preview mail. More info can be found in system/logs/mailer-error.log');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$twig->display('admin.mailer.html.twig', array(
|
||||||
|
'mail_subject' => $mail_subject,
|
||||||
|
'mail_content' => $mail_content,
|
||||||
|
'preview_done' => $preview_done
|
||||||
|
));
|
||||||
|
|
||||||
|
if (empty($mail_content) || empty($mail_subject) || $preview)
|
||||||
|
return;
|
||||||
|
|
||||||
|
$success = 0;
|
||||||
|
$failed = 0;
|
||||||
|
|
||||||
|
$add = '';
|
||||||
|
if ($config['account_mail_verify']) {
|
||||||
|
note('Note: Sending only to users with verified E-Mail.');
|
||||||
|
$add = ' AND ' . $db->fieldName('email_verified') . ' = 1';
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = $db->query('SELECT ' . $db->fieldName('email') . ' FROM ' . $db->tableName('accounts') . ' WHERE ' . $db->fieldName('email') . ' != ""' . $add);
|
||||||
|
foreach ($query as $email) {
|
||||||
|
if (_mail($email['email'], $mail_subject, $mail_content))
|
||||||
|
$success++;
|
||||||
|
else {
|
||||||
|
$failed++;
|
||||||
|
echo '<br />';
|
||||||
|
error('An error occorred while sending email to <b>' . $email['email'] . '</b>. For Admin: More info can be found in system/logs/mailer-error.log');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
success('Mailing finished.');
|
||||||
|
success("$success emails delivered.");
|
||||||
|
warning("$failed emails failed.");
|
137
admin/pages/menus.php
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Menus
|
||||||
|
*
|
||||||
|
* @package MyAAC
|
||||||
|
* @author Slawkens <slawkens@gmail.com>
|
||||||
|
* @copyright 2019 MyAAC
|
||||||
|
* @link https://my-aac.org
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
$title = 'Menus';
|
||||||
|
|
||||||
|
if (!hasFlag(FLAG_CONTENT_MENUS) && !superAdmin()) {
|
||||||
|
echo 'Access denied.';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_REQUEST['template'])) {
|
||||||
|
$template = $_REQUEST['template'];
|
||||||
|
|
||||||
|
if (isset($_REQUEST['menu'])) {
|
||||||
|
$post_menu = $_REQUEST['menu'];
|
||||||
|
$post_menu_link = $_REQUEST['menu_link'];
|
||||||
|
$post_menu_blank = $_REQUEST['menu_blank'];
|
||||||
|
$post_menu_color = $_REQUEST['menu_color'];
|
||||||
|
if (count($post_menu) != count($post_menu_link)) {
|
||||||
|
echo 'Menu count is not equal menu links. Something went wrong when sending form.';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$db->query('DELETE FROM `' . TABLE_PREFIX . 'menu` WHERE `template` = ' . $db->quote($template));
|
||||||
|
foreach ($post_menu as $category => $menus) {
|
||||||
|
foreach ($menus as $i => $menu) {
|
||||||
|
if (empty($menu)) // don't save empty menu item
|
||||||
|
continue;
|
||||||
|
|
||||||
|
try {
|
||||||
|
$db->insert(TABLE_PREFIX . 'menu', array('template' => $template, 'name' => $menu, 'link' => $post_menu_link[$category][$i], 'blank' => $post_menu_blank[$category][$i] == 'on' ? 1 : 0, 'color' => str_replace('#', '', $post_menu_color[$category][$i]), 'category' => $category, 'ordering' => $i));
|
||||||
|
} catch (PDOException $error) {
|
||||||
|
warning('Error while adding menu item (' . $menu . '): ' . $error->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$cache = Cache::getInstance();
|
||||||
|
if ($cache->enabled()) {
|
||||||
|
$cache->delete('template_menus');
|
||||||
|
}
|
||||||
|
|
||||||
|
success('Saved at ' . date('H:i'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$file = TEMPLATES . $template . '/config.php';
|
||||||
|
if (file_exists($file)) {
|
||||||
|
require_once $file;
|
||||||
|
} else {
|
||||||
|
echo 'Cannot find template config.php file.';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset($config['menu_categories'])) {
|
||||||
|
echo "No menu categories set in template config.php.<br/>This template doesn't support dynamic menus.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
echo 'Hint: You can drag menu items.<br/>
|
||||||
|
Hint: Add links to external sites using: <b>http://</b> or <b>https://</b> prefix.<br/>
|
||||||
|
Not all templates support blank and colorful links.<br/><br/>
|
||||||
|
<div class="row">';
|
||||||
|
$menus = array();
|
||||||
|
$menus_db = $db->query('SELECT `name`, `link`, `blank`, `color`, `category`, `ordering` FROM `' . TABLE_PREFIX . 'menu` WHERE `enabled` = 1 AND `template` = ' . $db->quote($template) . ' ORDER BY `ordering` ASC;')->fetchAll();
|
||||||
|
foreach ($menus_db as $menu) {
|
||||||
|
$menus[$menu['category']][] = array('name' => $menu['name'], 'link' => $menu['link'], 'blank' => $menu['blank'], 'color' => $menu['color'], 'ordering' => $menu['ordering']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$last_id = array();
|
||||||
|
echo '<form method="post" id="menus-form" action="?p=menus">';
|
||||||
|
echo '<input type="hidden" name="template" value="' . $template . '"/>';
|
||||||
|
foreach ($config['menu_categories'] as $id => $cat) {
|
||||||
|
echo ' <div class="col-md-12 col-lg-6">
|
||||||
|
<div class="box box-danger">
|
||||||
|
<div class="box-header with-border">
|
||||||
|
<h3 class="box-title">' . $cat['name'] . ' <img class="add-button" id="add-button-' . $id . '" src="' . BASE_URL . 'images/plus.png" width="16" height="16"/></h3>
|
||||||
|
</div>
|
||||||
|
<div class="box-body">';
|
||||||
|
|
||||||
|
|
||||||
|
echo '<ul class="sortable" id="sortable-' . $id . '">';
|
||||||
|
if (isset($menus[$id])) {
|
||||||
|
$i = 0;
|
||||||
|
foreach ($menus[$id] as $menu) {
|
||||||
|
echo '<li class="ui-state-default" id="list-' . $id . '-' . $i . '"><label>Name:</label><input type="text" name="menu[' . $id . '][]" value="' . escapeHtml($menu['name']) . '"/>
|
||||||
|
<label>Link:</label><input type="text" name="menu_link[' . $id . '][]" value="' . $menu['link'] . '"/>
|
||||||
|
<input type="hidden" name="menu_blank[' . $id . '][]" value="0" />
|
||||||
|
<label><input class="blank-checkbox" type="checkbox" ' . ($menu['blank'] == 1 ? 'checked' : '') . '/><span title="Open in New Window">Open in New Window</span></label>
|
||||||
|
|
||||||
|
<input class="color-picker" type="text" name="menu_color[' . $id . '][]" value="#' . $menu['color'] . '" />
|
||||||
|
|
||||||
|
<a class="remove-button" id="remove-button-' . $id . '-' . $i . '"><img src="' . BASE_URL . 'images/del.png"/></a></li>';
|
||||||
|
|
||||||
|
$i++;
|
||||||
|
$last_id[$id] = $i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo '</ul>';
|
||||||
|
echo ' </div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
';
|
||||||
|
}
|
||||||
|
echo ' </div><div class="row"><div class="col-md-6">';
|
||||||
|
echo '<input type="submit" class="btn btn-info" value="Save">';
|
||||||
|
echo '<input type="button" class="btn btn-default pull-right" value="Cancel" onclick="window.location = \'' . ADMIN_URL . '?p=menus&template=' . $template . '\';">';
|
||||||
|
echo '</div></div>';
|
||||||
|
echo '</form>';
|
||||||
|
|
||||||
|
$twig->display('admin.menus.js.html.twig', array(
|
||||||
|
'menus' => $menus,
|
||||||
|
'last_id' => $last_id
|
||||||
|
));
|
||||||
|
?>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
} else {
|
||||||
|
$templates = $db->query('SELECT `template` FROM `' . TABLE_PREFIX . 'menu` GROUP BY `template`;')->fetchAll();
|
||||||
|
foreach ($templates as $key => $value) {
|
||||||
|
$file = TEMPLATES . $value['template'] . '/config.php';
|
||||||
|
if (!file_exists($file)) {
|
||||||
|
unset($templates[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$twig->display('admin.menus.form.html.twig', array(
|
||||||
|
'templates' => $templates
|
||||||
|
));
|
||||||
|
}
|
11
admin/pages/modules/coins.php
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if ($db->hasColumn('accounts', 'coins')) {
|
||||||
|
$coins = $db->query('SELECT `coins`, `' . (USE_ACCOUNT_NAME ? 'name' : 'id') . '` as `name` FROM `accounts` ORDER BY `coins` DESC LIMIT 10;');
|
||||||
|
} else {
|
||||||
|
$coins = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$twig->display('coins.html.twig', array(
|
||||||
|
'coins' => $coins
|
||||||
|
));
|
11
admin/pages/modules/lastlogin.php
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if ($db->hasColumn('players', 'lastlogin')) {
|
||||||
|
$players = $db->query('SELECT name, level, lastlogin FROM players ORDER BY lastlogin DESC LIMIT 10;');
|
||||||
|
} else {
|
||||||
|
$players = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$twig->display('lastlogin.html.twig', array(
|
||||||
|
'players' => $players,
|
||||||
|
));
|
10
admin/pages/modules/points.php
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
if ($db->hasColumn('accounts', 'premium_points')) {
|
||||||
|
$points = $db->query('SELECT `premium_points`, `' . (USE_ACCOUNT_NAME ? 'name' : 'id') . '` as `name` FROM `accounts` ORDER BY `premium_points` DESC LIMIT 10;');
|
||||||
|
} else {
|
||||||
|
$points = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$twig->display('points.html.twig', array(
|
||||||
|
'points' => $points,
|
||||||
|
));
|
29
admin/pages/modules/templates/coins.html.twig
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{% if coins is iterable %}
|
||||||
|
<div class="col-md-3">
|
||||||
|
<div class="box">
|
||||||
|
<div class="box-header">
|
||||||
|
<h3 class="box-title">Top 10 - Most coins</h3>
|
||||||
|
</div>
|
||||||
|
<div class="box-body no-padding">
|
||||||
|
<table class="table table-condensed">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th>#</th>
|
||||||
|
<th>Account {{ account_type }}</th>
|
||||||
|
<th>Tibia coins</th>
|
||||||
|
</tr>
|
||||||
|
{% set i = 0 %}
|
||||||
|
{% for result in coins %}
|
||||||
|
{% set i = i + 1 %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ i }}</td>
|
||||||
|
<td>{{ result.name }}</td>
|
||||||
|
<td>{{ result.coins }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
29
admin/pages/modules/templates/lastlogin.html.twig
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{% if players is iterable %}
|
||||||
|
<div class="col-md-3">
|
||||||
|
<div class="box">
|
||||||
|
<div class="box-header">
|
||||||
|
<h3 class="box-title">Last 10 Logins</h3>
|
||||||
|
</div>
|
||||||
|
<div class="box-body no-padding">
|
||||||
|
<table class="table table-condensed">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th>#</th>
|
||||||
|
<th>Player</th>
|
||||||
|
<th>Login Date</th>
|
||||||
|
</tr>
|
||||||
|
{% set i = 0 %}
|
||||||
|
{% for result in players %}
|
||||||
|
{% set i = i + 1 %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ i }}</td>
|
||||||
|
<td>{{ result.name }}</td>
|
||||||
|
<td>{{ result.lastlogin|date("M d Y, H:i:s") }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
29
admin/pages/modules/templates/points.html.twig
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{% if points is iterable %}
|
||||||
|
<div class="col-md-3">
|
||||||
|
<div class="box">
|
||||||
|
<div class="box-header">
|
||||||
|
<h3 class="box-title">Top 10 - Most premium points</h3>
|
||||||
|
</div>
|
||||||
|
<div class="box-body no-padding">
|
||||||
|
<table class="table table-condensed">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th>#</th>
|
||||||
|
<th>Account {{ account_type }}</th>
|
||||||
|
<th>Premium points</th>
|
||||||
|
</tr>
|
||||||
|
{% set i = 0 %}
|
||||||
|
{% for result in points %}
|
||||||
|
{% set i = i + 1 %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ i }}</td>
|
||||||
|
<td>{{ result.name }}</td>
|
||||||
|
<td>{{ result.premium_points }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
154
admin/pages/news.php
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Pages
|
||||||
|
*
|
||||||
|
* @package MyAAC
|
||||||
|
* @author Slawkens <slawkens@gmail.com>
|
||||||
|
* @copyright 2019 MyAAC
|
||||||
|
* @link https://my-aac.org
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
|
||||||
|
require_once LIBS . 'forum.php';
|
||||||
|
require_once LIBS . 'news.php';
|
||||||
|
|
||||||
|
$title = 'News Panel';
|
||||||
|
|
||||||
|
if (!hasFlag(FLAG_CONTENT_PAGES) && !superAdmin()) {
|
||||||
|
echo 'Access denied.';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
header('X-XSS-Protection:0');
|
||||||
|
|
||||||
|
// some constants, used mainly by database (cannot by modified without schema changes)
|
||||||
|
define('TITLE_LIMIT', 100);
|
||||||
|
define('BODY_LIMIT', 65535); // maximum news body length
|
||||||
|
define('ARTICLE_TEXT_LIMIT', 300);
|
||||||
|
define('ARTICLE_IMAGE_LIMIT', 100);
|
||||||
|
|
||||||
|
$name = $p_title = '';
|
||||||
|
if(!empty($action))
|
||||||
|
{
|
||||||
|
$id = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
|
||||||
|
$p_title = isset($_REQUEST['title']) ? $_REQUEST['title'] : null;
|
||||||
|
$body = isset($_REQUEST['body']) ? stripslashes($_REQUEST['body']) : null;
|
||||||
|
$comments = isset($_REQUEST['comments']) ? $_REQUEST['comments'] : null;
|
||||||
|
$type = isset($_REQUEST['type']) ? (int)$_REQUEST['type'] : null;
|
||||||
|
$category = isset($_REQUEST['category']) ? (int)$_REQUEST['category'] : null;
|
||||||
|
$player_id = isset($_REQUEST['player_id']) ? (int)$_REQUEST['player_id'] : null;
|
||||||
|
$article_text = isset($_REQUEST['article_text']) ? $_REQUEST['article_text'] : null;
|
||||||
|
$article_image = isset($_REQUEST['article_image']) ? $_REQUEST['article_image'] : null;
|
||||||
|
$forum_section = isset($_REQUEST['forum_section']) ? $_REQUEST['forum_section'] : null;
|
||||||
|
$errors = array();
|
||||||
|
|
||||||
|
if($action == 'add') {
|
||||||
|
if(isset($forum_section) && $forum_section != '-1') {
|
||||||
|
$forum_add = Forum::add_thread($p_title, $body, $forum_section, $player_id, $account_logged->getId(), $errors);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(News::add($p_title, $body, $type, $category, $player_id, isset($forum_add) && $forum_add != 0 ? $forum_add : 0, $article_text, $article_image, $errors)) {
|
||||||
|
$p_title = $body = $comments = $article_text = $article_image = '';
|
||||||
|
$type = $category = $player_id = 0;
|
||||||
|
|
||||||
|
success("Added successful.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if($action == 'delete') {
|
||||||
|
News::delete($id, $errors);
|
||||||
|
success("Deleted successful.");
|
||||||
|
}
|
||||||
|
else if($action == 'edit')
|
||||||
|
{
|
||||||
|
if(isset($id) && !isset($p_title)) {
|
||||||
|
$news = News::get($id);
|
||||||
|
$p_title = $news['title'];
|
||||||
|
$body = $news['body'];
|
||||||
|
$comments = $news['comments'];
|
||||||
|
$type = $news['type'];
|
||||||
|
$category = $news['category'];
|
||||||
|
$player_id = $news['player_id'];
|
||||||
|
$article_text = $news['article_text'];
|
||||||
|
$article_image = $news['article_image'];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(News::update($id, $p_title, $body, $type, $category, $player_id, $forum_section, $article_text, $article_image, $errors)) {
|
||||||
|
// update forum thread if exists
|
||||||
|
if(isset($forum_section) && Validator::number($forum_section)) {
|
||||||
|
$db->query("UPDATE `" . TABLE_PREFIX . "forum` SET `author_guid` = ".(int) $player_id.", `post_text` = ".$db->quote($body).", `post_topic` = ".$db->quote($p_title).", `edit_date` = " . time() . " WHERE `id` = " . $db->quote($forum_section));
|
||||||
|
}
|
||||||
|
|
||||||
|
$action = $p_title = $body = $comments = $article_text = $article_image = '';
|
||||||
|
$type = $category = $player_id = 0;
|
||||||
|
|
||||||
|
success("Updated successful.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if($action == 'hide') {
|
||||||
|
News::toggleHidden($id, $errors, $status);
|
||||||
|
success(($status == 1 ? 'Show' : 'Hide') . " successful.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!empty($errors))
|
||||||
|
error(implode(", ", $errors));
|
||||||
|
}
|
||||||
|
|
||||||
|
$categories = array();
|
||||||
|
foreach($db->query('SELECT `id`, `name`, `icon_id` FROM `' . TABLE_PREFIX . 'news_categories` WHERE `hidden` != 1') as $cat)
|
||||||
|
{
|
||||||
|
$categories[$cat['id']] = array(
|
||||||
|
'name' => $cat['name'],
|
||||||
|
'icon_id' => $cat['icon_id']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($action == 'edit' || $action == 'new') {
|
||||||
|
if($action == 'edit') {
|
||||||
|
$player = new OTS_Player();
|
||||||
|
$player->load($player_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
$account_players = $account_logged->getPlayersList();
|
||||||
|
$account_players->orderBy('group_id', POT::ORDER_DESC);
|
||||||
|
$twig->display('admin.news.form.html.twig', array(
|
||||||
|
'action' => $action,
|
||||||
|
'news_link' => getLink(PAGE),
|
||||||
|
'news_link_form' => '?p=news&action=' . ($action == 'edit' ? 'edit' : 'add'),
|
||||||
|
'news_id' => isset($id) ? $id : null,
|
||||||
|
'title' => isset($p_title) ? $p_title : '',
|
||||||
|
'body' => isset($body) ? escapeHtml($body) : '',
|
||||||
|
'type' => isset($type) ? $type : null,
|
||||||
|
'player' => isset($player) && $player->isLoaded() ? $player : null,
|
||||||
|
'player_id' => isset($player_id) ? $player_id : null,
|
||||||
|
'account_players' => $account_players,
|
||||||
|
'category' => isset($category) ? $category : 0,
|
||||||
|
'categories' => $categories,
|
||||||
|
'forum_boards' => getForumBoards(),
|
||||||
|
'forum_section' => isset($forum_section) ? $forum_section : null,
|
||||||
|
'comments' => isset($comments) ? $comments : null,
|
||||||
|
'article_text' => isset($article_text) ? $article_text : null,
|
||||||
|
'article_image' => isset($article_image) ? $article_image : null
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = $db->query('SELECT * FROM ' . $db->tableName(TABLE_PREFIX . 'news'));
|
||||||
|
$newses = array();
|
||||||
|
foreach ($query as $_news) {
|
||||||
|
$_player = new OTS_Player();
|
||||||
|
$_player->load($_news['player_id']);
|
||||||
|
|
||||||
|
$newses[$_news['type']][] = array(
|
||||||
|
'id' => $_news['id'],
|
||||||
|
'hidden' => $_news['hidden'],
|
||||||
|
'archive_link' => getLink('news') . '/archive/' . $_news['id'],
|
||||||
|
'title' => $_news['title'],
|
||||||
|
'date' => $_news['date'],
|
||||||
|
'player_name' => isset($_player) && $_player->isLoaded() ? $_player->getName() : '',
|
||||||
|
'player_link' => isset($_player) && $_player->isLoaded() ? getPlayerLink($_player->getName(), false) : '',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$twig->display('admin.news.html.twig', array(
|
||||||
|
'newses' => $newses
|
||||||
|
));
|
52
admin/pages/notepad.php
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Notepad
|
||||||
|
*
|
||||||
|
* @package MyAAC
|
||||||
|
* @author Slawkens <slawkens@gmail.com>
|
||||||
|
* @copyright 2019 MyAAC
|
||||||
|
* @link https://my-aac.org
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
$title = 'Notepad';
|
||||||
|
|
||||||
|
$notepad_content = Notepad::get($account_logged->getId());
|
||||||
|
if (isset($_POST['content'])) {
|
||||||
|
$_content = html_entity_decode(stripslashes($_POST['content']));
|
||||||
|
if (!$notepad_content)
|
||||||
|
Notepad::create($account_logged->getId(), $_content);
|
||||||
|
else
|
||||||
|
Notepad::update($account_logged->getId(), $_content);
|
||||||
|
|
||||||
|
echo '<div class="success" style="text-align: center;">Saved at ' . date('H:i') . '</div>';
|
||||||
|
} else {
|
||||||
|
if ($notepad_content !== false)
|
||||||
|
$_content = $notepad_content;
|
||||||
|
}
|
||||||
|
|
||||||
|
$twig->display('admin.notepad.html.twig', array('content' => isset($_content) ? $_content : null));
|
||||||
|
|
||||||
|
class Notepad
|
||||||
|
{
|
||||||
|
static public function get($account_id)
|
||||||
|
{
|
||||||
|
global $db;
|
||||||
|
$query = $db->select(TABLE_PREFIX . 'notepad', array('account_id' => $account_id));
|
||||||
|
if ($query !== false)
|
||||||
|
return $query['content'];
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function create($account_id, $content = '')
|
||||||
|
{
|
||||||
|
global $db;
|
||||||
|
$db->insert(TABLE_PREFIX . 'notepad', array('account_id' => $account_id, 'content' => $content));
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function update($account_id, $content = '')
|
||||||
|
{
|
||||||
|
global $db;
|
||||||
|
$db->update(TABLE_PREFIX . 'notepad', array('content' => $content), array('account_id' => $account_id));
|
||||||
|
}
|
||||||
|
}
|
198
admin/pages/pages.php
Normal file
@@ -0,0 +1,198 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Pages
|
||||||
|
*
|
||||||
|
* @package MyAAC
|
||||||
|
* @author Slawkens <slawkens@gmail.com>
|
||||||
|
* @copyright 2019 MyAAC
|
||||||
|
* @link https://my-aac.org
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
$title = 'Pages';
|
||||||
|
|
||||||
|
if (!hasFlag(FLAG_CONTENT_PAGES) && !superAdmin()) {
|
||||||
|
echo 'Access denied.';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
header('X-XSS-Protection:0');
|
||||||
|
|
||||||
|
$name = $p_title = '';
|
||||||
|
$groups = new OTS_Groups_List();
|
||||||
|
|
||||||
|
$php = false;
|
||||||
|
$enable_tinymce = true;
|
||||||
|
$access = 0;
|
||||||
|
|
||||||
|
if (!empty($action)) {
|
||||||
|
if ($action == 'delete' || $action == 'edit' || $action == 'hide')
|
||||||
|
$id = $_REQUEST['id'];
|
||||||
|
|
||||||
|
if (isset($_REQUEST['name']))
|
||||||
|
$name = $_REQUEST['name'];
|
||||||
|
|
||||||
|
if (isset($_REQUEST['title']))
|
||||||
|
$p_title = $_REQUEST['title'];
|
||||||
|
|
||||||
|
$php = isset($_REQUEST['php']) && $_REQUEST['php'] == 1;
|
||||||
|
$enable_tinymce = isset($_REQUEST['enable_tinymce']) && $_REQUEST['enable_tinymce'] == 1;
|
||||||
|
if ($php)
|
||||||
|
$body = $_REQUEST['body'];
|
||||||
|
else if (isset($_REQUEST['body'])) {
|
||||||
|
//$body = $_REQUEST['body'];
|
||||||
|
$body = html_entity_decode(stripslashes($_REQUEST['body']));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_REQUEST['access']))
|
||||||
|
$access = $_REQUEST['access'];
|
||||||
|
|
||||||
|
$errors = array();
|
||||||
|
$player_id = 1;
|
||||||
|
|
||||||
|
if ($action == 'add') {
|
||||||
|
if (Pages::add($name, $p_title, $body, $player_id, $php, $enable_tinymce, $access, $errors)) {
|
||||||
|
$name = $p_title = $body = '';
|
||||||
|
$player_id = $access = 0;
|
||||||
|
$php = false;
|
||||||
|
$enable_tinymce = true;
|
||||||
|
}
|
||||||
|
} else if ($action == 'delete') {
|
||||||
|
if (Pages::delete($id, $errors))
|
||||||
|
success('Page with id ' . $id . ' has been deleted');
|
||||||
|
} else if ($action == 'edit') {
|
||||||
|
if (isset($id) && !isset($_REQUEST['name'])) {
|
||||||
|
$_page = Pages::get($id);
|
||||||
|
$name = $_page['name'];
|
||||||
|
$p_title = $_page['title'];
|
||||||
|
$body = $_page['body'];
|
||||||
|
$php = $_page['php'] == '1';
|
||||||
|
$enable_tinymce = $_page['enable_tinymce'] == '1';
|
||||||
|
$access = $_page['access'];
|
||||||
|
} else {
|
||||||
|
Pages::update($id, $name, $p_title, $body, $player_id, $php, $enable_tinymce, $access);
|
||||||
|
$action = $name = $p_title = $body = '';
|
||||||
|
$player_id = 1;
|
||||||
|
$access = 0;
|
||||||
|
$php = false;
|
||||||
|
$enable_tinymce = true;
|
||||||
|
}
|
||||||
|
} else if ($action == 'hide') {
|
||||||
|
Pages::toggleHidden($id, $errors);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($errors))
|
||||||
|
error(implode(", ", $errors));
|
||||||
|
}
|
||||||
|
|
||||||
|
$query =
|
||||||
|
$db->query('SELECT * FROM ' . $db->tableName(TABLE_PREFIX . 'pages'));
|
||||||
|
|
||||||
|
$pages = array();
|
||||||
|
foreach ($query as $_page) {
|
||||||
|
$pages[] = array(
|
||||||
|
'link' => getFullLink($_page['name'], $_page['name'], true),
|
||||||
|
'title' => substr($_page['title'], 0, 20),
|
||||||
|
'php' => $_page['php'] == '1',
|
||||||
|
'id' => $_page['id'],
|
||||||
|
'hidden' => $_page['hidden']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$twig->display('admin.pages.form.html.twig', array(
|
||||||
|
'action' => $action,
|
||||||
|
'id' => $action == 'edit' ? $id : null,
|
||||||
|
'name' => $name,
|
||||||
|
'title' => $p_title,
|
||||||
|
'php' => $php,
|
||||||
|
'enable_tinymce' => $enable_tinymce,
|
||||||
|
'body' => isset($body) ? escapeHtml($body) : '',
|
||||||
|
'groups' => $groups->getGroups(),
|
||||||
|
'access' => $access
|
||||||
|
));
|
||||||
|
|
||||||
|
$twig->display('admin.pages.html.twig', array(
|
||||||
|
'pages' => $pages
|
||||||
|
));
|
||||||
|
|
||||||
|
class Pages
|
||||||
|
{
|
||||||
|
static public function get($id)
|
||||||
|
{
|
||||||
|
global $db;
|
||||||
|
$query = $db->select(TABLE_PREFIX . 'pages', array('id' => $id));
|
||||||
|
if ($query !== false)
|
||||||
|
return $query;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function add($name, $title, $body, $player_id, $php, $enable_tinymce, $access, &$errors)
|
||||||
|
{
|
||||||
|
global $db;
|
||||||
|
if (isset($name[0]) && isset($title[0]) && isset($body[0]) && $player_id != 0) {
|
||||||
|
$query = $db->select(TABLE_PREFIX . 'pages', array('name' => $name));
|
||||||
|
if ($query === false)
|
||||||
|
$db->insert(TABLE_PREFIX . 'pages',
|
||||||
|
array(
|
||||||
|
'name' => $name,
|
||||||
|
'title' => $title,
|
||||||
|
'body' => $body,
|
||||||
|
'player_id' => $player_id,
|
||||||
|
'php' => $php ? '1' : '0',
|
||||||
|
'enable_tinymce' => $enable_tinymce ? '1' : '0',
|
||||||
|
'access' => $access
|
||||||
|
)
|
||||||
|
);
|
||||||
|
else
|
||||||
|
$errors[] = 'Page with this link already exists.';
|
||||||
|
} else
|
||||||
|
$errors[] = 'Please fill all inputs.';
|
||||||
|
|
||||||
|
return !count($errors);
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function update($id, $name, $title, $body, $player_id, $php, $enable_tinymce, $access)
|
||||||
|
{
|
||||||
|
global $db;
|
||||||
|
$db->update(TABLE_PREFIX . 'pages',
|
||||||
|
array(
|
||||||
|
'name' => $name,
|
||||||
|
'title' => $title,
|
||||||
|
'body' => $body,
|
||||||
|
'player_id' => $player_id,
|
||||||
|
'php' => $php ? '1' : '0',
|
||||||
|
'enable_tinymce' => $enable_tinymce ? '1' : '0',
|
||||||
|
'access' => $access
|
||||||
|
),
|
||||||
|
array('id' => $id));
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function delete($id, &$errors)
|
||||||
|
{
|
||||||
|
global $db;
|
||||||
|
if (isset($id)) {
|
||||||
|
if ($db->select(TABLE_PREFIX . 'pages', array('id' => $id)) !== false)
|
||||||
|
$db->delete(TABLE_PREFIX . 'pages', array('id' => $id));
|
||||||
|
else
|
||||||
|
$errors[] = 'Page with id ' . $id . ' does not exists.';
|
||||||
|
} else
|
||||||
|
$errors[] = 'id not set';
|
||||||
|
|
||||||
|
return !count($errors);
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function toggleHidden($id, &$errors)
|
||||||
|
{
|
||||||
|
global $db;
|
||||||
|
if (isset($id)) {
|
||||||
|
$query = $db->select(TABLE_PREFIX . 'pages', array('id' => $id));
|
||||||
|
if ($query !== false)
|
||||||
|
$db->update(TABLE_PREFIX . 'pages', array('hidden' => ($query['hidden'] == 1 ? 0 : 1)), array('id' => $id));
|
||||||
|
else
|
||||||
|
$errors[] = 'Page with id ' . $id . ' does not exists.';
|
||||||
|
} else
|
||||||
|
$errors[] = 'id not set';
|
||||||
|
|
||||||
|
return !count($errors);
|
||||||
|
}
|
||||||
|
}
|
19
admin/pages/phpinfo.php
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PHP Info
|
||||||
|
*
|
||||||
|
* @package MyAAC
|
||||||
|
* @author Slawkens <slawkens@gmail.com>
|
||||||
|
* @copyright 2019 MyAAC
|
||||||
|
* @link https://my-aac.org
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
$title = 'PHP Info';
|
||||||
|
|
||||||
|
if (!function_exists('phpinfo')) { ?>
|
||||||
|
<b>phpinfo()</b> function is disabled in your webserver config.<br/>
|
||||||
|
You can enable it by editing <b>php.ini</b> file.
|
||||||
|
<?php return;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<iframe src="<?php echo BASE_URL; ?>admin/tools/phpinfo.php" width="1024" height="550"/>
|
904
admin/pages/players.php
Normal file
@@ -0,0 +1,904 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Players editor
|
||||||
|
*
|
||||||
|
* @package MyAAC
|
||||||
|
* @author Slawkens <slawkens@gmail.com>
|
||||||
|
* @copyright 2019 MyAAC
|
||||||
|
* @link https://my-aac.org
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
|
||||||
|
$title = 'Player editor';
|
||||||
|
$base = BASE_URL . 'admin/?p=players';
|
||||||
|
|
||||||
|
function echo_success($message)
|
||||||
|
{
|
||||||
|
echo '<p class="success">' . $message . '</p>';
|
||||||
|
}
|
||||||
|
|
||||||
|
function echo_error($message)
|
||||||
|
{
|
||||||
|
global $error;
|
||||||
|
echo '<p class="error">' . $message . '</p>';
|
||||||
|
$error = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function verify_number($number, $name, $max_length)
|
||||||
|
{
|
||||||
|
if (!Validator::number($number))
|
||||||
|
echo_error($name . ' can contain only numbers.');
|
||||||
|
|
||||||
|
$number_length = strlen($number);
|
||||||
|
if ($number_length <= 0 || $number_length > $max_length)
|
||||||
|
echo_error($name . ' cannot be longer than ' . $max_length . ' digits.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$skills = array(
|
||||||
|
POT::SKILL_FIST => array('Fist fighting', 'fist'),
|
||||||
|
POT::SKILL_CLUB => array('Club fighting', 'club'),
|
||||||
|
POT::SKILL_SWORD => array('Sword fighting', 'sword'),
|
||||||
|
POT::SKILL_AXE => array('Axe fighting', 'axe'),
|
||||||
|
POT::SKILL_DIST => array('Distance fighting', 'dist'),
|
||||||
|
POT::SKILL_SHIELD => array('Shielding', 'shield'),
|
||||||
|
POT::SKILL_FISH => array('Fishing', 'fish')
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
$hasBlessingsColumn = $db->hasColumn('players', 'blessings');
|
||||||
|
$hasBlessingColumn = $db->hasColumn('players', 'blessings1');
|
||||||
|
$hasLookAddons = $db->hasColumn('players', 'lookaddons');
|
||||||
|
?>
|
||||||
|
|
||||||
|
<link rel="stylesheet" type="text/css" href="<?php echo BASE_URL; ?>tools/css/jquery.datetimepicker.css"/ >
|
||||||
|
<script src="<?php echo BASE_URL; ?>tools/js/jquery.datetimepicker.js"></script>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
$id = 0;
|
||||||
|
if (isset($_REQUEST['id']))
|
||||||
|
$id = (int)$_REQUEST['id'];
|
||||||
|
else if (isset($_REQUEST['search_name'])) {
|
||||||
|
if (strlen($_REQUEST['search_name']) < 3 && !Validator::number($_REQUEST['search_name'])) {
|
||||||
|
echo 'Player name is too short.';
|
||||||
|
} else {
|
||||||
|
if (Validator::number($_REQUEST['search_name']))
|
||||||
|
$id = $_REQUEST['search_name'];
|
||||||
|
else {
|
||||||
|
$query = $db->query('SELECT `id` FROM `players` WHERE `name` = ' . $db->quote($_REQUEST['search_name']));
|
||||||
|
if ($query->rowCount() == 1) {
|
||||||
|
$query = $query->fetch();
|
||||||
|
$id = $query['id'];
|
||||||
|
} else {
|
||||||
|
$query = $db->query('SELECT `id`, `name` FROM `players` WHERE `name` LIKE ' . $db->quote('%' . $_REQUEST['search_name'] . '%'));
|
||||||
|
if ($query->rowCount() > 0 && $query->rowCount() <= 10) {
|
||||||
|
echo 'Do you mean?<ul>';
|
||||||
|
foreach ($query as $row)
|
||||||
|
echo '<li><a href="' . $base . '&id=' . $row['id'] . '">' . $row['name'] . '</a></li>';
|
||||||
|
echo '</ul>';
|
||||||
|
} else if ($query->rowCount() > 10)
|
||||||
|
echo 'Specified name resulted with too many players.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$groups = new OTS_Groups_List();
|
||||||
|
if ($id > 0) {
|
||||||
|
$player = new OTS_Player();
|
||||||
|
$player->load($id);
|
||||||
|
|
||||||
|
if (isset($player) && $player->isLoaded() && isset($_POST['save'])) {// we want to save
|
||||||
|
$error = false;
|
||||||
|
|
||||||
|
if ($player->isOnline())
|
||||||
|
echo_error('This player is actually online. You can\'t edit online players.');
|
||||||
|
|
||||||
|
$name = $_POST['name'];
|
||||||
|
$_error = '';
|
||||||
|
if (!Validator::characterName($name))
|
||||||
|
echo_error(Validator::getLastError());
|
||||||
|
|
||||||
|
//if(!Validator::newCharacterName($name)
|
||||||
|
// echo_error(Validator::getLastError());
|
||||||
|
|
||||||
|
$player_db = new OTS_Player();
|
||||||
|
$player_db->find($name);
|
||||||
|
if ($player_db->isLoaded() && $player->getName() != $name)
|
||||||
|
echo_error('This name is already used. Please choose another name!');
|
||||||
|
|
||||||
|
$account_id = $_POST['account_id'];
|
||||||
|
verify_number($account_id, 'Account id', 11);
|
||||||
|
|
||||||
|
$account_db = new OTS_Account();
|
||||||
|
$account_db->load($account_id);
|
||||||
|
if (!$account_db->isLoaded())
|
||||||
|
echo_error('Account with this id doesn\'t exist.');
|
||||||
|
|
||||||
|
$group = $_POST['group'];
|
||||||
|
if ($groups->getGroup($group) == false)
|
||||||
|
echo_error('Group with this id doesn\'t exist');
|
||||||
|
|
||||||
|
$level = $_POST['level'];
|
||||||
|
verify_number($level, 'Level', 11);
|
||||||
|
|
||||||
|
$experience = $_POST['experience'];
|
||||||
|
verify_number($experience, 'Experience', 20);
|
||||||
|
|
||||||
|
$vocation = $_POST['vocation'];
|
||||||
|
verify_number($vocation, 'Vocation id', 11);
|
||||||
|
|
||||||
|
if (!isset($config['vocations'][$vocation])) {
|
||||||
|
echo_error("Vocation with this id doesn't exist.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// health
|
||||||
|
$health = $_POST['health'];
|
||||||
|
verify_number($health, 'Health', 11);
|
||||||
|
$health_max = $_POST['health_max'];
|
||||||
|
verify_number($health_max, 'Health max', 11);
|
||||||
|
|
||||||
|
// mana
|
||||||
|
$magic_level = $_POST['magic_level'];
|
||||||
|
verify_number($magic_level, 'Magic_level', 11);
|
||||||
|
$mana = $_POST['mana'];
|
||||||
|
verify_number($mana, 'Mana', 11);
|
||||||
|
$mana_max = $_POST['mana_max'];
|
||||||
|
verify_number($mana_max, 'Mana max', 11);
|
||||||
|
$mana_spent = $_POST['mana_spent'];
|
||||||
|
verify_number($mana_spent, 'Mana spent', 11);
|
||||||
|
|
||||||
|
// look
|
||||||
|
$look_body = $_POST['look_body'];
|
||||||
|
verify_number($look_body, 'Look body', 11);
|
||||||
|
$look_feet = $_POST['look_feet'];
|
||||||
|
verify_number($look_feet, 'Look feet', 11);
|
||||||
|
$look_head = $_POST['look_head'];
|
||||||
|
verify_number($look_head, 'Look head', 11);
|
||||||
|
$look_legs = $_POST['look_legs'];
|
||||||
|
verify_number($look_legs, 'Look legs', 11);
|
||||||
|
$look_type = $_POST['look_type'];
|
||||||
|
verify_number($look_type, 'Look type', 11);
|
||||||
|
if ($hasLookAddons) {
|
||||||
|
$look_addons = $_POST['look_addons'];
|
||||||
|
verify_number($look_addons, 'Look addons', 11);
|
||||||
|
}
|
||||||
|
|
||||||
|
// pos
|
||||||
|
$pos_x = $_POST['pos_x'];
|
||||||
|
verify_number($pos_x, 'Position x', 11);
|
||||||
|
$pos_y = $_POST['pos_y'];
|
||||||
|
verify_number($pos_y, 'Position y', 11);
|
||||||
|
$pos_z = $_POST['pos_z'];
|
||||||
|
verify_number($pos_z, 'Position z', 11);
|
||||||
|
|
||||||
|
$soul = $_POST['soul'];
|
||||||
|
verify_number($soul, 'Soul', 10);
|
||||||
|
$town = $_POST['town'];
|
||||||
|
verify_number($town, 'Town', 11);
|
||||||
|
|
||||||
|
$capacity = $_POST['capacity'];
|
||||||
|
verify_number($capacity, 'Capacity', 11);
|
||||||
|
$sex = $_POST['sex'];
|
||||||
|
verify_number($sex, 'Sex', 1);
|
||||||
|
|
||||||
|
$lastlogin = $_POST['lastlogin'];
|
||||||
|
verify_number($lastlogin, 'Last login', 20);
|
||||||
|
$lastlogout = $_POST['lastlogout'];
|
||||||
|
verify_number($lastlogout, 'Last logout', 20);
|
||||||
|
|
||||||
|
$skull = $_POST['skull'];
|
||||||
|
verify_number($skull, 'Skull', 1);
|
||||||
|
$skull_time = $_POST['skull_time'];
|
||||||
|
verify_number($skull_time, 'Skull time', 11);
|
||||||
|
|
||||||
|
if ($db->hasColumn('players', 'loss_experience')) {
|
||||||
|
$loss_experience = $_POST['loss_experience'];
|
||||||
|
verify_number($loss_experience, 'Loss experience', 11);
|
||||||
|
$loss_mana = $_POST['loss_mana'];
|
||||||
|
verify_number($loss_mana, 'Loss mana', 11);
|
||||||
|
$loss_skills = $_POST['loss_skills'];
|
||||||
|
verify_number($loss_skills, 'Loss skills', 11);
|
||||||
|
$loss_containers = $_POST['loss_containers'];
|
||||||
|
verify_number($loss_containers, 'Loss loss_containers', 11);
|
||||||
|
$loss_items = $_POST['loss_items'];
|
||||||
|
verify_number($loss_items, 'Loss items', 11);
|
||||||
|
}
|
||||||
|
if ($db->hasColumn('players', 'offlinetraining_time')) {
|
||||||
|
$offlinetraining = $_POST['offlinetraining'];
|
||||||
|
verify_number($offlinetraining, 'Offline Training time', 11);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($hasBlessingsColumn) {
|
||||||
|
$blessings = $_POST['blessings'];
|
||||||
|
verify_number($blessings, 'Blessings', 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
$balance = $_POST['balance'];
|
||||||
|
verify_number($balance, 'Balance', 20);
|
||||||
|
if ($db->hasColumn('players', 'stamina')) {
|
||||||
|
$stamina = $_POST['stamina'];
|
||||||
|
verify_number($stamina, 'Stamina', 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
$deleted = (isset($_POST['deleted']) && $_POST['deleted'] == 'true');
|
||||||
|
$hidden = (isset($_POST['hidden']) && $_POST['hidden'] == 'true');
|
||||||
|
|
||||||
|
$created = $_POST['created'];
|
||||||
|
verify_number($created, 'Created', 11);
|
||||||
|
|
||||||
|
$comment = isset($_POST['comment']) ? htmlspecialchars(stripslashes(substr($_POST['comment'], 0, 2000))) : NULL;
|
||||||
|
|
||||||
|
foreach ($_POST['skills'] as $skill => $value)
|
||||||
|
verify_number($value, $skills[$skill][0], 10);
|
||||||
|
foreach ($_POST['skills_tries'] as $skill => $value)
|
||||||
|
verify_number($value, $skills[$skill][0] . ' tries', 10);
|
||||||
|
|
||||||
|
if ($hasBlessingColumn) {
|
||||||
|
$bless_count = $_POST['blesscount'];
|
||||||
|
for ($i = 1; $i <= $bless_count; $i++) {
|
||||||
|
$a = 'blessing' . $i;
|
||||||
|
${'blessing' . $i} = (isset($_POST[$a]) && $_POST[$a] == 'true');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$error) {
|
||||||
|
$player->setName($name);
|
||||||
|
$player->setAccount($account_db);
|
||||||
|
$player->setGroup($groups->getGroup($group));
|
||||||
|
$player->setLevel($level);
|
||||||
|
$player->setExperience($experience);
|
||||||
|
$player->setVocation($vocation);
|
||||||
|
$player->setHealth($health);
|
||||||
|
$player->setHealthMax($health_max);
|
||||||
|
$player->setMagLevel($magic_level);
|
||||||
|
$player->setMana($mana);
|
||||||
|
$player->setManaMax($mana_max);
|
||||||
|
$player->setManaSpent($mana_spent);
|
||||||
|
$player->setLookBody($look_body);
|
||||||
|
$player->setLookFeet($look_feet);
|
||||||
|
$player->setLookHead($look_head);
|
||||||
|
$player->setLookLegs($look_legs);
|
||||||
|
$player->setLookType($look_type);
|
||||||
|
if ($hasLookAddons)
|
||||||
|
$player->setLookAddons($look_addons);
|
||||||
|
if ($db->hasColumn('players', 'offlinetraining_time'))
|
||||||
|
$player->setCustomField('offlinetraining_time', $offlinetraining);
|
||||||
|
$player->setPosX($pos_x);
|
||||||
|
$player->setPosY($pos_y);
|
||||||
|
$player->setPosZ($pos_z);
|
||||||
|
$player->setSoul($soul);
|
||||||
|
$player->setTownId($town);
|
||||||
|
$player->setCap($capacity);
|
||||||
|
$player->setSex($sex);
|
||||||
|
$player->setLastLogin($lastlogin);
|
||||||
|
$player->setLastLogout($lastlogout);
|
||||||
|
//$player->setLastIP(ip2long($lastip));
|
||||||
|
$player->setSkull($skull);
|
||||||
|
$player->setSkullTime($skull_time);
|
||||||
|
if ($db->hasColumn('players', 'loss_experience')) {
|
||||||
|
$player->setLossExperience($loss_experience);
|
||||||
|
$player->setLossMana($loss_mana);
|
||||||
|
$player->setLossSkills($loss_skills);
|
||||||
|
$player->setLossContainers($loss_containers);
|
||||||
|
$player->setLossItems($loss_items);
|
||||||
|
}
|
||||||
|
if ($db->hasColumn('players', 'blessings'))
|
||||||
|
$player->setBlessings($blessings);
|
||||||
|
|
||||||
|
if ($hasBlessingColumn) {
|
||||||
|
for ($i = 1; $i <= $bless_count; $i++) {
|
||||||
|
$a = 'blessing' . $i;
|
||||||
|
$player->setCustomField('blessings' . $i, ${'blessing' . $i} ? '1' : '0');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$player->setBalance($balance);
|
||||||
|
if ($db->hasColumn('players', 'stamina'))
|
||||||
|
$player->setStamina($stamina);
|
||||||
|
if ($db->hasColumn('players', 'deletion'))
|
||||||
|
$player->setCustomField('deletion', $deleted ? '1' : '0');
|
||||||
|
else
|
||||||
|
$player->setCustomField('deleted', $deleted ? '1' : '0');
|
||||||
|
$player->setCustomField('hidden', $hidden ? '1' : '0');
|
||||||
|
$player->setCustomField('created', $created);
|
||||||
|
if (isset($comment))
|
||||||
|
$player->setCustomField('comment', $comment);
|
||||||
|
|
||||||
|
foreach ($_POST['skills'] as $skill => $value) {
|
||||||
|
$player->setSkill($skill, $value);
|
||||||
|
}
|
||||||
|
foreach ($_POST['skills_tries'] as $skill => $value) {
|
||||||
|
$player->setSkillTries($skill, $value);
|
||||||
|
}
|
||||||
|
$player->save();
|
||||||
|
echo_success('Player saved at: ' . date('G:i'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$search_name = '';
|
||||||
|
if (isset($_REQUEST['search_name']))
|
||||||
|
$search_name = $_REQUEST['search_name'];
|
||||||
|
else if ($id > 0 && isset($player) && $player->isLoaded())
|
||||||
|
$search_name = $player->getName();
|
||||||
|
|
||||||
|
?>
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<?php
|
||||||
|
if (isset($player) && $player->isLoaded()) {
|
||||||
|
$account = $player->getAccount();
|
||||||
|
?>
|
||||||
|
|
||||||
|
<form action="<?php echo $base . ((isset($id) && $id > 0) ? '&id=' . $id : ''); ?>" method="post"
|
||||||
|
class="form-horizontal">
|
||||||
|
<div class="col-md-8">
|
||||||
|
<div class="box box-primary">
|
||||||
|
<div class="box-body">
|
||||||
|
<div class="nav-tabs-custom">
|
||||||
|
<ul class="nav nav-tabs">
|
||||||
|
<li class="active"><a href="#tab_1" data-toggle="tab" aria-expanded="true">Player</a>
|
||||||
|
</li>
|
||||||
|
<li class=""><a href="#tab_2" data-toggle="tab" aria-expanded="false">Stats</a></li>
|
||||||
|
<li class=""><a href="#tab_3" data-toggle="tab" aria-expanded="false">Skills</a></li>
|
||||||
|
<li class=""><a href="#tab_4" data-toggle="tab" aria-expanded="false">Pos/Look</a></li>
|
||||||
|
<li class=""><a href="#tab_5" data-toggle="tab" aria-expanded="false">Misc</a></li>
|
||||||
|
<li class="pull-right"><a
|
||||||
|
href="<?php echo ADMIN_URL; ?>?p=accounts&search_name=<?php echo $account->getId(); ?>"
|
||||||
|
class="text-muted"><i class="fa fa-gear" title="Edit Account"></i></a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="tab-content">
|
||||||
|
<div class="tab-pane active" id="tab_1">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="name" class="control-label">Name</label>
|
||||||
|
<input type="text" class="form-control" id="name" name="name"
|
||||||
|
autocomplete="off" style="cursor: auto;"
|
||||||
|
value="<?php echo $player->getName(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="account_id" class="control-label">Account id:</label>
|
||||||
|
<input type="text" class="form-control" id="account_id" name="account_id"
|
||||||
|
autocomplete="off" style="cursor: auto;" size="8" maxlength="11"
|
||||||
|
value="<?php echo $account->getId(); ?>"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-6 ">
|
||||||
|
<label for="group" class="control-label">Group:</label>
|
||||||
|
<select name="group" id="group" class="form-control">
|
||||||
|
<?php foreach ($groups->getGroups() as $id => $group): ?>
|
||||||
|
<option value="<?php echo $id; ?>" <?php echo($player->getGroup()->getId() == $id ? 'selected' : ''); ?>><?php echo $group->getName(); ?></option>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="vocation" class="control-label">Vocation</label>
|
||||||
|
<select name="vocation" id="vocation" class="form-control">
|
||||||
|
<?php
|
||||||
|
foreach ($config['vocations'] as $id => $name) {
|
||||||
|
echo '<option value=' . $id . ($id == $player->getVocation() ? ' selected' : '') . '>' . $name . '</option>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="sex" class="control-label">Sex:</label>
|
||||||
|
<select name="sex" id="sex" class="form-control">>
|
||||||
|
<?php foreach ($config['genders'] as $id => $sex): ?>
|
||||||
|
<option value="<?php echo $id; ?>" <?php echo($player->getSex() == $id ? 'selected' : ''); ?>><?php echo strtolower($sex); ?></option>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="town" class="control-label">Town:</label>
|
||||||
|
<select name="town" id="town" class="form-control">
|
||||||
|
<?php foreach ($config['towns'] as $id => $town): ?>
|
||||||
|
<option value="<?php echo $id; ?>" <?php echo($player->getTownId() == $id ? 'selected' : ''); ?>><?php echo $town; ?></option>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="skull" class="control-label">Skull:</label>
|
||||||
|
<select name="skull" id="skull" class="form-control">
|
||||||
|
<?php
|
||||||
|
$skull_type = array("None", "Yellow", "Green", "White", "Red", "Black", "Orange");
|
||||||
|
foreach ($skull_type as $id => $s_name) {
|
||||||
|
echo '<option value=' . $id . ($id == $player->getSkull() ? ' selected' : '') . '>' . $s_name . '</option>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="skull_time" class="control-label">Skull time:</label>
|
||||||
|
<input type="text" class="form-control" id="skull_time" name="skull_time"
|
||||||
|
autocomplete="off" maxlength="11"
|
||||||
|
value="<?php echo $player->getSkullTime(); ?>"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<?php if ($hasBlessingColumn):
|
||||||
|
$blesscount = $player->countBlessings();
|
||||||
|
$bless = $player->checkBlessings($blesscount);
|
||||||
|
?>
|
||||||
|
<input type="hidden" name="blesscount" value="<?php echo $blesscount; ?>"/>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="blessings" class="control-label">Blessings:</label>
|
||||||
|
<div class="checkbox">
|
||||||
|
<?php
|
||||||
|
for ($i = 1; $i <= $blesscount; $i++) {
|
||||||
|
echo '<label><input style="margin-left: -16px;" type="checkbox" name="blessing' . $i . '" id="blessing' . $i . '"
|
||||||
|
value="true" ' . (($bless[$i - 1] == 1) ? ' checked' : '') . '/>' . $i . '</label>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if ($hasBlessingsColumn): ?>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="blessings" class="control-label">Blessings:</label>
|
||||||
|
<input type="text" class="form-control" id="blessings" name="blessings"
|
||||||
|
autocomplete="off" maxlength="11"
|
||||||
|
value="<?php echo $player->getBlessings(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="balance" class="control-label">Bank Balance:</label>
|
||||||
|
<input type="text" class="form-control" id="balance" name="balance"
|
||||||
|
autocomplete="off" maxlength="20"
|
||||||
|
value="<?php echo $player->getBalance(); ?>"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="deleted" class="control-label">Deleted:</label>
|
||||||
|
<input type="checkbox" name="deleted" id="deleted"
|
||||||
|
value="true" <?php echo($player->getCustomField($db->hasColumn('players', 'deletion') ? 'deletion' : 'deleted') == '1' ? ' checked' : ''); ?>/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="hidden" class="control-label">Hidden:</label>
|
||||||
|
<input type="checkbox" name="hidden" id="hidden"
|
||||||
|
value="true" <?php echo($player->isHidden() ? ' checked' : ''); ?>/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane" id="tab_2">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-6 ">
|
||||||
|
<label for="level" class="control-label">Level:</label>
|
||||||
|
|
||||||
|
<input type="text" class="form-control" id="level" name="level"
|
||||||
|
autocomplete="off"
|
||||||
|
style="cursor: auto;" value="<?php echo $player->getLevel(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="magic_level" class="control-label">Magic level:</label>
|
||||||
|
<input type="text" class="form-control" id="magic_level" name="magic_level"
|
||||||
|
autocomplete="off" size="8" maxlength="11" style="cursor: auto;"
|
||||||
|
value="<?php echo $player->getMagLevel(); ?>"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-6 ">
|
||||||
|
<label for="experience" class="control-label">Experience:</label>
|
||||||
|
<input type="text" class="form-control" id="experience" name="experience"
|
||||||
|
autocomplete="off"
|
||||||
|
style="cursor: auto;"
|
||||||
|
value="<?php echo $player->getExperience(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="mana_spent" class="control-label">Mana spent:</label>
|
||||||
|
<input type="text" class="form-control" id="mana_spent" name="mana_spent"
|
||||||
|
autocomplete="off"
|
||||||
|
size="3" maxlength="11" style="cursor: auto;"
|
||||||
|
value="<?php echo $player->getManaSpent(); ?>"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-6 ">
|
||||||
|
<label for="health" class="control-label">Health:</label>
|
||||||
|
<input type="text" class="form-control" id="health" name="health"
|
||||||
|
autocomplete="off"
|
||||||
|
size="5" maxlength="11" style="cursor: auto;"
|
||||||
|
value="<?php echo $player->getHealth(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="health_max" class="control-label">Health max:</label>
|
||||||
|
<input type="text" class="form-control" id="health_max" name="health_max"
|
||||||
|
autocomplete="off"
|
||||||
|
size="5" maxlength="11" style="cursor: auto;"
|
||||||
|
value="<?php echo $player->getHealthMax(); ?>"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-6 ">
|
||||||
|
<label for="mana" class="control-label">Mana:</label>
|
||||||
|
<input type="text" class="form-control" id="mana" name="mana"
|
||||||
|
autocomplete="off" size="3"
|
||||||
|
maxlength="11" style="cursor: auto;"
|
||||||
|
value="<?php echo $player->getMana(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="mana_max" class="control-label">Mana max:</label>
|
||||||
|
<input type="text" class="form-control" id="mana_max" name="mana_max"
|
||||||
|
autocomplete="off"
|
||||||
|
size="3" maxlength="11" style="cursor: auto;"
|
||||||
|
value="<?php echo $player->getManaMax(); ?>"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="capacity" class="control-label">Capacity:</label>
|
||||||
|
<input type="text" class="form-control" id="capacity" name="capacity"
|
||||||
|
autocomplete="off"
|
||||||
|
size="3" maxlength="11" style="cursor: auto;"
|
||||||
|
value="<?php echo $player->getCap(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 ">
|
||||||
|
<label for="soul" class="control-label">Soul:</label>
|
||||||
|
<input type="text" class="form-control" id="soul" name="soul"
|
||||||
|
autocomplete="off" size="3"
|
||||||
|
maxlength="10" style="cursor: auto;"
|
||||||
|
value="<?php echo $player->getSoul(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<?php if ($db->hasColumn('players', 'stamina')): ?>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="stamina" class="control-label">Stamina:</label>
|
||||||
|
<input type="text" class="form-control" id="stamina" name="stamina"
|
||||||
|
autocomplete="off"
|
||||||
|
maxlength="20" style="cursor: auto;"
|
||||||
|
value="<?php echo $player->getStamina(); ?>"/>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if ($db->hasColumn('players', 'offlinetraining_time')): ?>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="offlinetraining" class="control-label">Offline Training
|
||||||
|
Time:</label>
|
||||||
|
<input type="text" class="form-control" id="offlinetraining"
|
||||||
|
name="offlinetraining" autocomplete="off"
|
||||||
|
maxlength="11"
|
||||||
|
value="<?php echo $player->getCustomField('offlinetraining_time'); ?>"/>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane" id="tab_3">
|
||||||
|
<?php
|
||||||
|
$i = 0;
|
||||||
|
foreach ($skills as $id => $info) {
|
||||||
|
if ($i == 0 || $i++ == 2) {
|
||||||
|
$i = 0;
|
||||||
|
}
|
||||||
|
echo '
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-6 ">
|
||||||
|
<label for="skills[' . $id . ']" class="control-label">' . $info[0] . '</label>
|
||||||
|
<input type="text" class="form-control" id="skills[' . $id . ']" name="skills[' . $id . ']" maxlength="10" autocomplete="off" style="cursor: auto;" value="' . $player->getSkill($id) . '"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="skills_tries[' . $id . ']" class="control-label">' . $info[0] . ' tries</label>
|
||||||
|
<input type="text" class="form-control" id="skills_tries[' . $id . ']" name="skills_tries[' . $id . ']" maxlength="10" autocomplete="off" style="cursor: auto;" value="' . $player->getSkillTries($id) . '"/>
|
||||||
|
</div>
|
||||||
|
</div>';
|
||||||
|
if ($i == 0)
|
||||||
|
echo '';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane" id="tab_4">
|
||||||
|
<?php $outfit = $config['outfit_images_url'] . '?id=' . $player->getLookType() . ($hasLookAddons ? '&addons=' . $player->getLookAddons() : '') . '&head=' . $player->getLookHead() . '&body=' . $player->getLookBody() . '&legs=' . $player->getLookLegs() . '&feet=' . $player->getLookFeet(); ?>
|
||||||
|
<div id="imgchar"
|
||||||
|
style="width:64px;height:64px;position:absolute; top:30px; right:30px"><img id="player_outfit"
|
||||||
|
style="margin-left:0;margin-top:0px;width:64px;height:64px;"
|
||||||
|
src="<?php echo $outfit; ?>"
|
||||||
|
alt="player outfit"/></div>
|
||||||
|
<?php ?>
|
||||||
|
<td>Position:</td>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-4">
|
||||||
|
<label for="pos_x" class="control-label">X:</label>
|
||||||
|
<input type="text" class="form-control" id="pos_x" name="pos_x"
|
||||||
|
autocomplete="off"
|
||||||
|
maxlength="11" style="cursor: auto;"
|
||||||
|
value="<?php echo $player->getPosX(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-4">
|
||||||
|
<label for="pos_y" class="control-label">Y:</label>
|
||||||
|
<input type="text" class="form-control" id="pos_y" name="pos_y"
|
||||||
|
autocomplete="off"
|
||||||
|
maxlength="11" value="<?php echo $player->getPosY(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-4">
|
||||||
|
<label for="pos_z" class="control-label">Z:</label>
|
||||||
|
<input type="text" class="form-control" id="pos_z" name="pos_z"
|
||||||
|
autocomplete="off"
|
||||||
|
maxlength="11" value="<?php echo $player->getPosZ(); ?>"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<td>Look:</td>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-3">
|
||||||
|
<label for="look_head" class="control-label">Head: <span
|
||||||
|
id="look_head_val"></span></label>
|
||||||
|
<input type="range" min="0" max="132"
|
||||||
|
value="<?php echo $player->getLookHead(); ?>"
|
||||||
|
class="slider form-control" id="look_head" name="look_head">
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-3">
|
||||||
|
<label for="look_body" class="control-label">Body: <span
|
||||||
|
id="look_body_val"></span></label>
|
||||||
|
<input type="range" min="0" max="132"
|
||||||
|
value="<?php echo $player->getLookBody(); ?>"
|
||||||
|
class="slider form-control" id="look_body" name="look_body">
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-3">
|
||||||
|
<label for="look_legs" class="control-label">Legs: <span
|
||||||
|
id="look_legs_val"></span></label>
|
||||||
|
<input type="range" min="0" max="132"
|
||||||
|
value="<?php echo $player->getLookLegs(); ?>"
|
||||||
|
class="slider form-control" id="look_legs" name="look_legs">
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-3">
|
||||||
|
<label for="look_feet" class="control-label">Feet: <span
|
||||||
|
id="look_feet_val"></span></label>
|
||||||
|
<input type="range" min="0" max="132"
|
||||||
|
value="<?php echo $player->getLookFeet(); ?>"
|
||||||
|
class="slider form-control" id="look_feet" name="look_feet">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="look_type" class="control-label">Type:</label>
|
||||||
|
<input type="text" class="form-control" id="look_type" name="look_type"
|
||||||
|
autocomplete="off"
|
||||||
|
maxlength="11" style="cursor: auto;"
|
||||||
|
value="<?php echo $player->getLookType(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<?php if ($hasLookAddons): ?>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="look_addons" class="control-label">Addons:</label>
|
||||||
|
<input type="text" class="form-control" id="look_addons"
|
||||||
|
name="look_addons" autocomplete="off"
|
||||||
|
maxlength="11" value="<?php echo $player->getLookAddons(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane" id="tab_5">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="created" class="control-label">Created:</label>
|
||||||
|
<input type="text" class="form-control" id="created" name="created"
|
||||||
|
autocomplete="off"
|
||||||
|
maxlength="10"
|
||||||
|
value="<?php echo $player->getCustomField('created'); ?>"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="lastlogin" class="control-label">Last login:</label>
|
||||||
|
<input type="text" class="form-control" id="lastlogin" name="lastlogin"
|
||||||
|
autocomplete="off"
|
||||||
|
maxlength="20" value="<?php echo $player->getLastLogin(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="lastlogout" class="control-label">Last logout:</label>
|
||||||
|
<input type="text" class="form-control" id="lastlogout" name="lastlogout"
|
||||||
|
autocomplete="off"
|
||||||
|
maxlength="20" value="<?php echo $player->getLastLogout(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="lastip" class="control-label">Last IP:</label>
|
||||||
|
<input type="text" class="form-control" id="lastip" name="lastip"
|
||||||
|
autocomplete="off"
|
||||||
|
maxlength="10" value="<?php
|
||||||
|
if (strlen($player->getLastIP()) > 11) {
|
||||||
|
echo inet_ntop($player->getLastIP());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
echo longToIp($player->getLastIP());
|
||||||
|
}
|
||||||
|
?>"
|
||||||
|
readonly/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php if ($db->hasColumn('players', 'loss_experience')): ?>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="loss_experience" class="control-label">Experience
|
||||||
|
Loss:</label>
|
||||||
|
<input type="text" class="form-control" id="loss_experience"
|
||||||
|
name="loss_experience" autocomplete="off"
|
||||||
|
maxlength="11"
|
||||||
|
value="<?php echo $player->getLossExperience(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="loss_mana" class="control-label">Mana Loss:</label>
|
||||||
|
<input type="text" class="form-control" id="loss_mana"
|
||||||
|
name="loss_mana" autocomplete="off"
|
||||||
|
maxlength="11" value="<?php echo $player->getLossMana(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="loss_skills" class="control-label">Skills Loss:</label>
|
||||||
|
<input type="text" class="form-control" id="loss_skills"
|
||||||
|
name="loss_skills" autocomplete="off"
|
||||||
|
maxlength="11" value="<?php echo $player->getLossSkills(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="loss_containers" class="control-label">Containers
|
||||||
|
Loss:</label>
|
||||||
|
<input type="text" class="form-control" id="loss_containers"
|
||||||
|
name="loss_containers" autocomplete="off"
|
||||||
|
maxlength="11"
|
||||||
|
value="<?php echo $player->getLossContainers(); ?>"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<label for="loss_items" class="control-label">Items Loss:</label>
|
||||||
|
<input type="text" class="form-control" id="loss_items"
|
||||||
|
name="loss_items" autocomplete="off"
|
||||||
|
maxlength="11" value="<?php echo $player->getLossItems(); ?>"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-12">
|
||||||
|
<label for="comment" class="control-label">Comment:</label>
|
||||||
|
<textarea class="form-control" name="comment" rows="10" cols="50"
|
||||||
|
wrap="virtual"><?php echo $player->getCustomField("comment"); ?></textarea>
|
||||||
|
<small>[max.
|
||||||
|
length: 2000 chars, 50 lines (ENTERs)]
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<input type="hidden" name="save" value="yes"/>
|
||||||
|
<div class="box-footer">
|
||||||
|
<a href="<?php echo ADMIN_URL; ?>?p=players"><span class="btn btn-danger">Cancel</span></a>
|
||||||
|
<div class="pull-right">
|
||||||
|
<input type="submit" class="btn btn-primary" value="Update">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<?php } ?>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<div class="box box-primary">
|
||||||
|
<div class="box-header with-border">
|
||||||
|
<h3 class="box-title">Search Player:</h3>
|
||||||
|
<div class="box-tools pull-right">
|
||||||
|
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box-body">
|
||||||
|
<form action="<?php echo $base; ?>" method="post">
|
||||||
|
<div class="input-group input-group-sm">
|
||||||
|
<input type="text" class="form-control" name="search_name" value="<?php echo escapeHtml($search_name); ?>"
|
||||||
|
maxlength="32" size="32">
|
||||||
|
<span class="input-group-btn">
|
||||||
|
<button type="submit" type="button" class="btn btn-info btn-flat">Search</button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
if (isset($account) && $account->isLoaded()) {
|
||||||
|
$account_players = array();
|
||||||
|
$query = $db->query('SELECT `name`,`level`,`vocation` FROM `players` WHERE `account_id` = ' . $account->getId() . ' ORDER BY `name`')->fetchAll();
|
||||||
|
if (isset($query)) {
|
||||||
|
?>
|
||||||
|
<div class="box">
|
||||||
|
<div class="box-header">
|
||||||
|
<h3 class="box-title">Character List:</h3>
|
||||||
|
</div>
|
||||||
|
<div class="box-body no-padding">
|
||||||
|
<table class="table table-striped">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th style="width: 10px">#</th>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Level</th>
|
||||||
|
<th style="width: 40px">Edit</th>
|
||||||
|
</tr>
|
||||||
|
<?php
|
||||||
|
$i = 1;
|
||||||
|
foreach ($query as $p) {
|
||||||
|
$account_players[] = $p;
|
||||||
|
echo '<tr>
|
||||||
|
<td>' . $i . '.</td>
|
||||||
|
<td>' . $p['name'] . '</td>
|
||||||
|
<td>' . $p['level'] . '</td>
|
||||||
|
<td><a href="?p=players&search_name=' . $p['name'] . '"><span class="btn btn-success btn-sm edit btn-flat"><i class="fa fa-edit"></i></span></a></span></td>
|
||||||
|
</tr>';
|
||||||
|
$i++;
|
||||||
|
} ?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
};
|
||||||
|
};
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$('#lastlogin').datetimepicker({
|
||||||
|
format: 'unixtime'
|
||||||
|
});
|
||||||
|
$('#lastlogout').datetimepicker({
|
||||||
|
format: 'unixtime'
|
||||||
|
});
|
||||||
|
$('#created').datetimepicker({
|
||||||
|
format: 'unixtime'
|
||||||
|
});
|
||||||
|
|
||||||
|
var slider_head = document.getElementById("look_head");
|
||||||
|
var output_head = document.getElementById("look_head_val");
|
||||||
|
|
||||||
|
var slider_body = document.getElementById("look_body");
|
||||||
|
var output_body = document.getElementById("look_body_val");
|
||||||
|
|
||||||
|
var slider_legs = document.getElementById("look_legs");
|
||||||
|
var output_legs = document.getElementById("look_legs_val");
|
||||||
|
|
||||||
|
var slider_feet = document.getElementById("look_feet");
|
||||||
|
var output_feet = document.getElementById("look_feet_val");
|
||||||
|
output_head.innerHTML = slider_head.value;
|
||||||
|
output_body.innerHTML = slider_body.value;
|
||||||
|
output_legs.innerHTML = slider_legs.value;
|
||||||
|
output_feet.innerHTML = slider_feet.value;
|
||||||
|
|
||||||
|
slider_head.oninput = function () {
|
||||||
|
output_head.innerHTML = this.value;
|
||||||
|
}
|
||||||
|
slider_body.oninput = function () {
|
||||||
|
output_body.innerHTML = this.value;
|
||||||
|
}
|
||||||
|
slider_legs.oninput = function () {
|
||||||
|
output_legs.innerHTML = this.value;
|
||||||
|
}
|
||||||
|
slider_feet.oninput = function () {
|
||||||
|
output_feet.innerHTML = this.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#look_head').change(function() {updateOutfit()});
|
||||||
|
$('#look_body').change(function() {updateOutfit()});
|
||||||
|
$('#look_legs').change(function() {updateOutfit()});
|
||||||
|
$('#look_feet').change(function() {updateOutfit()});
|
||||||
|
$('#look_type').change(function() {updateOutfit()});
|
||||||
|
<?php if($hasLookAddons): ?>
|
||||||
|
$('#look_addons').change(function() {updateOutfit()});
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
function updateOutfit()
|
||||||
|
{
|
||||||
|
var look_head = $('#look_head').val();
|
||||||
|
var look_body = $('#look_body').val();
|
||||||
|
var look_legs = $('#look_legs').val();
|
||||||
|
var look_feet = $('#look_feet').val();
|
||||||
|
var look_type = $('#look_type').val();
|
||||||
|
|
||||||
|
var look_addons = '';
|
||||||
|
<?php if($hasLookAddons): ?>
|
||||||
|
look_addons = '&addons=' + $('#look_addons').val();
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
new_outfit = '<?= $config['outfit_images_url']; ?>?id=' + look_type + look_addons + '&head=' + look_head + '&body=' + look_body + '&legs=' + look_legs + '&feet=' + look_feet;
|
||||||
|
$("#player_outfit").attr("src", new_outfit);
|
||||||
|
console.log(new_outfit);
|
||||||
|
}
|
||||||
|
</script>
|
112
admin/pages/plugins.php
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Plugins
|
||||||
|
*
|
||||||
|
* @package MyAAC
|
||||||
|
* @author Slawkens <slawkens@gmail.com>
|
||||||
|
* @copyright 2019 MyAAC
|
||||||
|
* @link https://my-aac.org
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
$title = 'Plugin manager';
|
||||||
|
|
||||||
|
$twig->display('admin.plugins.form.html.twig');
|
||||||
|
|
||||||
|
if (isset($_REQUEST['uninstall'])) {
|
||||||
|
$uninstall = $_REQUEST['uninstall'];
|
||||||
|
|
||||||
|
if (Plugins::uninstall($uninstall)) {
|
||||||
|
success('Successfully uninstalled plugin ' . $uninstall);
|
||||||
|
} else {
|
||||||
|
error('Error while uninstalling plugin ' . $uninstall . ': ' . Plugins::getError());
|
||||||
|
}
|
||||||
|
} else if (isset($_FILES["plugin"]["name"])) {
|
||||||
|
$file = $_FILES["plugin"];
|
||||||
|
$filename = $file["name"];
|
||||||
|
$tmp_name = $file["tmp_name"];
|
||||||
|
$type = $file["type"];
|
||||||
|
|
||||||
|
$name = explode(".", $filename);
|
||||||
|
$accepted_types = array('application/zip', 'application/x-zip-compressed', 'multipart/x-zip', 'application/x-compressed', 'application/octet-stream', 'application/zip-compressed');
|
||||||
|
|
||||||
|
if (isset($file['error'])) {
|
||||||
|
$error = 'Error uploading file';
|
||||||
|
switch ($file['error']) {
|
||||||
|
case UPLOAD_ERR_OK:
|
||||||
|
$error = false;
|
||||||
|
break;
|
||||||
|
case UPLOAD_ERR_INI_SIZE:
|
||||||
|
case UPLOAD_ERR_FORM_SIZE:
|
||||||
|
$error .= ' - file too large (limit of ' . ini_get('upload_max_filesize') . ' bytes). You can enlarge the limits by changing "upload_max_filesize" in php.ini';
|
||||||
|
break;
|
||||||
|
case UPLOAD_ERR_PARTIAL:
|
||||||
|
$error .= ' - file upload was not completed.';
|
||||||
|
break;
|
||||||
|
case UPLOAD_ERR_NO_FILE:
|
||||||
|
$error .= ' - zero-length file uploaded.';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$error .= ' - internal error #' . $file['error'];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($error) && $error != false) {
|
||||||
|
error($error);
|
||||||
|
} else {
|
||||||
|
if (is_uploaded_file($file['tmp_name'])) {
|
||||||
|
$filetype = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
|
||||||
|
if ($filetype == 'zip') // check if it is zipped/compressed file
|
||||||
|
{
|
||||||
|
$tmp_filename = pathinfo($filename, PATHINFO_FILENAME);
|
||||||
|
$targetzip = BASE . 'plugins/' . $tmp_filename . '.zip';
|
||||||
|
|
||||||
|
if (move_uploaded_file($tmp_name, $targetzip)) { // move uploaded file
|
||||||
|
if (Plugins::install($targetzip)) {
|
||||||
|
foreach (Plugins::getWarnings() as $warning) {
|
||||||
|
warning($warning);
|
||||||
|
}
|
||||||
|
|
||||||
|
$info = Plugins::getPluginJson();
|
||||||
|
success((isset($info['name']) ? '<strong>' . $info['name'] . '</strong> p' : 'P') . 'lugin has been successfully installed.');
|
||||||
|
} else {
|
||||||
|
$error = Plugins::getError();
|
||||||
|
error(!empty($error) ? $error : 'Unexpected error happened while installing plugin. Please try again later.');
|
||||||
|
}
|
||||||
|
|
||||||
|
unlink($targetzip); // delete the Zipped file
|
||||||
|
} else
|
||||||
|
error('There was a problem with the upload. Please try again.');
|
||||||
|
} else {
|
||||||
|
error('The file you are trying to upload is not a .zip file. Please try again.');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
error('Error uploading file - unknown error.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$plugins = array();
|
||||||
|
foreach (get_plugins() as $plugin) {
|
||||||
|
$string = file_get_contents(BASE . 'plugins/' . $plugin . '.json');
|
||||||
|
$string = Plugins::removeComments($string);
|
||||||
|
$plugin_info = json_decode($string, true);
|
||||||
|
|
||||||
|
if ($plugin_info == false) {
|
||||||
|
warning('Cannot load plugin info ' . $plugin . '.json');
|
||||||
|
} else {
|
||||||
|
$plugins[] = array(
|
||||||
|
'name' => isset($plugin_info['name']) ? $plugin_info['name'] : '',
|
||||||
|
'description' => isset($plugin_info['description']) ? $plugin_info['description'] : '',
|
||||||
|
'version' => isset($plugin_info['version']) ? $plugin_info['version'] : '',
|
||||||
|
'author' => isset($plugin_info['author']) ? $plugin_info['author'] : '',
|
||||||
|
'contact' => isset($plugin_info['contact']) ? $plugin_info['contact'] : '',
|
||||||
|
'file' => $plugin,
|
||||||
|
'uninstall' => isset($plugin_info['uninstall'])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$twig->display('admin.plugins.html.twig', array(
|
||||||
|
'plugins' => $plugins
|
||||||
|
));
|
61
admin/pages/reports.php
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Reports
|
||||||
|
*
|
||||||
|
* @package MyAAC
|
||||||
|
* @author Lee
|
||||||
|
* @copyright 2019 MyAAC
|
||||||
|
* @link https://my-aac.org
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
$title = 'Report Viewer';
|
||||||
|
|
||||||
|
$files = array();
|
||||||
|
$server_path_reports = $config['data_path'] . 'reports/';
|
||||||
|
|
||||||
|
if (file_exists($server_path_reports)) {
|
||||||
|
foreach (scandir($server_path_reports, SCANDIR_SORT_ASCENDING) as $f) {
|
||||||
|
if ($f[0] === '.') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_dir($server_path_reports . $f)) {
|
||||||
|
foreach (scandir($server_path_reports . $f, SCANDIR_SORT_ASCENDING) as $f2) {
|
||||||
|
if ($f2[0] === '.') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$files[] = array($f . '/' . $f2, $server_path_reports);
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$files[] = array($f, $server_path_reports);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($files as &$f) {
|
||||||
|
$f['mtime'] = filemtime($f[1] . $f[0]);
|
||||||
|
$f['name'] = $f[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($f);
|
||||||
|
|
||||||
|
$twig->display('admin.reports.html.twig', array('files' => $files));
|
||||||
|
|
||||||
|
|
||||||
|
$file = isset($_GET['file']) ? $_GET['file'] : NULL;
|
||||||
|
if (!empty($file)) {
|
||||||
|
if (!preg_match('/[^A-z0-9\' _\/\-\.]/', $file)) {
|
||||||
|
if (file_exists($server_path_reports . $file)) {
|
||||||
|
$content = nl2br(file_get_contents($server_path_reports . $file));
|
||||||
|
|
||||||
|
$twig->display('admin.logs.view.html.twig', array('file' => $file, 'content' => $content));
|
||||||
|
} else {
|
||||||
|
echo 'Specified file does not exist.';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
echo 'Invalid file name specified.';
|
||||||
|
}
|
||||||
|
}
|
38
admin/pages/statistics.php
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Statistics
|
||||||
|
*
|
||||||
|
* @package MyAAC
|
||||||
|
* @author Slawkens <slawkens@gmail.com>
|
||||||
|
* @copyright 2019 MyAAC
|
||||||
|
* @link https://my-aac.org
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
$title = 'Statistics';
|
||||||
|
|
||||||
|
$query = $db->query('SELECT count(*) as `how_much` FROM `accounts`;');
|
||||||
|
$query = $query->fetch();
|
||||||
|
$total_accounts = $query['how_much'];
|
||||||
|
|
||||||
|
$query = $db->query('SELECT count(*) as `how_much` FROM `players`;');
|
||||||
|
$query = $query->fetch();
|
||||||
|
$total_players = $query['how_much'];
|
||||||
|
|
||||||
|
$query = $db->query('SELECT count(*) as `how_much` FROM `guilds`;');
|
||||||
|
$query = $query->fetch();
|
||||||
|
$total_guilds = $query['how_much'];
|
||||||
|
|
||||||
|
$query = $db->query('SELECT count(*) as `how_much` FROM `houses`;');
|
||||||
|
$query = $query->fetch();
|
||||||
|
$total_houses = $query['how_much'];
|
||||||
|
|
||||||
|
$points = $db->query('SELECT `premium_points`, `' . (USE_ACCOUNT_NAME ? 'name' : 'id') . '` as `name` FROM `accounts` ORDER BY `premium_points` DESC LIMIT 10;');
|
||||||
|
|
||||||
|
$twig->display('admin.statistics.html.twig', array(
|
||||||
|
'total_accounts' => $total_accounts,
|
||||||
|
'total_players' => $total_players,
|
||||||
|
'total_guilds' => $total_guilds,
|
||||||
|
'total_houses' => $total_houses,
|
||||||
|
'account_type' => (USE_ACCOUNT_NAME ? 'name' : 'number'),
|
||||||
|
'points' => $points
|
||||||
|
));
|
27
admin/pages/tools.php
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Tools
|
||||||
|
*
|
||||||
|
* @package MyAAC
|
||||||
|
* @author Slawkens <slawkens@gmail.com>
|
||||||
|
* @copyright 2019 MyAAC
|
||||||
|
* @link https://my-aac.org
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
$title = 'Tools';
|
||||||
|
|
||||||
|
$tool = $_GET['tool'];
|
||||||
|
if (!isset($tool)) {
|
||||||
|
echo 'Tool not set.';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (preg_match("/[^A-z0-9_\-]/", $tool)) {
|
||||||
|
echo 'Invalid tool.';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$file = BASE . 'admin/pages/tools/' . $tool . '.php';
|
||||||
|
if (!@file_exists($file))
|
||||||
|
require $file;
|
||||||
|
?>
|
49
admin/pages/version.php
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Version check
|
||||||
|
*
|
||||||
|
* @package MyAAC
|
||||||
|
* @author Slawkens <slawkens@gmail.com>
|
||||||
|
* @copyright 2019 MyAAC
|
||||||
|
* @link https://my-aac.org
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
$title = 'Version check';
|
||||||
|
|
||||||
|
// fetch version
|
||||||
|
//$file = @fopen('https://my-aac.org/VERSION', 'r') or die('Error while fetching version.');
|
||||||
|
//$myaac_version = fgets($file);
|
||||||
|
$myaac_version = @file_get_contents('https://my-aac.org/VERSION');
|
||||||
|
if (!$myaac_version) {
|
||||||
|
warning('Error while fetching version info from https://my-aac.org<br/>
|
||||||
|
Please try again later.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// compare them
|
||||||
|
$version_compare = version_compare($myaac_version, MYAAC_VERSION);
|
||||||
|
if ($version_compare == 0) {
|
||||||
|
success('MyAAC latest version is ' . $myaac_version . '. You\'re using the latest version.
|
||||||
|
<br/>View CHANGELOG ' . generateLink(ADMIN_URL . '?p=changelog', 'here'));
|
||||||
|
} else if ($version_compare < 0) {
|
||||||
|
success('Woah, seems you\'re using newer version as latest released one! MyAAC latest released version is ' . $myaac_version . ', and you\'re using version ' . MYAAC_VERSION . '.
|
||||||
|
<br/>View CHANGELOG ' . generateLink(ADMIN_URL . '?p=changelog', 'here'));
|
||||||
|
} else {
|
||||||
|
warning('You\'re using outdated version.<br/>
|
||||||
|
Your version: <b>' . MYAAC_VERSION . '</b><br/>
|
||||||
|
Latest version: <b>' . $myaac_version . '</b><br/>
|
||||||
|
Download available at: <a href="https://my-aac.org" target="_blank">www.my-aac.org</a>');
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
function version_revert($version)
|
||||||
|
{
|
||||||
|
$major = floor($version / 10000);
|
||||||
|
$version -= $major * 10000;
|
||||||
|
|
||||||
|
$minor = floor($version / 100);
|
||||||
|
$version -= $minor * 100;
|
||||||
|
|
||||||
|
$release = $version;
|
||||||
|
return $major . '.' . $minor . '.' . $release;
|
||||||
|
}*/
|
36
admin/pages/visitors.php
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Visitors viewer
|
||||||
|
*
|
||||||
|
* @package MyAAC
|
||||||
|
* @author Slawkens <slawkens@gmail.com>
|
||||||
|
* @copyright 2019 MyAAC
|
||||||
|
* @link https://my-aac.org
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
$title = 'Visitors';
|
||||||
|
|
||||||
|
if (!$config['visitors_counter']): ?>
|
||||||
|
Visitors counter is disabled.<br/>
|
||||||
|
You can enable it by editing this configurable in <b>config.local.php</b> file:<br/>
|
||||||
|
<p style="margin-left: 3em;"><b>$config['visitors_counter'] = true;</b></p>
|
||||||
|
<?php
|
||||||
|
return;
|
||||||
|
endif;
|
||||||
|
|
||||||
|
require SYSTEM . 'libs/visitors.php';
|
||||||
|
$visitors = new Visitors($config['visitors_counter_ttl']);
|
||||||
|
|
||||||
|
function compare($a, $b)
|
||||||
|
{
|
||||||
|
return $a['lastvisit'] > $b['lastvisit'] ? -1 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$tmp = $visitors->getVisitors();
|
||||||
|
usort($tmp, 'compare');
|
||||||
|
|
||||||
|
$twig->display('admin.visitors.html.twig', array(
|
||||||
|
'config_visitors_counter_ttl' => $config['visitors_counter_ttl'],
|
||||||
|
'visitors' => $tmp
|
||||||
|
));
|
||||||
|
?>
|
44
admin/template/style.css
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
.slidecontainer {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
outline: none;
|
||||||
|
opacity: 0.7;
|
||||||
|
-webkit-transition: .2s;
|
||||||
|
transition: opacity .2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider:hover {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider::-webkit-slider-thumb {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
appearance: none;
|
||||||
|
width: 15px;
|
||||||
|
height: 25px;
|
||||||
|
background: #3c8dbc;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider::-moz-range-thumb {
|
||||||
|
width: 25px;
|
||||||
|
height: 25px;
|
||||||
|
background: #3c8dbc;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.details-control {
|
||||||
|
text-align: center;
|
||||||
|
color: forestgreen;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr.shown td.details-control {
|
||||||
|
text-align: center;
|
||||||
|
color: red;
|
||||||
|
}
|
229
admin/template/template.php
Normal file
@@ -0,0 +1,229 @@
|
|||||||
|
<?php defined('MYAAC') or die('Direct access not allowed!'); ?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<?php echo template_header(true);
|
||||||
|
$title_full = (isset($title) ? $title . $config['title_separator'] : '') . $config['lua']['serverName'];
|
||||||
|
?>
|
||||||
|
|
||||||
|
<title><?php echo $title_full ?></title>
|
||||||
|
<link rel="shortcut icon" href="<?php echo BASE_URL; ?>images/favicon.ico" type="image/x-icon" />
|
||||||
|
<link rel="icon" href="<?php echo BASE_URL; ?>images/favicon.ico" type="image/x-icon" />
|
||||||
|
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="<?php echo BASE_URL; ?>tools/css/bootstrap.min.css">
|
||||||
|
<link rel="stylesheet" href="<?php echo BASE_URL; ?>tools/css/AdminLTE.min.css">
|
||||||
|
<link rel="stylesheet" href="<?php echo BASE_URL; ?>tools/css/skins/skin-blue.min.css">
|
||||||
|
<link rel="stylesheet" href="<?php echo BASE_URL; ?>tools/css/font-awesome.min.css">
|
||||||
|
<link rel="stylesheet" href="<?php echo BASE_URL; ?>tools/css/ionicons.min.css">
|
||||||
|
<link rel="stylesheet" href="<?php echo BASE_URL; ?>tools/css/jquery.dataTables.min.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="<?php echo $template_path; ?>style.css"/>
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||||
|
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
<link rel="stylesheet"
|
||||||
|
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic">
|
||||||
|
</head>
|
||||||
|
<body class="hold-transition skin-blue sidebar-mini">
|
||||||
|
<div class="wrapper">
|
||||||
|
<?php
|
||||||
|
if ($logged && admin()) {
|
||||||
|
?>
|
||||||
|
<header class="main-header">
|
||||||
|
<a href="." class="logo">
|
||||||
|
<span class="logo-mini"><b>M</b>A</span>
|
||||||
|
<span class="logo-lg"><b>My</b>AAC</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<nav class="navbar navbar-static-top" role="navigation">
|
||||||
|
<a href="#" class="sidebar-toggle" data-toggle="push-menu" role="button">
|
||||||
|
<span class="sr-only">Toggle navigation</span>
|
||||||
|
</a>
|
||||||
|
<div class="navbar-custom-menu">
|
||||||
|
<ul class="nav navbar-nav">
|
||||||
|
<li>
|
||||||
|
<a href="#" data-toggle="control-sidebar"><i class="fa fa-gears"></i></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
<aside class="main-sidebar">
|
||||||
|
<section class="sidebar">
|
||||||
|
<ul class="sidebar-menu" data-widget="tree">
|
||||||
|
<li class="header">MyAAC</li>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
$icons_a = array(
|
||||||
|
'dashboard','newspaper-o', 'envelope',
|
||||||
|
'book', 'list',
|
||||||
|
'plug', 'user',
|
||||||
|
'edit', 'gavel',
|
||||||
|
'wrench', 'edit', 'book', 'book',
|
||||||
|
);
|
||||||
|
|
||||||
|
$menus = array(
|
||||||
|
'Dashboard' => 'dashboard',
|
||||||
|
'News' => 'news',
|
||||||
|
'Mailer' => 'mailer',
|
||||||
|
'Pages' => 'pages',
|
||||||
|
'Menus' => 'menus',
|
||||||
|
'Plugins' => 'plugins',
|
||||||
|
'Visitors' => 'visitors',
|
||||||
|
'Editor' => array(
|
||||||
|
'Accounts' => 'accounts',
|
||||||
|
'Players' => 'players',
|
||||||
|
),
|
||||||
|
'Items' => 'items',
|
||||||
|
'Tools' => array(
|
||||||
|
'Notepad' => 'notepad',
|
||||||
|
'phpinfo' => 'phpinfo',
|
||||||
|
),
|
||||||
|
'Logs' => array(
|
||||||
|
'Logs' => 'logs',
|
||||||
|
'Reports' => 'reports',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
$i = 0;
|
||||||
|
foreach ($menus as $_name => $_page) {
|
||||||
|
$has_child = is_array($_page);
|
||||||
|
if (!$has_child) {
|
||||||
|
echo '<li ';
|
||||||
|
if ($page == $_page) echo ' class="active"';
|
||||||
|
echo ">";
|
||||||
|
echo '<a href="?p=' . $_page . '"><i class="fa fa-' . (isset($icons_a[$i]) ? $icons_a[$i] : 'link') . '"></i> <span>' . $_name . '</span></a></li>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($has_child) {
|
||||||
|
$used_menu = "";
|
||||||
|
$nav_construct = '';
|
||||||
|
foreach ($_page as $__name => $__page) {
|
||||||
|
$nav_construct = $nav_construct . '<li';
|
||||||
|
|
||||||
|
if ($page == $__page) {
|
||||||
|
$nav_construct = $nav_construct . ' class="active"';
|
||||||
|
$used_menu = true;
|
||||||
|
}
|
||||||
|
$nav_construct = $nav_construct . '><a href="?p=' . $__page . '"><i class="fa fa-circle-o"></i> ' . $__name . '</a></li>';
|
||||||
|
}
|
||||||
|
|
||||||
|
echo '<li class="treeview' . (($used_menu) ? ' menu-open' : '') . '">
|
||||||
|
<a href="#"><i class="fa fa-' . (isset($icons_a[$i]) ? $icons_a[$i] : 'link') . '"></i> <span>' . $_name . '</span>
|
||||||
|
<span class="pull-right-container"><i class="fa fa-angle-left pull-right"></i></span></a>
|
||||||
|
<ul class="treeview-menu" style="' . (($used_menu) ? ' display: block' : ' display: none') . '">';
|
||||||
|
echo $nav_construct;
|
||||||
|
echo '</ul>
|
||||||
|
</li>';
|
||||||
|
}
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = $db->query('SELECT `name`, `page`, `flags` FROM `' . TABLE_PREFIX . 'admin_menu` ORDER BY `ordering`');
|
||||||
|
$menu_db = $query->fetchAll();
|
||||||
|
foreach ($menu_db as $item) {
|
||||||
|
if ($item['flags'] == 0 || hasFlag($item['flags'])) {
|
||||||
|
echo '<li ';
|
||||||
|
if ($page == $item['page']) echo ' class="active"';
|
||||||
|
echo ">";
|
||||||
|
echo '<a href="?p=' . $item['page'] . '"><i class="fa fa-link"></i> <span>' . $item['name'] . '</span></a></li>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
<div class="content-wrapper">
|
||||||
|
<section class="content-header">
|
||||||
|
<h1><?php echo(isset($title) ? $title : ''); ?>
|
||||||
|
<small> - Admin Panel</small>
|
||||||
|
<div class="pull-right">
|
||||||
|
<span class="label label-<?php echo(($status['online']) ? 'success' : 'danger'); ?>"><?php echo $config['lua']['serverName'] ?></span>
|
||||||
|
</div>
|
||||||
|
</h1>
|
||||||
|
</section>
|
||||||
|
<section class="content">
|
||||||
|
<?php echo $content; ?>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer class="main-footer">
|
||||||
|
|
||||||
|
<div class="pull-right hidden-xs">
|
||||||
|
<div id="status">
|
||||||
|
<?php if ($status['online']): ?>
|
||||||
|
<p class="success" style="width: 120px; text-align: center;">Server Online</p>
|
||||||
|
<?php else: ?>
|
||||||
|
<p class="error" style="width: 120px; text-align: center;">Server Offline</p>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php echo base64_decode('UG93ZXJlZCBieSA8YSBocmVmPSJodHRwOi8vbXktYWFjLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPk15QUFDLjwvYT4='); ?>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<aside class="control-sidebar control-sidebar-dark">
|
||||||
|
<ul class="nav nav-tabs nav-justified control-sidebar-tabs">
|
||||||
|
<li class="active"><a href="#control-sidebar-home-tab" data-toggle="tab"><i class="fa fa-home"></i></a></li>
|
||||||
|
<li><a href="#control-sidebar-settings-tab" data-toggle="tab"><i class="fa fa-gears"></i></a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="tab-content">
|
||||||
|
<div class="tab-pane active" id="control-sidebar-home-tab">
|
||||||
|
<h3 class="control-sidebar-heading">Account</h3>
|
||||||
|
<ul class="control-sidebar-menu">
|
||||||
|
<li>
|
||||||
|
<a href="?action=logout">
|
||||||
|
<i class="menu-icon fa fa-sign-out bg-red"></i>
|
||||||
|
<div class="menu-info">
|
||||||
|
<h4 class="control-sidebar-subheading">Log out</h4>
|
||||||
|
<p>This will log you out
|
||||||
|
of <?php echo(USE_ACCOUNT_NAME ? $account_logged->getName() : $account_logged->getId()); ?></p>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<h3 class="control-sidebar-heading">Site</h3>
|
||||||
|
<ul class="control-sidebar-menu">
|
||||||
|
<li>
|
||||||
|
<a href="<?php echo BASE_URL; ?>" target="_blank">
|
||||||
|
<i class="menu-icon fa fa-eye bg-blue"></i>
|
||||||
|
<div class="menu-info">
|
||||||
|
<h4 class="control-sidebar-subheading">Preview</h4>
|
||||||
|
<p>This will open a new tab</p>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane" id="control-sidebar-settings-tab">
|
||||||
|
<form method="post">
|
||||||
|
<h3 class="control-sidebar-heading">Version</h3>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-sidebar-subheading">
|
||||||
|
<?php echo MYAAC_VERSION; ?> (<a href="?p=version">Check for updates</a>)<br/>
|
||||||
|
</label>
|
||||||
|
<label class="control-sidebar-subheading">
|
||||||
|
<p><a href="https://github.com/slawkens/myaac" target="_blank">Github</a></p>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="control-sidebar-bg"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php }
|
||||||
|
if (!$logged && !admin()) {
|
||||||
|
echo $content;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<script src="<?php echo BASE_URL; ?>tools/js/bootstrap.min.js"></script>
|
||||||
|
<script src="<?php echo BASE_URL; ?>tools/js/jquery-ui.min.js"></script>
|
||||||
|
<script src="<?php echo BASE_URL; ?>tools/js/jquery.dataTables.min.js"></script>
|
||||||
|
<script src="<?php echo BASE_URL; ?>tools/js/adminlte.min.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -1,147 +0,0 @@
|
|||||||
*{
|
|
||||||
margin:0;
|
|
||||||
padding:0;
|
|
||||||
}
|
|
||||||
body {
|
|
||||||
font-family: Helvetica;
|
|
||||||
color: #313334;
|
|
||||||
background: /*#f9f9f9 #EEEEEE*/#F7F6F1;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {border: none;}
|
|
||||||
|
|
||||||
a:link {color: #000; text-decoration: none;}
|
|
||||||
a:visited {color: #000; text-decoration: none;}
|
|
||||||
a:focus {color: #000; text-decoration: none;}
|
|
||||||
a:active {color: #000; text-decoration: underline;}
|
|
||||||
a:hover {color: #000; text-decoration: underline;}
|
|
||||||
a.current {font-weight: bold;}
|
|
||||||
|
|
||||||
h5.blue {color: #6b7b95;}
|
|
||||||
h5.red {color: #c17878;}
|
|
||||||
h5.green {color: #78ba91;}
|
|
||||||
h5.purple {color: #a87aad;}
|
|
||||||
|
|
||||||
h1, h2, h3, h4, h5, h6 {color: #313334; font-weight: bold;}
|
|
||||||
.separator {color:#BCE}
|
|
||||||
.margin-left{
|
|
||||||
margin-left:5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.button { background:#eee url(images/button.gif) repeat-x 0 0; border:solid 1px #b1a874; color:#7f7f7f; font-size:11px; padding:2px 6px 2px 6px; cursor:pointer; line-height:14px !important; }
|
|
||||||
.button:hover { color:#333; border-color:#857b42; }
|
|
||||||
|
|
||||||
.field, .button { -moz-border-radius:4px; -webkit-border-radius:4px; }
|
|
||||||
.small-field, .button, .pagging a { -moz-border-radius:3px; -webkit-border-radius:3px; }
|
|
||||||
|
|
||||||
.table th {
|
|
||||||
background-color: #4CAF50;
|
|
||||||
color: white;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.table, .table td, .table th{
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
}
|
|
||||||
|
|
||||||
.table th a:link {color: white; text-decoration: none;}
|
|
||||||
.table th a:link {color: white; text-decoration: none;}
|
|
||||||
.table th a:visited {color: white; text-decoration: none;}
|
|
||||||
.table th a:focus {color: white; text-decoration: none;}
|
|
||||||
.table th a:active {color: white; text-decoration: underline;}
|
|
||||||
.table th a:hover {color: white; text-decoration: underline;}
|
|
||||||
|
|
||||||
.table tr:nth-child(odd) {background-color: #d1d1d1}
|
|
||||||
|
|
||||||
a.ico { color:#9d9c9a; font-size:10px; text-decoration: none; padding:0 0 0 14px; background-repeat:no-repeat; background-position:0 0; }
|
|
||||||
a.ico:hover { color:#333;}
|
|
||||||
|
|
||||||
#container{
|
|
||||||
width:960px;
|
|
||||||
margin-left:auto;
|
|
||||||
margin-right:auto;
|
|
||||||
}
|
|
||||||
#header {
|
|
||||||
/*width: 960px;*/
|
|
||||||
padding-left: auto;
|
|
||||||
padding-right: auto;
|
|
||||||
border-bottom: 1px dotted black;
|
|
||||||
margin-top: 40px;
|
|
||||||
}
|
|
||||||
#header h1 {
|
|
||||||
margin: 0;
|
|
||||||
padding-top: 20px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
#sidebar{
|
|
||||||
background: #FFF;
|
|
||||||
width: 170px;
|
|
||||||
float: left;
|
|
||||||
margin: 10px 0 10px 0;
|
|
||||||
padding: 10px;
|
|
||||||
border: 1px solid #CCC;
|
|
||||||
}
|
|
||||||
#content {
|
|
||||||
width: 740px;
|
|
||||||
float: right;
|
|
||||||
margin: 20px 0 10px 0;
|
|
||||||
padding: 10px;
|
|
||||||
}
|
|
||||||
#footer {
|
|
||||||
margin-top: 20px;
|
|
||||||
border-top: 1px dotted black;
|
|
||||||
text-align: center;
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
/*********************
|
|
||||||
Sidebar
|
|
||||||
*********************/
|
|
||||||
#sidebar ul{
|
|
||||||
list-style:none;
|
|
||||||
line-height:22px;
|
|
||||||
}
|
|
||||||
#sidebar ul li a,#sidebar ul li a:visited{
|
|
||||||
padding-left:19px;
|
|
||||||
text-decoration:none;
|
|
||||||
margin:0 3px;
|
|
||||||
display:block;
|
|
||||||
}
|
|
||||||
#sidebar ul li a:hover{
|
|
||||||
text-decoration:underline;
|
|
||||||
}
|
|
||||||
#sidebar ul li ul{
|
|
||||||
margin-left:10px;
|
|
||||||
}
|
|
||||||
#sidebar h3{
|
|
||||||
padding:2px;
|
|
||||||
font-size:14px;
|
|
||||||
}
|
|
||||||
/*********************
|
|
||||||
Status & version boxes
|
|
||||||
*********************/
|
|
||||||
#status {
|
|
||||||
position: absolute; top: 10px; left: 10px;
|
|
||||||
margin: 0px;
|
|
||||||
float: right;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
#status .success {
|
|
||||||
margin: 0px:
|
|
||||||
}
|
|
||||||
#version {
|
|
||||||
position: absolute; top: 10px; right: 10px;
|
|
||||||
float: right;
|
|
||||||
text-align: right;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
/*********************
|
|
||||||
Infobox
|
|
||||||
*********************/
|
|
||||||
#infobox{
|
|
||||||
border:1px solid #e9e8e3;
|
|
||||||
}
|
|
||||||
#infobox h3{
|
|
||||||
background:#f7f6f1;
|
|
||||||
border-bottom:1px solid #e9e8e3;
|
|
||||||
color:#654322;
|
|
||||||
}
|
|
@@ -1,95 +0,0 @@
|
|||||||
<?php defined('MYAAC') or die('Direct access not allowed!'); ?>
|
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
||||||
<head>
|
|
||||||
<?php echo template_header(true); ?>
|
|
||||||
<title><?php echo $title . $config['title_separator'] . $config['lua']['serverName']; ?> - Powered by MyAAC</title>
|
|
||||||
<link rel="stylesheet" type="text/css" href="<?php echo $template_path; ?>style.css" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<?php if($page != 'tools'): ?>
|
|
||||||
<div id="container">
|
|
||||||
<div id="header">
|
|
||||||
<?php if($logged && admin()): ?>
|
|
||||||
<div id="status">
|
|
||||||
<?php if($status['online']): ?>
|
|
||||||
<p class="success" style="width: 120px; text-align: center;">Status: Online<br/>
|
|
||||||
<?php echo $status['uptimeReadable'] . ', ' . $status['players'] . '/' . $status['playersMax']; ?><br/>
|
|
||||||
<?php echo $config['lua']['ip'] . ' : ' . $config['lua']['loginPort']; ?>
|
|
||||||
</p>
|
|
||||||
<?php else: ?>
|
|
||||||
<p class="error" style="width: 120px; text-align: center;">Status: Offline</p>
|
|
||||||
<?php endif; ?>
|
|
||||||
</div>
|
|
||||||
<div id="version">Version: <?php echo MYAAC_VERSION; ?> (<a id="update" href="?p=version">Check for updates</a>)<br/>
|
|
||||||
Logged in as: <b><?php echo (USE_ACCOUNT_NAME ? $account_logged->getName() : $account_logged->getId()); ?></b><br/>
|
|
||||||
<a href="<?php echo BASE_URL; ?>" target="_blank">Preview</a> <span class="separator">|</span> <a href="?action=logout">Log out<img src="<?php echo BASE_URL; ?>images/icons/logout.png" alt="" title="Log out" /></a>
|
|
||||||
</div>
|
|
||||||
<?php endif; ?>
|
|
||||||
<h1><?php echo $config['lua']['serverName'] . ' - ' . $title; ?> - Admin Panel</h1>
|
|
||||||
</div>
|
|
||||||
<div id="wrapper">
|
|
||||||
<?php
|
|
||||||
if($logged && admin()) {
|
|
||||||
?>
|
|
||||||
<div id="sidebar">
|
|
||||||
<ul>
|
|
||||||
<?php
|
|
||||||
$menus = array(
|
|
||||||
'Dashboard' => 'dashboard',
|
|
||||||
'Mailer' => 'mailer',
|
|
||||||
'Pages' => 'pages',
|
|
||||||
'Plugins' => 'plugins',
|
|
||||||
'Statistics' => 'statistics',
|
|
||||||
'Visitors' => 'visitors',
|
|
||||||
'Players' => 'players',
|
|
||||||
'Tools' => array(
|
|
||||||
'phpinfo' => 'phpinfo'
|
|
||||||
),
|
|
||||||
'Notepad' => 'notepad',
|
|
||||||
'Logs' => 'logs'
|
|
||||||
);
|
|
||||||
|
|
||||||
$i = 0;
|
|
||||||
foreach($menus as $_name => $_page) {
|
|
||||||
//echo '<a ' . ($page == $_page ? ' class="current"' : '') . 'href="?p=' . $_page . '">' . $_name . '</a>';
|
|
||||||
echo '<li><h3>';
|
|
||||||
$has_child = is_array($_page);
|
|
||||||
if(!$has_child) {
|
|
||||||
echo '<a href="?p=' . $_page . '">';
|
|
||||||
if($page == $_page) echo '<u>';
|
|
||||||
echo $_name;
|
|
||||||
if($page == $_page) echo '</u>';
|
|
||||||
echo '</a>';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
echo $_name;
|
|
||||||
|
|
||||||
echo '</h3>';
|
|
||||||
if($has_child) {
|
|
||||||
echo '<ul>';
|
|
||||||
foreach($_page as $__name => $__page)
|
|
||||||
echo '<li><a href="?p=' . $__page . '">';
|
|
||||||
if($page == $__page) echo '<u>';
|
|
||||||
echo $__name;
|
|
||||||
if($page == $__page) echo '</u>';
|
|
||||||
echo '</a></li>';
|
|
||||||
echo '</ul>';
|
|
||||||
}
|
|
||||||
echo '</li>';
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<?php
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
<div id="content"><?php echo $content; ?></div>
|
|
||||||
</div>
|
|
||||||
<div id="footer">
|
|
||||||
Powered by <a href="http://my-aac.org" target="_blank">MyAAC</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<?php endif; ?>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@@ -1,281 +0,0 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<title>Dashboard - Admin Template</title>
|
|
||||||
<link rel="stylesheet" type="text/css" href="css/theme2.css" />
|
|
||||||
<link rel="stylesheet" type="text/css" href="css/style.css" />
|
|
||||||
<script>
|
|
||||||
var StyleFile = "theme" + document.cookie.charAt(6) + ".css";
|
|
||||||
document.writeln('<link rel="stylesheet" type="text/css" href="css/' + StyleFile + '">');
|
|
||||||
</script>
|
|
||||||
<!--[if IE]>
|
|
||||||
<link rel="stylesheet" type="text/css" href="css/ie-sucks.css" />
|
|
||||||
<![endif]-->
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div id="container">
|
|
||||||
<div id="header">
|
|
||||||
<h2>My eCommerce Admin area</h2>
|
|
||||||
<div id="topmenu">
|
|
||||||
<ul>
|
|
||||||
<li class="current"><a href="index.html">Dashboard</a></li>
|
|
||||||
<li><a href="#">Orders</a></li>
|
|
||||||
<li><a href="users.html">Users</a></li>
|
|
||||||
<li><a href="#">Manage</a></li>
|
|
||||||
<li><a href="#">CMS</a></li>
|
|
||||||
<li><a href="#">Statistics</a></li>
|
|
||||||
<li><a href="#">Settings</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="top-panel">
|
|
||||||
<div id="panel">
|
|
||||||
<ul>
|
|
||||||
<li><a href="#" class="report">Sales Report</a></li>
|
|
||||||
<li><a href="#" class="report_seo">SEO Report</a></li>
|
|
||||||
<li><a href="#" class="search">Search</a></li>
|
|
||||||
<li><a href="#" class="feed">RSS Feed</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="wrapper">
|
|
||||||
<div id="content">
|
|
||||||
<div id="rightnow">
|
|
||||||
<h3 class="reallynow">
|
|
||||||
<span>Right Now</span>
|
|
||||||
<a href="#" class="add">Add New Product</a>
|
|
||||||
<a href="#" class="app_add">Some Action</a>
|
|
||||||
<br />
|
|
||||||
</h3>
|
|
||||||
<p class="youhave">You have <a href="#">19 new orders</a>, <a href="#">12 new users</a> and <a href="#">5 new reviews</a>, today you made <a href="#">$1523.63 in sales</a> and a total of <strong>$328.24 profit </strong>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div id="infowrap">
|
|
||||||
<div id="infobox">
|
|
||||||
<h3>Sales for July</h3>
|
|
||||||
<p><img src="img/graph.jpg" width="360" height="266" /></p>
|
|
||||||
</div>
|
|
||||||
<div id="infobox" class="margin-left">
|
|
||||||
<h3>Traffic for July</h3>
|
|
||||||
<p><img src="img/graph2.jpg" alt="a" width="359" height="266" /></p>
|
|
||||||
</div>
|
|
||||||
<div id="infobox">
|
|
||||||
<h3>Last 5 Orders</h3>
|
|
||||||
<table>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Customer</th>
|
|
||||||
<th>Items</th>
|
|
||||||
<th>Grand Total</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Jennifer Kyrnin</a></td>
|
|
||||||
<td>1</td>
|
|
||||||
<td>14.95 €</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Mark Kyrnin</a></td>
|
|
||||||
<td>2</td>
|
|
||||||
<td>34.27 €</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Virgílio Cezar</a></td>
|
|
||||||
<td>2</td>
|
|
||||||
<td>61.39 €</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Todd Simonides</a></td>
|
|
||||||
<td>5</td>
|
|
||||||
<td>1472.56 €</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Carol Elihu</a></td>
|
|
||||||
<td>1</td>
|
|
||||||
<td>9.95 €</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<div id="infobox" class="margin-left">
|
|
||||||
<h3>Bestsellers</h3>
|
|
||||||
<table>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Product Name</th>
|
|
||||||
<th>Price</th>
|
|
||||||
<th>Orders</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Apple iPhone 3G 8GB</a></td>
|
|
||||||
<td>199.00 €</td>
|
|
||||||
<td>24</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Fuji FinePix S5800</a></td>
|
|
||||||
<td>365.24 €</td>
|
|
||||||
<td>19</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Canon PIXMA MP140</a></td>
|
|
||||||
<td>59.50 €</td>
|
|
||||||
<td>12</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Apple iPhone 3G 16GB</a></td>
|
|
||||||
<td>199.00 €</td>
|
|
||||||
<td>10</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Prenosnik HP 530 1,6GHz</a></td>
|
|
||||||
<td>499.00 €</td>
|
|
||||||
<td>6</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<div id="infobox">
|
|
||||||
<h3>New Customers</h3>
|
|
||||||
<table>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Customer</th>
|
|
||||||
<th>Orders</th>
|
|
||||||
<th>Average</th>
|
|
||||||
<th>Total</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Jennifer Kyrnin</a></td>
|
|
||||||
<td>1</td>
|
|
||||||
<td>5.6€</td>
|
|
||||||
<td>14.95 €</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Mark Kyrnin</a></td>
|
|
||||||
<td>2</td>
|
|
||||||
<td>14.97€</td>
|
|
||||||
<td>34.27 €</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Virgílio Cezar</a></td>
|
|
||||||
<td>2</td>
|
|
||||||
<td>15.31€</td>
|
|
||||||
<td>61.39 €</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Todd Simonides</a></td>
|
|
||||||
<td>5</td>
|
|
||||||
<td>502.61€</td>
|
|
||||||
<td>1472.56 €</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Carol Elihu</a></td>
|
|
||||||
<td>1</td>
|
|
||||||
<td>5.1€</td>
|
|
||||||
<td>9.95 €</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<div id="infobox" class="margin-left">
|
|
||||||
<h3>Last 5 Reviews</h3>
|
|
||||||
<table>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Reviewer</th>
|
|
||||||
<th>Product</th>
|
|
||||||
<th>Action</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Jennifer Kyrnin</a></td>
|
|
||||||
<td><a href="#">Apple iPhone 3G 8GB</a></td>
|
|
||||||
<td><a href="#"><img src="img/icons/page_white_link.png" /></a><a href="#"><img src="img/icons/page_white_edit.png" /></a><a href="#"><img src="img/icons/page_white_delete.png" /></a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Mark Kyrnin</a></td>
|
|
||||||
<td><a href="#">Prenosnik HP 530 1,6GHz</a></td>
|
|
||||||
<td><a href="#"><img src="img/icons/page_white_link.png" /></a><a href="#"><img src="img/icons/page_white_edit.png" /></a><a href="#"><img src="img/icons/page_white_delete.png" /></a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Virgílio Cezar</a></td>
|
|
||||||
<td><a href="#">Fuji FinePix S5800</a></td>
|
|
||||||
<td><a href="#"><img src="img/icons/page_white_link.png" /></a><a href="#"><img src="img/icons/page_white_edit.png" /></a><a href="#"><img src="img/icons/page_white_delete.png" /></a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Todd Simonides</a></td>
|
|
||||||
<td><a href="#">Canon PIXMA MP140</a></td>
|
|
||||||
<td><a href="#"><img src="img/icons/page_white_link.png" /></a><a href="#"><img src="img/icons/page_white_edit.png" /></a><a href="#"><img src="img/icons/page_white_delete.png" /></a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><a href="#">Carol Elihu</a></td>
|
|
||||||
<td><a href="#">Prenosnik HP 530 1,6GHz</a></td>
|
|
||||||
<td><a href="#"><img src="img/icons/page_white_link.png" /></a><a href="#"><img src="img/icons/page_white_edit.png" /></a><a href="#"><img src="img/icons/page_white_delete.png" /></a></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="sidebar">
|
|
||||||
<ul>
|
|
||||||
<li><h3><a href="#" class="house">Dashboard</a></h3>
|
|
||||||
<ul>
|
|
||||||
<li><a href="#" class="report">Sales Report</a></li>
|
|
||||||
<li><a href="#" class="report_seo">SEO Report</a></li>
|
|
||||||
<li><a href="#" class="search">Search</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li><h3><a href="#" class="folder_table">Orders</a></h3>
|
|
||||||
<ul>
|
|
||||||
<li><a href="#" class="addorder">New order</a></li>
|
|
||||||
<li><a href="#" class="shipping">Shipments</a></li>
|
|
||||||
<li><a href="#" class="invoices">Invoices</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li><h3><a href="#" class="manage">Manage</a></h3>
|
|
||||||
<ul>
|
|
||||||
<li><a href="#" class="manage_page">Pages</a></li>
|
|
||||||
<li><a href="#" class="cart">Products</a></li>
|
|
||||||
<li><a href="#" class="folder">Product categories</a></li>
|
|
||||||
<li><a href="#" class="promotions">Promotions</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li><h3><a href="#" class="user">Users</a></h3>
|
|
||||||
<ul>
|
|
||||||
<li><a href="#" class="useradd">Add user</a></li>
|
|
||||||
<li><a href="#" class="group">User groups</a></li>
|
|
||||||
<li><a href="#" class="search">Find user</a></li>
|
|
||||||
<li><a href="#" class="online">Users online</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="footer">
|
|
||||||
<div id="credits">
|
|
||||||
Template by <a href="http://www.bloganje.com">Bloganje</a>
|
|
||||||
</div>
|
|
||||||
<div id="styleswitcher">
|
|
||||||
<ul>
|
|
||||||
<li><a href="javascript: document.cookie='theme='; window.location.reload();" title="Default" id="defswitch">d</a></li>
|
|
||||||
<li><a href="javascript: document.cookie='theme=1'; window.location.reload();" title="Blue" id="blueswitch">b</a></li>
|
|
||||||
<li><a href="javascript: document.cookie='theme=2'; window.location.reload();" title="Green" id="greenswitch">g</a></li>
|
|
||||||
<li><a href="javascript: document.cookie='theme=3'; window.location.reload();" title="Brown" id="brownswitch">b</a></li>
|
|
||||||
<li><a href="javascript: document.cookie='theme=4'; window.location.reload();" title="Mix" id="mixswitch">m</a></li>
|
|
||||||
<li><a href="javascript: document.cookie='theme=5'; window.location.reload();" title="Mix" id="defswitch">m</a></li>
|
|
||||||
</ul>
|
|
||||||
</div><br />
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@@ -1,100 +0,0 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<title>Dashboard - Admin Template</title>
|
|
||||||
<link rel="stylesheet" type="text/css" href="css/theme.css" />
|
|
||||||
<link rel="stylesheet" type="text/css" href="css/style.css" />
|
|
||||||
<script>
|
|
||||||
var StyleFile = "theme" + document.cookie.charAt(6) + ".css";
|
|
||||||
document.writeln('<link rel="stylesheet" type="text/css" href="css/' + StyleFile + '">');
|
|
||||||
</script>
|
|
||||||
<!--[if IE]>
|
|
||||||
<link rel="stylesheet" type="text/css" href="css/ie-sucks.css" />
|
|
||||||
<![endif]-->
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div id="container">
|
|
||||||
<div id="header">
|
|
||||||
<h2>My eCommerce Admin area</h2>
|
|
||||||
<div id="topmenu">
|
|
||||||
<ul>
|
|
||||||
<li class="current"><a href="index.html">Dashboard</a></li>
|
|
||||||
<li><a href="#">Orders</a></li>
|
|
||||||
<li><a href="users.html">Users</a></li>
|
|
||||||
<li><a href="#">Manage</a></li>
|
|
||||||
<li><a href="#">CMS</a></li>
|
|
||||||
<li><a href="#">Statistics</a></li>
|
|
||||||
<li><a href="#">Settings</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="top-panel">
|
|
||||||
<div id="panel">
|
|
||||||
<ul>
|
|
||||||
<li><a href="#" class="report">Sales Report</a></li>
|
|
||||||
<li><a href="#" class="report_seo">SEO Report</a></li>
|
|
||||||
<li><a href="#" class="search">Search</a></li>
|
|
||||||
<li><a href="#" class="feed">RSS Feed</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="wrapper">
|
|
||||||
<div id="content">
|
|
||||||
<p> </p>
|
|
||||||
<p> </p>
|
|
||||||
</div>
|
|
||||||
<div id="sidebar">
|
|
||||||
<ul>
|
|
||||||
<li><h3><a href="#" class="house">Dashboard</a></h3>
|
|
||||||
<ul>
|
|
||||||
<li><a href="#" class="report">Sales Report</a></li>
|
|
||||||
<li><a href="#" class="report_seo">SEO Report</a></li>
|
|
||||||
<li><a href="#" class="search">Search</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li><h3><a href="#" class="folder_table">Orders</a></h3>
|
|
||||||
<ul>
|
|
||||||
<li><a href="#" class="addorder">New order</a></li>
|
|
||||||
<li><a href="#" class="shipping">Shipments</a></li>
|
|
||||||
<li><a href="#" class="invoices">Invoices</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li><h3><a href="#" class="manage">Manage</a></h3>
|
|
||||||
<ul>
|
|
||||||
<li><a href="#" class="manage_page">Pages</a></li>
|
|
||||||
<li><a href="#" class="cart">Products</a></li>
|
|
||||||
<li><a href="#" class="folder">Product categories</a></li>
|
|
||||||
<li><a href="#" class="promotions">Promotions</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li><h3><a href="#" class="user">Users</a></h3>
|
|
||||||
<ul>
|
|
||||||
<li><a href="#" class="useradd">Add user</a></li>
|
|
||||||
<li><a href="#" class="group">User groups</a></li>
|
|
||||||
<li><a href="#" class="search">Find user</a></li>
|
|
||||||
<li><a href="#" class="online">Users online</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="footer">
|
|
||||||
<div id="credits">
|
|
||||||
Template by <a href="http://www.bloganje.com">Bloganje</a>
|
|
||||||
</div>
|
|
||||||
<div id="styleswitcher">
|
|
||||||
<ul>
|
|
||||||
<li><a href="javascript: document.cookie='theme='; window.location.reload();" title="Default" id="defswitch">d</a></li>
|
|
||||||
<li><a href="javascript: document.cookie='theme=1'; window.location.reload();" title="Blue" id="blueswitch">b</a></li>
|
|
||||||
<li><a href="javascript: document.cookie='theme=2'; window.location.reload();" title="Green" id="greenswitch">g</a></li>
|
|
||||||
<li><a href="javascript: document.cookie='theme=3'; window.location.reload();" title="Brown" id="brownswitch">b</a></li>
|
|
||||||
<li><a href="javascript: document.cookie='theme=4'; window.location.reload();" title="Mix" id="mixswitch">m</a></li>
|
|
||||||
</ul>
|
|
||||||
</div><br />
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@@ -1,121 +0,0 @@
|
|||||||
body{
|
|
||||||
background:#f7f6f0 url(../img/bg.jpg) repeat-x top;
|
|
||||||
color: #202020;
|
|
||||||
}
|
|
||||||
a, a:visited{
|
|
||||||
color:#993300;
|
|
||||||
}
|
|
||||||
input{
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
}
|
|
||||||
select{
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
}
|
|
||||||
#header h2{
|
|
||||||
color:#FFF;
|
|
||||||
}
|
|
||||||
#content{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
#sidebar{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
#sidebar h3{
|
|
||||||
background:#f7f6f0;
|
|
||||||
border-bottom:1px solid #e8e7e1;
|
|
||||||
}
|
|
||||||
#topmenu a,#topmenu a:visited{
|
|
||||||
color:#f7f6f0;
|
|
||||||
background:#cc3300;
|
|
||||||
}
|
|
||||||
#topmenu a:hover{
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
#topmenu .current a, #topmenu .current a:hover, #topmenu .current a:visited{
|
|
||||||
color:#993400;
|
|
||||||
background: #FFF url(../img/bg_menu_red.jpg) repeat-x top;
|
|
||||||
border-left: #FFF 1px solid;
|
|
||||||
border-right: #FFF 1px solid;
|
|
||||||
}
|
|
||||||
#top-panel{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
table{
|
|
||||||
background:none;
|
|
||||||
}
|
|
||||||
td, th{
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
}
|
|
||||||
thead{
|
|
||||||
background:#f7f6f0;
|
|
||||||
}
|
|
||||||
#styleswitcher{
|
|
||||||
background:#FFFFFF;
|
|
||||||
}
|
|
||||||
#footer{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
#box{
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
}
|
|
||||||
#box h3{
|
|
||||||
background:#f7f6f0;
|
|
||||||
border-bottom:1px solid #e8e7e1;
|
|
||||||
color:#993300;
|
|
||||||
}
|
|
||||||
/***************
|
|
||||||
Forms
|
|
||||||
***************/
|
|
||||||
form#form fieldset {
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
}
|
|
||||||
form#form legend {
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
background:#fff url(../img/form_red.gif) repeat-x center left;
|
|
||||||
color:#993300;
|
|
||||||
}
|
|
||||||
form#form input {
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
background:#fff url(../img/form_red.gif) repeat-x top left;
|
|
||||||
}
|
|
||||||
form#form textarea {
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
background:#fff url(../img/form_red.gif) repeat-x bottom left;
|
|
||||||
}
|
|
||||||
form#form option {
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
form#form optgroup {
|
|
||||||
background:#e8e7e1;
|
|
||||||
}
|
|
||||||
form#form optgroup option {
|
|
||||||
|
|
||||||
}
|
|
||||||
form#form #button1, form#form #button2 {
|
|
||||||
color:#c00;
|
|
||||||
}
|
|
||||||
form#form #button1:hover, form#form #button2:hover {
|
|
||||||
color:#000;
|
|
||||||
}
|
|
||||||
/***************
|
|
||||||
Home
|
|
||||||
***************/
|
|
||||||
#infobox{
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
}
|
|
||||||
#infobox h3{
|
|
||||||
background:#f7f6f0;
|
|
||||||
border-bottom:1px solid #e8e7e1;
|
|
||||||
color:#993300;
|
|
||||||
}
|
|
||||||
#rightnow {
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
}
|
|
||||||
#rightnow .reallynow {
|
|
||||||
background:#f7f6f0;
|
|
||||||
color:#993300;
|
|
||||||
}
|
|
||||||
#rightnow h3{
|
|
||||||
background:#f7f6f0;
|
|
||||||
border-bottom:1px solid #e8e7e1;
|
|
||||||
}
|
|
@@ -1,21 +0,0 @@
|
|||||||
#content{
|
|
||||||
width:740px;
|
|
||||||
}
|
|
||||||
#topmenu{
|
|
||||||
margin-top:26px;
|
|
||||||
}
|
|
||||||
#sidebar{
|
|
||||||
width:160px;
|
|
||||||
}
|
|
||||||
#sidebar ul{
|
|
||||||
width:150px;
|
|
||||||
}
|
|
||||||
#sidebar ul li ul{
|
|
||||||
width:140px;
|
|
||||||
}
|
|
||||||
#sidebar h3{
|
|
||||||
margin-bottom:5px;
|
|
||||||
}
|
|
||||||
#rightnow .reallynow a {
|
|
||||||
padding:0 0 0 10px;
|
|
||||||
}
|
|
@@ -1,68 +0,0 @@
|
|||||||
<public:component>
|
|
||||||
<public:attach event="onpropertychange" onevent="doFix()" />
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
|
|
||||||
// IE5.5+ PNG Alpha Fix v1.0RC4
|
|
||||||
// (c) 2004-2005 Angus Turnbull http://www.twinhelix.com
|
|
||||||
|
|
||||||
// This is licensed under the CC-GNU LGPL, version 2.1 or later.
|
|
||||||
// For details, see: http://creativecommons.org/licenses/LGPL/2.1/
|
|
||||||
|
|
||||||
|
|
||||||
// This must be a path to a blank image. That's all the configuration you need.
|
|
||||||
if (typeof blankImg == 'undefined') var blankImg = 'blank.gif';
|
|
||||||
|
|
||||||
|
|
||||||
var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
|
|
||||||
|
|
||||||
function filt(s, m)
|
|
||||||
{
|
|
||||||
if (filters[f])
|
|
||||||
{
|
|
||||||
filters[f].enabled = s ? true : false;
|
|
||||||
if (s) with (filters[f]) { src = s; sizingMethod = m }
|
|
||||||
}
|
|
||||||
else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
|
|
||||||
}
|
|
||||||
|
|
||||||
function doFix()
|
|
||||||
{
|
|
||||||
// Assume IE7 is OK.
|
|
||||||
if (!/MSIE (5\.5|6\.)/.test(navigator.userAgent) ||
|
|
||||||
(event && !/(background|src)/.test(event.propertyName))) return;
|
|
||||||
|
|
||||||
var bgImg = currentStyle.backgroundImage || style.backgroundImage;
|
|
||||||
|
|
||||||
if (tagName == 'IMG')
|
|
||||||
{
|
|
||||||
if ((/\.png$/i).test(src))
|
|
||||||
{
|
|
||||||
if (currentStyle.width == 'auto' && currentStyle.height == 'auto')
|
|
||||||
style.width = offsetWidth + 'px';
|
|
||||||
filt(src, 'scale');
|
|
||||||
src = blankImg;
|
|
||||||
}
|
|
||||||
else if (src.indexOf(blankImg) < 0) filt();
|
|
||||||
}
|
|
||||||
else if (bgImg && bgImg != 'none')
|
|
||||||
{
|
|
||||||
if (bgImg.match(/^url[("']+(.*\.png)[)"']+$/i))
|
|
||||||
{
|
|
||||||
var s = RegExp.$1;
|
|
||||||
if (currentStyle.width == 'auto' && currentStyle.height == 'auto')
|
|
||||||
style.width = offsetWidth + 'px';
|
|
||||||
style.backgroundImage = 'none';
|
|
||||||
filt(s, 'crop');
|
|
||||||
// IE link fix.
|
|
||||||
for (var n = 0; n < childNodes.length; n++)
|
|
||||||
if (childNodes[n].style) childNodes[n].style.position = 'relative';
|
|
||||||
}
|
|
||||||
else filt();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
doFix();
|
|
||||||
|
|
||||||
</script>
|
|
||||||
</public:component>
|
|
@@ -1,397 +0,0 @@
|
|||||||
/*********************
|
|
||||||
HTML Elements
|
|
||||||
*********************/
|
|
||||||
*{
|
|
||||||
margin:0;
|
|
||||||
padding:0;
|
|
||||||
}
|
|
||||||
img, div,a { behavior: url(css/iepngfix.htc) }
|
|
||||||
body{
|
|
||||||
font-size: 12px;
|
|
||||||
font-family: Arial, Tahoma, Verdana;
|
|
||||||
}
|
|
||||||
a, a:visited{
|
|
||||||
text-decoration:none;
|
|
||||||
}
|
|
||||||
img{
|
|
||||||
border:0;
|
|
||||||
margin:1px;
|
|
||||||
}
|
|
||||||
p{
|
|
||||||
padding:3px;
|
|
||||||
}
|
|
||||||
h2{
|
|
||||||
|
|
||||||
}
|
|
||||||
input{
|
|
||||||
padding:2px;
|
|
||||||
}
|
|
||||||
select{
|
|
||||||
padding:2px;
|
|
||||||
}
|
|
||||||
/*********************
|
|
||||||
Status
|
|
||||||
*********************/
|
|
||||||
#status {
|
|
||||||
position: absolute; top: 10px; left: 10px;
|
|
||||||
margin: 0px;
|
|
||||||
float: right;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
#status .success {
|
|
||||||
margin: 0px:
|
|
||||||
}
|
|
||||||
#version {
|
|
||||||
position: absolute; top: 10px; right: 10px;
|
|
||||||
float: right;
|
|
||||||
text-align: right;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
/*********************
|
|
||||||
Structure
|
|
||||||
*********************/
|
|
||||||
#container{
|
|
||||||
width:960px;
|
|
||||||
margin-left:auto;
|
|
||||||
margin-right:auto;
|
|
||||||
}
|
|
||||||
#header{
|
|
||||||
width:960px;
|
|
||||||
}
|
|
||||||
#header h2{
|
|
||||||
margin-top:20px;
|
|
||||||
}
|
|
||||||
#content{
|
|
||||||
width:740px;
|
|
||||||
float:left;
|
|
||||||
margin:10px 0 10px 0;
|
|
||||||
padding:10px;
|
|
||||||
}
|
|
||||||
#sidebar{
|
|
||||||
background:#FFF;
|
|
||||||
width:170px;
|
|
||||||
float:right;
|
|
||||||
margin:10px 0 10px 0;
|
|
||||||
padding:10px;
|
|
||||||
}
|
|
||||||
#footer{
|
|
||||||
clear:both;
|
|
||||||
padding:5px;
|
|
||||||
margin-top:10px;
|
|
||||||
}
|
|
||||||
#box h3{
|
|
||||||
padding:5px;
|
|
||||||
font-size:14px;
|
|
||||||
}
|
|
||||||
/*********************
|
|
||||||
Sidebar
|
|
||||||
*********************/
|
|
||||||
#sidebar ul{
|
|
||||||
list-style:none;
|
|
||||||
line-height:22px;
|
|
||||||
}
|
|
||||||
#sidebar ul li a,#sidebar ul li a:visited{
|
|
||||||
padding-left:19px;
|
|
||||||
text-decoration:none;
|
|
||||||
margin:0 3px;
|
|
||||||
display:block;
|
|
||||||
}
|
|
||||||
#sidebar ul li a:hover{
|
|
||||||
text-decoration:underline;
|
|
||||||
}
|
|
||||||
#sidebar ul li ul{
|
|
||||||
margin-left:10px;
|
|
||||||
}
|
|
||||||
#sidebar h3{
|
|
||||||
padding:2px;
|
|
||||||
font-size:14px;
|
|
||||||
}
|
|
||||||
/*********************
|
|
||||||
TopMenu, Top-Panel
|
|
||||||
*********************/
|
|
||||||
#topmenu{
|
|
||||||
margin-top:33px;
|
|
||||||
width:700px;
|
|
||||||
float:left;
|
|
||||||
voice-family:inherit;
|
|
||||||
}
|
|
||||||
#topmenu ul{
|
|
||||||
list-style:none;
|
|
||||||
line-height:25px;
|
|
||||||
}
|
|
||||||
#topmenu li{
|
|
||||||
display:inline;
|
|
||||||
}
|
|
||||||
#topmenu a,#topmenu a:visited{
|
|
||||||
padding:5px 12px 5px 12px;
|
|
||||||
text-decoration:none;
|
|
||||||
}
|
|
||||||
#topmenu .current a, #topmenu .current a:hover, #topmenu .current a:visited{
|
|
||||||
padding:5px 12px 5px 12px;
|
|
||||||
font-weight:bold;
|
|
||||||
|
|
||||||
}
|
|
||||||
#top-panel{
|
|
||||||
background:#FFF;
|
|
||||||
padding:5px;
|
|
||||||
height:20px;
|
|
||||||
float:left;
|
|
||||||
width:950px;
|
|
||||||
}
|
|
||||||
#top-panel ul{
|
|
||||||
list-style:none;
|
|
||||||
}
|
|
||||||
#top-panel ul li{
|
|
||||||
display:inline;
|
|
||||||
line-height:20px;
|
|
||||||
}
|
|
||||||
#top-panel ul li a{
|
|
||||||
padding-left:19px;
|
|
||||||
text-decoration:none;
|
|
||||||
margin:0 3px;
|
|
||||||
display:inline-block;
|
|
||||||
}
|
|
||||||
#top-panel a:hover{
|
|
||||||
text-decoration:underline;
|
|
||||||
}
|
|
||||||
/*********************
|
|
||||||
Other
|
|
||||||
*********************/
|
|
||||||
.a-right{text-align:right;}
|
|
||||||
.a-left{text-align:left;}
|
|
||||||
.a-center{text-align:center;}
|
|
||||||
#pager{
|
|
||||||
margin:5px;
|
|
||||||
height:25px;
|
|
||||||
}
|
|
||||||
#styleswitcher{
|
|
||||||
float:right;
|
|
||||||
}
|
|
||||||
#styleswitcher ul{
|
|
||||||
list-style:none;
|
|
||||||
line-height:10px;
|
|
||||||
}
|
|
||||||
#styleswitcher li{
|
|
||||||
height:12px;
|
|
||||||
display:inline;
|
|
||||||
}
|
|
||||||
#footer ul {
|
|
||||||
list-style:none;
|
|
||||||
}
|
|
||||||
#footer li {
|
|
||||||
display:inline;
|
|
||||||
}
|
|
||||||
a#defswitch {
|
|
||||||
width:15px;
|
|
||||||
height:10px;
|
|
||||||
margin: 3px 0 3px 0;
|
|
||||||
background-color:#bd3f09;
|
|
||||||
font-size: 8px;
|
|
||||||
color:#bd3f09;
|
|
||||||
display:inline-block;
|
|
||||||
}
|
|
||||||
a#blueswitch {
|
|
||||||
width:15px;
|
|
||||||
height:10px;
|
|
||||||
margin: 3px 0 3px 0;
|
|
||||||
background-color:#375b91;
|
|
||||||
font-size: 8px;
|
|
||||||
color:#375b91;
|
|
||||||
display:inline-block;
|
|
||||||
}
|
|
||||||
a#greenswitch {
|
|
||||||
width:15px;
|
|
||||||
height:10px;
|
|
||||||
margin: 3px 0 3px 0;
|
|
||||||
background-color:#d0e0b8;
|
|
||||||
font-size: 8px;
|
|
||||||
color:#d0e0b8;
|
|
||||||
display:inline-block;
|
|
||||||
}
|
|
||||||
a#brownswitch {
|
|
||||||
width:15px;
|
|
||||||
height:10px;
|
|
||||||
margin: 3px 0 3px 0;
|
|
||||||
background-color:#654322;
|
|
||||||
font-size: 8px;
|
|
||||||
color:#654322;
|
|
||||||
display:inline-block;
|
|
||||||
}
|
|
||||||
a#mixswitch {
|
|
||||||
width:15px;
|
|
||||||
height:10px;
|
|
||||||
margin: 3px 0 3px 0;
|
|
||||||
background-color:#294145;
|
|
||||||
font-size: 8px;
|
|
||||||
color:#294145;
|
|
||||||
display:inline-block;
|
|
||||||
}
|
|
||||||
#credits{
|
|
||||||
clear:both;
|
|
||||||
width:250px;
|
|
||||||
float:left;
|
|
||||||
}
|
|
||||||
/*********************
|
|
||||||
Tables
|
|
||||||
*********************/
|
|
||||||
table{
|
|
||||||
margin:5px;
|
|
||||||
border-collapse: collapse;
|
|
||||||
table-layout:automatic;
|
|
||||||
width:98%;
|
|
||||||
}
|
|
||||||
td, th{
|
|
||||||
padding: 2px;
|
|
||||||
}
|
|
||||||
thead{
|
|
||||||
|
|
||||||
}
|
|
||||||
/*********************
|
|
||||||
Home
|
|
||||||
*********************/
|
|
||||||
#infowrap li{
|
|
||||||
display:inline:
|
|
||||||
}
|
|
||||||
#infobox{
|
|
||||||
width:365px;
|
|
||||||
float:left;
|
|
||||||
margin-top:10px;
|
|
||||||
}
|
|
||||||
#infobox h3{
|
|
||||||
padding:5px;
|
|
||||||
font-size:14px;
|
|
||||||
}
|
|
||||||
.margin-left{
|
|
||||||
margin-left:5px;
|
|
||||||
}
|
|
||||||
#rightnow .reallynow {
|
|
||||||
padding: 5px;
|
|
||||||
font-size:14px;
|
|
||||||
}
|
|
||||||
#rightnow h3{
|
|
||||||
padding:2px;
|
|
||||||
padding: 0 10px;
|
|
||||||
font-size:14px;
|
|
||||||
}
|
|
||||||
#rightnow .reallynow span {
|
|
||||||
display: block;
|
|
||||||
text-align: left;
|
|
||||||
float: left;
|
|
||||||
padding:0 2px;
|
|
||||||
font-size:14px
|
|
||||||
}
|
|
||||||
#rightnow .reallynow a {
|
|
||||||
text-decoration:none;
|
|
||||||
display: block;
|
|
||||||
text-align: right;
|
|
||||||
float: right;
|
|
||||||
padding:0 0 0 18px;
|
|
||||||
margin-left:4px;
|
|
||||||
font-weight:normal;
|
|
||||||
font-size:12px;
|
|
||||||
}
|
|
||||||
#rightnow .reallynow a:hover{
|
|
||||||
text-decoration:underline;
|
|
||||||
}
|
|
||||||
#rightnow .youhave {
|
|
||||||
font-size: 12px;
|
|
||||||
padding: 10px;
|
|
||||||
}
|
|
||||||
#rightnow a {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
/*********************
|
|
||||||
Forms
|
|
||||||
*********************/
|
|
||||||
form{
|
|
||||||
padding:10px;
|
|
||||||
margin:0 auto;
|
|
||||||
}
|
|
||||||
form#form fieldset {
|
|
||||||
display:block;
|
|
||||||
padding:5px 10px 5px 10px;
|
|
||||||
line-height:20px;
|
|
||||||
margin-bottom:10px;
|
|
||||||
}
|
|
||||||
form#form legend {
|
|
||||||
font-size:12px;
|
|
||||||
font-weight:bold;
|
|
||||||
margin-bottom:5px;
|
|
||||||
padding:3px;
|
|
||||||
width:254px;
|
|
||||||
}
|
|
||||||
form#form label {
|
|
||||||
clear:left;
|
|
||||||
display:block;
|
|
||||||
float:left;
|
|
||||||
width:100px;
|
|
||||||
text-align:right;
|
|
||||||
padding-right:10px;
|
|
||||||
margin-bottom:5px;
|
|
||||||
}
|
|
||||||
form#form input {
|
|
||||||
padding:3px;
|
|
||||||
margin-bottom:5px;
|
|
||||||
}
|
|
||||||
form#form select {
|
|
||||||
margin-left:5px;
|
|
||||||
}
|
|
||||||
form#form textarea {
|
|
||||||
width:410px;
|
|
||||||
height:200px;
|
|
||||||
padding:5px;
|
|
||||||
overflow:auto;
|
|
||||||
}
|
|
||||||
form#form option {
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
form#form optgroup option {
|
|
||||||
|
|
||||||
}
|
|
||||||
form#form #button1, form#form #button2 {
|
|
||||||
padding-right:5px;
|
|
||||||
cursor:pointer;
|
|
||||||
width:205px;
|
|
||||||
margin-left:8px;
|
|
||||||
font-weight:bold;
|
|
||||||
}
|
|
||||||
form#form #button1:hover, form#form #button2:hover {
|
|
||||||
background-position:center left;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************
|
|
||||||
Icons
|
|
||||||
*********************/
|
|
||||||
.icon{
|
|
||||||
padding-left:19px;
|
|
||||||
text-decoration:none;
|
|
||||||
height:20px;
|
|
||||||
font-size:12x;
|
|
||||||
margin:0 3px;
|
|
||||||
display:inline-block;
|
|
||||||
line-height:20px;
|
|
||||||
}
|
|
||||||
.user{background:transparent url(../img/icons/user.png) no-repeat left;}
|
|
||||||
.useradd{background:transparent url(../img/icons/user_add.png) no-repeat left;}
|
|
||||||
.group{background:transparent url(../img/icons/group.png) no-repeat left;}
|
|
||||||
.search{background:transparent url(../img/icons/magnifier.png) no-repeat left;}
|
|
||||||
.online{background:transparent url(../img/icons/world.png) no-repeat left;}
|
|
||||||
.pagenew{background:transparent url(../img/icons/page_add.png) no-repeat left;}
|
|
||||||
.rss{background:transparent url(../img/icons/rss.png) no-repeat left;}
|
|
||||||
.feed{background:transparent url(../img/icons/feed.png) no-repeat left;}
|
|
||||||
.report{background:transparent url(../img/icons/report.png) no-repeat left;}
|
|
||||||
.house{background:transparent url(../img/icons/house.png) no-repeat left;}
|
|
||||||
.manage{background:transparent url(../img/icons/cog.png) no-repeat left;}
|
|
||||||
.manage_page{background:transparent url(../img/icons/page_gear.png) no-repeat left;}
|
|
||||||
.folder{background:transparent url(../img/icons/folder.png) no-repeat left;}
|
|
||||||
.promotions{background:transparent url(../img/icons/coins.png) no-repeat left;}
|
|
||||||
.cart{background:transparent url(../img/icons/cart.png) no-repeat left;}
|
|
||||||
.folder_table{background:transparent url(../img/icons/folder_page.png) no-repeat left;}
|
|
||||||
.shipping{background:transparent url(../img/icons/car.png) no-repeat left;}
|
|
||||||
.invoices{background:transparent url(../img/icons/page_white_text_width.png) no-repeat left;}
|
|
||||||
.addorder{background:transparent url(../img/icons/folder_page_add.png) no-repeat left;}
|
|
||||||
.add{background:transparent url(../img/icons/add.png) no-repeat left;}
|
|
||||||
.app_add{background:transparent url(../img/icons/application_add.png) no-repeat left;}
|
|
||||||
.report_seo{background:transparent url(../img/icons/report_link.png) no-repeat left;}
|
|
||||||
.modules{background:transparent url(../img/icons/bricks.png) no-repeat left;}
|
|
||||||
.modules_manage{background:transparent url(../img/icons/bricks_gear.png) no-repeat left;}
|
|
@@ -1,51 +0,0 @@
|
|||||||
#footer ul {
|
|
||||||
list-style:none;
|
|
||||||
}
|
|
||||||
#footer li {
|
|
||||||
display:inline;
|
|
||||||
}
|
|
||||||
a#defswitch {
|
|
||||||
width:15px;
|
|
||||||
height:10px;
|
|
||||||
margin: 3px 0 3px 0;
|
|
||||||
background-color:#bd3f09;
|
|
||||||
font-size: 8px;
|
|
||||||
color:#bd3f09;
|
|
||||||
display:inline-block;
|
|
||||||
}
|
|
||||||
a#blueswitch {
|
|
||||||
width:15px;
|
|
||||||
height:10px;
|
|
||||||
margin: 3px 0 3px 0;
|
|
||||||
background-color:#375b91;
|
|
||||||
font-size: 8px;
|
|
||||||
color:#375b91;
|
|
||||||
display:inline-block;
|
|
||||||
}
|
|
||||||
a#greenswitch {
|
|
||||||
width:15px;
|
|
||||||
height:10px;
|
|
||||||
margin: 3px 0 3px 0;
|
|
||||||
background-color:#d0e0b8;
|
|
||||||
font-size: 8px;
|
|
||||||
color:#d0e0b8;
|
|
||||||
display:inline-block;
|
|
||||||
}
|
|
||||||
a#brownswitch {
|
|
||||||
width:15px;
|
|
||||||
height:10px;
|
|
||||||
margin: 3px 0 3px 0;
|
|
||||||
background-color:#654322;
|
|
||||||
font-size: 8px;
|
|
||||||
color:#654322;
|
|
||||||
display:inline-block;
|
|
||||||
}
|
|
||||||
a#mixswitch {
|
|
||||||
width:15px;
|
|
||||||
height:10px;
|
|
||||||
margin: 3px 0 3px 0;
|
|
||||||
background-color:#294145;
|
|
||||||
font-size: 8px;
|
|
||||||
color:#294145;
|
|
||||||
display:inline-block;
|
|
||||||
}
|
|
@@ -1,121 +0,0 @@
|
|||||||
body{
|
|
||||||
background:#f7f6f0 url(../img/bg.jpg) repeat-x top;
|
|
||||||
color: #202020;
|
|
||||||
}
|
|
||||||
a, a:visited{
|
|
||||||
color:#a43708;
|
|
||||||
}
|
|
||||||
input{
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
}
|
|
||||||
select{
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
}
|
|
||||||
#header h2{
|
|
||||||
color:#FFF;
|
|
||||||
}
|
|
||||||
#content{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
#sidebar{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
#sidebar h3{
|
|
||||||
background:#f7f6f0;
|
|
||||||
border-bottom:1px solid #e8e7e1;
|
|
||||||
}
|
|
||||||
#topmenu a,#topmenu a:visited{
|
|
||||||
color:#f7f6f0;
|
|
||||||
background:#bd3f09;
|
|
||||||
}
|
|
||||||
#topmenu a:hover{
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
#topmenu .current a, #topmenu .current a:hover, #topmenu .current a:visited{
|
|
||||||
color:#993400;
|
|
||||||
background: #FFF url(../img/bg_menu_red.jpg) repeat-x top;
|
|
||||||
border-left: #FFF 1px solid;
|
|
||||||
border-right: #FFF 1px solid;
|
|
||||||
}
|
|
||||||
#top-panel{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
table{
|
|
||||||
background:none;
|
|
||||||
}
|
|
||||||
td, th{
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
}
|
|
||||||
thead{
|
|
||||||
background:#f7f6f0;
|
|
||||||
}
|
|
||||||
#styleswitcher{
|
|
||||||
background:#FFFFFF;
|
|
||||||
}
|
|
||||||
#footer{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
#box{
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
}
|
|
||||||
#box h3{
|
|
||||||
background:#f7f6f0;
|
|
||||||
border-bottom:1px solid #e8e7e1;
|
|
||||||
color:#a43708;
|
|
||||||
}
|
|
||||||
/***************
|
|
||||||
Forms
|
|
||||||
***************/
|
|
||||||
form#form fieldset {
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
}
|
|
||||||
form#form legend {
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
background:#fff url(../img/form_red.gif) repeat-x center left;
|
|
||||||
color:#a43708;
|
|
||||||
}
|
|
||||||
form#form input {
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
background:#fff url(../img/form_red.gif) repeat-x top left;
|
|
||||||
}
|
|
||||||
form#form textarea {
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
background:#fff url(../img/form_red.gif) repeat-x bottom left;
|
|
||||||
}
|
|
||||||
form#form option {
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
form#form optgroup {
|
|
||||||
background:#e8e7e1;
|
|
||||||
}
|
|
||||||
form#form optgroup option {
|
|
||||||
|
|
||||||
}
|
|
||||||
form#form #button1, form#form #button2 {
|
|
||||||
color:#c00;
|
|
||||||
}
|
|
||||||
form#form #button1:hover, form#form #button2:hover {
|
|
||||||
color:#000;
|
|
||||||
}
|
|
||||||
/***************
|
|
||||||
Home
|
|
||||||
***************/
|
|
||||||
#infobox{
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
}
|
|
||||||
#infobox h3{
|
|
||||||
background:#f7f6f0;
|
|
||||||
border-bottom:1px solid #e8e7e1;
|
|
||||||
color:#a43708;
|
|
||||||
}
|
|
||||||
#rightnow {
|
|
||||||
border:1px solid #e8e7e1;
|
|
||||||
}
|
|
||||||
#rightnow .reallynow {
|
|
||||||
background:#f7f6f0;
|
|
||||||
color:#a43708;
|
|
||||||
}
|
|
||||||
#rightnow h3{
|
|
||||||
background:#f7f6f0;
|
|
||||||
border-bottom:1px solid #e8e7e1;
|
|
||||||
}
|
|
@@ -1,121 +0,0 @@
|
|||||||
body{
|
|
||||||
background:#f3f9ff url(../img/bg_blue.jpg) repeat-x top;
|
|
||||||
color: #202020;
|
|
||||||
}
|
|
||||||
a, a:visited{
|
|
||||||
color:#375b91;
|
|
||||||
}
|
|
||||||
input{
|
|
||||||
border:1px solid #d9e6f0;
|
|
||||||
}
|
|
||||||
select{
|
|
||||||
border:1px solid #d9e6f0;
|
|
||||||
}
|
|
||||||
#header h2{
|
|
||||||
color:#FFF;
|
|
||||||
}
|
|
||||||
#content{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
#sidebar{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
#sidebar h3{
|
|
||||||
background:#f3f9ff;
|
|
||||||
border-bottom:1px solid #d9e6f0;
|
|
||||||
}
|
|
||||||
#topmenu a,#topmenu a:visited{
|
|
||||||
color:#FFF;
|
|
||||||
background:#7e9dcc;
|
|
||||||
}
|
|
||||||
#topmenu a:hover{
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
#topmenu .current a, #topmenu .current a:hover, #topmenu .current a:visited{
|
|
||||||
color:#375b91;
|
|
||||||
background: #FFF url(../img/bg_menu_blue.jpg) repeat-x top;
|
|
||||||
border-left: #FFF 1px solid;
|
|
||||||
border-right: #FFF 1px solid;
|
|
||||||
}
|
|
||||||
#top-panel{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
table{
|
|
||||||
background:none;
|
|
||||||
}
|
|
||||||
td, th{
|
|
||||||
border:1px solid #d9e6f0;
|
|
||||||
}
|
|
||||||
thead{
|
|
||||||
background:#f3f9ff;
|
|
||||||
}
|
|
||||||
#styleswitcher{
|
|
||||||
background:#FFFFFF;
|
|
||||||
}
|
|
||||||
#footer{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
#box{
|
|
||||||
border:1px solid #d9e6f0;
|
|
||||||
}
|
|
||||||
#box h3{
|
|
||||||
background:#f3f9ff;
|
|
||||||
border-bottom:1px solid #d9e6f0;
|
|
||||||
color:#375b91;
|
|
||||||
}
|
|
||||||
/***************
|
|
||||||
Forms
|
|
||||||
***************/
|
|
||||||
form#form fieldset {
|
|
||||||
border:1px solid #d9e6f0;
|
|
||||||
}
|
|
||||||
form#form legend {
|
|
||||||
border:1px solid #d9e6f0;
|
|
||||||
background:#fff url(../img/form_blue.gif) repeat-x center left;
|
|
||||||
color:#375b91;
|
|
||||||
}
|
|
||||||
form#form input {
|
|
||||||
border:1px solid #d9e6f0;
|
|
||||||
background:#fff url(../img/form_blue.gif) repeat-x top left;
|
|
||||||
}
|
|
||||||
form#form textarea {
|
|
||||||
border:1px solid #d9e6f0;
|
|
||||||
background:#fff url(../img/form_blue.gif) repeat-x bottom left;
|
|
||||||
}
|
|
||||||
form#form option {
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
form#form optgroup {
|
|
||||||
background:#d9e6f0;
|
|
||||||
}
|
|
||||||
form#form optgroup option {
|
|
||||||
|
|
||||||
}
|
|
||||||
form#form #button1, form#form #button2 {
|
|
||||||
color:#375b91;
|
|
||||||
}
|
|
||||||
form#form #button1:hover, form#form #button2:hover {
|
|
||||||
color:#000;
|
|
||||||
}
|
|
||||||
/***************
|
|
||||||
Home
|
|
||||||
***************/
|
|
||||||
#infobox{
|
|
||||||
border:1px solid #d9e6f0;
|
|
||||||
}
|
|
||||||
#infobox h3{
|
|
||||||
background:#f3f9ff;
|
|
||||||
border-bottom:1px solid #d9e6f0;
|
|
||||||
color:#375b91;
|
|
||||||
}
|
|
||||||
#rightnow {
|
|
||||||
border:1px solid #d9e6f0;
|
|
||||||
}
|
|
||||||
#rightnow .reallynow {
|
|
||||||
background:#f3f9ff;
|
|
||||||
color:#375b91;
|
|
||||||
}
|
|
||||||
#rightnow h3{
|
|
||||||
background:#f3f9ff;
|
|
||||||
border-bottom:1px solid #d9e6f0;
|
|
||||||
}
|
|
@@ -1,121 +0,0 @@
|
|||||||
body{
|
|
||||||
background:#f0f7e8 url(../img/bg_light_green.jpg) repeat-x top;
|
|
||||||
color: #202020;
|
|
||||||
}
|
|
||||||
a, a:visited{
|
|
||||||
color:#93ad7e;
|
|
||||||
}
|
|
||||||
input{
|
|
||||||
border:1px solid #e7eedf;
|
|
||||||
}
|
|
||||||
select{
|
|
||||||
border:1px solid #e7eedf;
|
|
||||||
}
|
|
||||||
#header h2{
|
|
||||||
color:#FFF;
|
|
||||||
}
|
|
||||||
#content{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
#sidebar{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
#sidebar h3{
|
|
||||||
background:#f0f7e8;
|
|
||||||
border-bottom:1px solid #e7eedf;
|
|
||||||
}
|
|
||||||
#topmenu a,#topmenu a:visited{
|
|
||||||
color:#93ad7e;
|
|
||||||
background:#e7eedc;
|
|
||||||
}
|
|
||||||
#topmenu a:hover{
|
|
||||||
color: #93ad7e;
|
|
||||||
}
|
|
||||||
#topmenu .current a, #topmenu .current a:hover, #topmenu .current a:visited{
|
|
||||||
color:#93ad7e;
|
|
||||||
background: #FFF url(../img/bg_menu_green.jpg) repeat-x top;
|
|
||||||
border-left: #FFF 1px solid;
|
|
||||||
border-right: #FFF 1px solid;
|
|
||||||
}
|
|
||||||
#top-panel{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
table{
|
|
||||||
background:none;
|
|
||||||
}
|
|
||||||
td, th{
|
|
||||||
border:1px solid #e7eedf;
|
|
||||||
}
|
|
||||||
thead{
|
|
||||||
background:#f0f7e8;
|
|
||||||
}
|
|
||||||
#styleswitcher{
|
|
||||||
background:#FFFFFF;
|
|
||||||
}
|
|
||||||
#footer{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
#box{
|
|
||||||
border:1px solid #e7eedf;
|
|
||||||
}
|
|
||||||
#box h3{
|
|
||||||
background:#f0f7e8;
|
|
||||||
border-bottom:1px solid #e7eedf;
|
|
||||||
color:#93ad7e;
|
|
||||||
}
|
|
||||||
/***************
|
|
||||||
Forms
|
|
||||||
***************/
|
|
||||||
form#form fieldset {
|
|
||||||
border:1px solid #e7eedf;
|
|
||||||
}
|
|
||||||
form#form legend {
|
|
||||||
border:1px solid #e7eedf;
|
|
||||||
background:#fff url(../img/form_green.gif) repeat-x center left;
|
|
||||||
color:#93ad7e;
|
|
||||||
}
|
|
||||||
form#form input {
|
|
||||||
border:1px solid #e7eedf;
|
|
||||||
background:#fff url(../img/form_green.gif) repeat-x top left;
|
|
||||||
}
|
|
||||||
form#form textarea {
|
|
||||||
border:1px solid #e7eedf;
|
|
||||||
background:#fff url(../img/form_green.gif) repeat-x bottom left;
|
|
||||||
}
|
|
||||||
form#form option {
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
form#form optgroup {
|
|
||||||
background:#e7eedf;
|
|
||||||
}
|
|
||||||
form#form optgroup option {
|
|
||||||
|
|
||||||
}
|
|
||||||
form#form #button1, form#form #button2 {
|
|
||||||
color:#93ad7e;
|
|
||||||
}
|
|
||||||
form#form #button1:hover, form#form #button2:hover {
|
|
||||||
color:#000;
|
|
||||||
}
|
|
||||||
/***************
|
|
||||||
Home
|
|
||||||
***************/
|
|
||||||
#infobox{
|
|
||||||
border:1px solid #e7eedf;
|
|
||||||
}
|
|
||||||
#infobox h3{
|
|
||||||
background:#f0f7e8;
|
|
||||||
border-bottom:1px solid #e7eedf;
|
|
||||||
color:#93ad7e;
|
|
||||||
}
|
|
||||||
#rightnow {
|
|
||||||
border:1px solid #e7eedf;
|
|
||||||
}
|
|
||||||
#rightnow .reallynow {
|
|
||||||
background:#f0f7e8;
|
|
||||||
color:#93ad7e;
|
|
||||||
}
|
|
||||||
#rightnow h3{
|
|
||||||
background:#f0f7e8;
|
|
||||||
border-bottom:1px solid #e7eedf;
|
|
||||||
}
|
|
@@ -1,121 +0,0 @@
|
|||||||
body{
|
|
||||||
background:#f7f6f1 url(../img/bg_brown.jpg) repeat-x top;
|
|
||||||
color: #202020;
|
|
||||||
}
|
|
||||||
a, a:visited{
|
|
||||||
color:#654322;
|
|
||||||
}
|
|
||||||
input{
|
|
||||||
border:1px solid #e9e8e3;
|
|
||||||
}
|
|
||||||
select{
|
|
||||||
border:1px solid #e9e8e3;
|
|
||||||
}
|
|
||||||
#header h2{
|
|
||||||
color:#FFF;
|
|
||||||
}
|
|
||||||
#content{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
#sidebar{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
#sidebar h3{
|
|
||||||
background:#f7f6f1;
|
|
||||||
border-bottom:1px solid #e9e8e3;
|
|
||||||
}
|
|
||||||
#topmenu a,#topmenu a:visited{
|
|
||||||
color:#FFF;
|
|
||||||
background:#8f6831;
|
|
||||||
}
|
|
||||||
#topmenu a:hover{
|
|
||||||
color: #654322;
|
|
||||||
}
|
|
||||||
#topmenu .current a, #topmenu .current a:hover, #topmenu .current a:visited{
|
|
||||||
color:#654322;
|
|
||||||
background: #FFF url(../img/bg_menu_brown.jpg) repeat-x top;
|
|
||||||
border-left: #FFF 1px solid;
|
|
||||||
border-right: #FFF 1px solid;
|
|
||||||
}
|
|
||||||
#top-panel{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
table{
|
|
||||||
background:none;
|
|
||||||
}
|
|
||||||
td, th{
|
|
||||||
border:1px solid #e9e8e3;
|
|
||||||
}
|
|
||||||
thead{
|
|
||||||
background:#f7f6f1;
|
|
||||||
}
|
|
||||||
#styleswitcher{
|
|
||||||
background:#FFFFFF;
|
|
||||||
}
|
|
||||||
#footer{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
#box{
|
|
||||||
border:1px solid #e9e8e3;
|
|
||||||
}
|
|
||||||
#box h3{
|
|
||||||
background:#f7f6f1;
|
|
||||||
border-bottom:1px solid #e9e8e3;
|
|
||||||
color:#654322;
|
|
||||||
}
|
|
||||||
/***************
|
|
||||||
Forms
|
|
||||||
***************/
|
|
||||||
form#form fieldset {
|
|
||||||
border:1px solid #e9e8e3;
|
|
||||||
}
|
|
||||||
form#form legend {
|
|
||||||
border:1px solid #e9e8e3;
|
|
||||||
background:#fff url(../img/form_brown.gif) repeat-x center left;
|
|
||||||
color:#654322;
|
|
||||||
}
|
|
||||||
form#form input {
|
|
||||||
border:1px solid #e9e8e3;
|
|
||||||
background:#fff url(../img/form_brown.gif) repeat-x top left;
|
|
||||||
}
|
|
||||||
form#form textarea {
|
|
||||||
border:1px solid #e9e8e3;
|
|
||||||
background:#fff url(../img/form_brown.gif) repeat-x bottom left;
|
|
||||||
}
|
|
||||||
form#form option {
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
form#form optgroup {
|
|
||||||
background:#e9e8e3;
|
|
||||||
}
|
|
||||||
form#form optgroup option {
|
|
||||||
|
|
||||||
}
|
|
||||||
form#form #button1, form#form #button2 {
|
|
||||||
color:#654322;
|
|
||||||
}
|
|
||||||
form#form #button1:hover, form#form #button2:hover {
|
|
||||||
color:#000;
|
|
||||||
}
|
|
||||||
/***************
|
|
||||||
Home
|
|
||||||
***************/
|
|
||||||
#infobox{
|
|
||||||
border:1px solid #e9e8e3;
|
|
||||||
}
|
|
||||||
#infobox h3{
|
|
||||||
background:#f7f6f1;
|
|
||||||
border-bottom:1px solid #e9e8e3;
|
|
||||||
color:#654322;
|
|
||||||
}
|
|
||||||
#rightnow {
|
|
||||||
border:1px solid #e9e8e3;
|
|
||||||
}
|
|
||||||
#rightnow .reallynow {
|
|
||||||
background:#f7f6f1;
|
|
||||||
color:#654322;
|
|
||||||
}
|
|
||||||
#rightnow h3{
|
|
||||||
background:#f7f6f1;
|
|
||||||
border-bottom:1px solid #e9e8e3;
|
|
||||||
}
|
|
@@ -1,122 +0,0 @@
|
|||||||
body{
|
|
||||||
background:#d9eaed url(../img/bg_mix.jpg) repeat-x top;
|
|
||||||
color: #202020;
|
|
||||||
}
|
|
||||||
a, a:visited{
|
|
||||||
color:#294145;
|
|
||||||
text-decoration:underline;
|
|
||||||
}
|
|
||||||
input{
|
|
||||||
border:1px solid #c3d7db;
|
|
||||||
}
|
|
||||||
select{
|
|
||||||
border:1px solid #c3d7db;
|
|
||||||
}
|
|
||||||
#header h2{
|
|
||||||
color:#FFF;
|
|
||||||
}
|
|
||||||
#content{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
#sidebar{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
#sidebar h3{
|
|
||||||
background:#d9eaed;
|
|
||||||
border-bottom:1px solid #c3d7db;
|
|
||||||
}
|
|
||||||
#topmenu a,#topmenu a:visited{
|
|
||||||
color:#FFF;
|
|
||||||
background:#5d99a3;
|
|
||||||
}
|
|
||||||
#topmenu a:hover{
|
|
||||||
color: #294145;
|
|
||||||
}
|
|
||||||
#topmenu .current a, #topmenu .current a:hover, #topmenu .current a:visited{
|
|
||||||
color:#294145;
|
|
||||||
background: #FFF url(../img/bg_menu_mix.jpg) repeat-x top;
|
|
||||||
border-left: #FFF 1px solid;
|
|
||||||
border-right: #FFF 1px solid;
|
|
||||||
}
|
|
||||||
#top-panel{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
table{
|
|
||||||
background:none;
|
|
||||||
}
|
|
||||||
td, th{
|
|
||||||
border:1px solid #c3d7db;
|
|
||||||
}
|
|
||||||
thead{
|
|
||||||
background:#d9eaed;
|
|
||||||
}
|
|
||||||
#styleswitcher{
|
|
||||||
background:#FFFFFF;
|
|
||||||
}
|
|
||||||
#footer{
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
#box{
|
|
||||||
border:1px solid #c3d7db;
|
|
||||||
}
|
|
||||||
#box h3{
|
|
||||||
background:#d9eaed;
|
|
||||||
border-bottom:1px solid #c3d7db;
|
|
||||||
color:#294145;
|
|
||||||
}
|
|
||||||
/***************
|
|
||||||
Forms
|
|
||||||
***************/
|
|
||||||
form#form fieldset {
|
|
||||||
border:1px solid #c3d7db;
|
|
||||||
}
|
|
||||||
form#form legend {
|
|
||||||
border:1px solid #c3d7db;
|
|
||||||
background:#fff url(../img/form_mix.gif) repeat-x center left;
|
|
||||||
color:#294145;
|
|
||||||
}
|
|
||||||
form#form input {
|
|
||||||
border:1px solid #c3d7db;
|
|
||||||
background:#fff url(../img/form_mix.gif) repeat-x top left;
|
|
||||||
}
|
|
||||||
form#form textarea {
|
|
||||||
border:1px solid #c3d7db;
|
|
||||||
background:#fff url(../img/form_mix.gif) repeat-x bottom left;
|
|
||||||
}
|
|
||||||
form#form option {
|
|
||||||
background:#FFF;
|
|
||||||
}
|
|
||||||
form#form optgroup {
|
|
||||||
background:#c3d7db;
|
|
||||||
}
|
|
||||||
form#form optgroup option {
|
|
||||||
|
|
||||||
}
|
|
||||||
form#form #button1, form#form #button2 {
|
|
||||||
color:#294145;
|
|
||||||
}
|
|
||||||
form#form #button1:hover, form#form #button2:hover {
|
|
||||||
color:#000;
|
|
||||||
}
|
|
||||||
/***************
|
|
||||||
Home
|
|
||||||
***************/
|
|
||||||
#infobox{
|
|
||||||
border:1px solid #c3d7db;
|
|
||||||
}
|
|
||||||
#infobox h3{
|
|
||||||
background:#d9eaed;
|
|
||||||
border-bottom:1px solid #c3d7db;
|
|
||||||
color:#294145;
|
|
||||||
}
|
|
||||||
#rightnow {
|
|
||||||
border:1px solid #c3d7db;
|
|
||||||
}
|
|
||||||
#rightnow .reallynow {
|
|
||||||
background:#d9eaed;
|
|
||||||
color:#294145;
|
|
||||||
}
|
|
||||||
#rightnow h3{
|
|
||||||
background:#d9eaed;
|
|
||||||
border-bottom:1px solid #c3d7db;
|
|
||||||
}
|
|
Before Width: | Height: | Size: 372 B |
Before Width: | Height: | Size: 359 B |
Before Width: | Height: | Size: 355 B |
Before Width: | Height: | Size: 356 B |
Before Width: | Height: | Size: 372 B |
Before Width: | Height: | Size: 383 B |
Before Width: | Height: | Size: 379 B |
Before Width: | Height: | Size: 367 B |
Before Width: | Height: | Size: 353 B |
Before Width: | Height: | Size: 272 B |
Before Width: | Height: | Size: 273 B |
Before Width: | Height: | Size: 273 B |
Before Width: | Height: | Size: 273 B |
Before Width: | Height: | Size: 166 B |
Before Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 55 KiB |
Before Width: | Height: | Size: 733 B |
Before Width: | Height: | Size: 619 B |
Before Width: | Height: | Size: 379 B |
Before Width: | Height: | Size: 131 B |
Before Width: | Height: | Size: 131 B |
Before Width: | Height: | Size: 130 B |
Before Width: | Height: | Size: 452 B |
Before Width: | Height: | Size: 775 B |
Before Width: | Height: | Size: 825 B |
Before Width: | Height: | Size: 876 B |
Before Width: | Height: | Size: 610 B |
Before Width: | Height: | Size: 421 B |
Before Width: | Height: | Size: 711 B |
Before Width: | Height: | Size: 512 B |
Before Width: | Height: | Size: 732 B |
Before Width: | Height: | Size: 209 B |
Before Width: | Height: | Size: 773 B |
Before Width: | Height: | Size: 691 B |
Before Width: | Height: | Size: 537 B |
Before Width: | Height: | Size: 688 B |
Before Width: | Height: | Size: 773 B |
Before Width: | Height: | Size: 675 B |
Before Width: | Height: | Size: 753 B |