Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b4f110dbd5 | ||
|
|
cde6d86e1b | ||
|
|
1492666d3a | ||
|
|
de2ee02b3b | ||
|
|
4f65f6870b | ||
|
|
7801e5fd81 | ||
|
|
b7c7d6ffce | ||
|
|
d5b2d4e1f2 | ||
|
|
d1e5c2105e | ||
|
|
acd73fc63e | ||
|
|
76ea61f751 | ||
|
|
8dc5231118 | ||
|
|
45fa74573a | ||
|
|
6fe156eb7c | ||
|
|
663ddbe76a | ||
|
|
30297454f7 | ||
|
|
bc602722bf | ||
|
|
be8f147216 | ||
|
|
b9495fb64a | ||
|
|
07b217b290 | ||
|
|
42fac46062 | ||
|
|
24bc8985d0 | ||
|
|
76a2d5ff63 | ||
|
|
148f32f78b | ||
|
|
62f5b6597e | ||
|
|
7e810b0279 | ||
|
|
2336b29b65 | ||
|
|
185c0e16a0 | ||
|
|
656baeb9ee | ||
|
|
3e06304dc7 | ||
|
|
4bb940c8c5 | ||
|
|
2b376b6aab | ||
|
|
04df26ff83 | ||
|
|
aca4240b92 | ||
|
|
faf26fa8a2 | ||
|
|
030ab1e7ea | ||
|
|
7f2c1d4782 | ||
|
|
9132138a99 | ||
|
|
84875d60bd | ||
|
|
3cbaf76626 | ||
|
|
f4846d0d66 | ||
|
|
f183dcc72b | ||
|
|
63cc5d8e88 | ||
|
|
f858c32fdf | ||
|
|
60eb127d71 | ||
|
|
ede33f3a37 | ||
|
|
ffd53a2390 | ||
|
|
2591fbde67 | ||
|
|
922d3f1938 | ||
|
|
64522ba8a6 | ||
|
|
7b1eedb574 | ||
|
|
7ec6ca605f | ||
|
|
5a5c613814 | ||
|
|
1a3ef20a35 | ||
|
|
fba966177d | ||
|
|
62c72dfdbe | ||
|
|
1ae1ff9b72 | ||
|
|
c1e12c2737 | ||
|
|
de09a66d6f | ||
|
|
3c2012da46 | ||
|
|
d55be54320 | ||
|
|
dcbefa1a96 | ||
|
|
be8f1fff96 | ||
|
|
6117dbdcc0 | ||
|
|
0a39ba1023 | ||
|
|
dae5f65baa | ||
|
|
080bb30103 | ||
|
|
9e647c7ce5 | ||
|
|
73606b0fb4 | ||
|
|
e62eb36cc2 | ||
|
|
6b81f744d4 | ||
|
|
1a9b3b78cb | ||
|
|
c3cbf956d0 | ||
|
|
91188c555d | ||
|
|
913028dd6c | ||
|
|
dfb3f6478d | ||
|
|
6afc6221d3 | ||
|
|
7b5a02487e | ||
|
|
533b79762e | ||
|
|
53b7dbfdd0 | ||
|
|
fd14c5403b | ||
|
|
dc476e73a1 | ||
|
|
e60150705e | ||
|
|
2869ba5c42 | ||
|
|
91e56644b4 | ||
|
|
e0b7a3d763 | ||
|
|
6a25f03687 | ||
|
|
104f306deb | ||
|
|
09c21cd466 | ||
|
|
5b89797f57 | ||
|
|
ab1cc5146d | ||
|
|
2483a7723f | ||
|
|
367db15d93 | ||
|
|
30e02aac08 | ||
|
|
ce5ddf05fe | ||
|
|
475837bca0 | ||
|
|
bd0ae25afd | ||
|
|
688de08feb | ||
|
|
83b550adbe | ||
|
|
fa89bae7d9 | ||
|
|
456246362f | ||
|
|
b472440ec1 | ||
|
|
7b5613d032 | ||
|
|
f5b3b985ce | ||
|
|
515298700a | ||
|
|
41d7566acb | ||
|
|
f4196263fa | ||
|
|
6bc69ac467 | ||
|
|
15b2c8b8e6 | ||
|
|
8e1d33e880 | ||
|
|
797902552d | ||
|
|
f3d2dcdad2 | ||
|
|
928478a8ad | ||
|
|
5023ee800b | ||
|
|
4a70625487 | ||
|
|
26327b5c8c | ||
|
|
372f47760b | ||
|
|
3111a5eb71 | ||
|
|
74f914488b | ||
|
|
a8d219afec | ||
|
|
4b4a7ffdf0 | ||
|
|
98e2e2f125 | ||
|
|
05000ae954 | ||
|
|
85bf53f317 | ||
|
|
d65407079e | ||
|
|
a8c9946aa9 | ||
|
|
1e5b2de913 | ||
|
|
747ab3d563 | ||
|
|
82ffbba661 | ||
|
|
3f08876079 | ||
|
|
5622839ffa | ||
|
|
4b3ab5e31c | ||
|
|
f774a28e2a | ||
|
|
61bdb8da01 | ||
|
|
c117ada117 | ||
|
|
1f0d0f992d | ||
|
|
6445b77b90 | ||
|
|
6d935733e6 | ||
|
|
cfd0a2d26f | ||
|
|
749e8f673b | ||
|
|
4812f324e0 | ||
|
|
085f34b307 | ||
|
|
622ce7b780 | ||
|
|
34b1fc9c5e | ||
|
|
9cc27c40aa | ||
|
|
eece1cbae5 | ||
|
|
7e6770b5e7 | ||
|
|
a0c032c2c6 | ||
|
|
3d12de3838 | ||
|
|
477b77b59f | ||
|
|
04a7a34fcc | ||
|
|
86f1805160 | ||
|
|
d573e9f98a | ||
|
|
3ad16d96be | ||
|
|
d8870caf29 | ||
|
|
7c9d5d34f6 | ||
|
|
5268ce9b71 | ||
|
|
e395c98a6c | ||
|
|
d5897e2a49 | ||
|
|
c82003f982 | ||
|
|
5447274aa8 | ||
|
|
688162ffbf | ||
|
|
220d1d821d | ||
|
|
2b16c3c1a9 | ||
|
|
d731acdaef | ||
|
|
3511b159a8 | ||
|
|
28cea4ee09
|
||
|
|
8e7227c29d
|
||
|
|
f0cc22d9d8
|
||
|
|
b6f19fa38b
|
||
|
|
86305087f7
|
||
|
|
7b6f64db61
|
||
|
|
06f086bcf0
|
||
|
|
606c1664f2
|
||
|
|
0c07060f4d
|
||
|
|
8bd0cc1c64
|
||
|
|
f12262b946
|
||
|
|
9415d79a3a
|
||
|
|
ad223a9c75
|
||
|
|
8737b19e79
|
||
|
|
552d73430c
|
||
|
|
fba5fbdb6b
|
||
|
|
3da11bf21c
|
||
|
|
c83f9a0465
|
||
|
|
9f67ae1f4e
|
||
|
|
383431b79f
|
||
|
|
d5c0d16758
|
||
|
|
87294d5477 | ||
|
|
c45758b054
|
||
|
|
a84f07f3ad
|
||
|
|
3c6ed3441b
|
||
|
|
68cd61d86e
|
||
|
|
3470817e9e
|
||
|
|
a3d7ef30dd | ||
|
|
db09e8da89
|
||
|
|
37fa5321cc
|
||
|
|
63edb03193
|
||
|
|
8d02102024
|
||
|
|
75a13094e0
|
||
|
|
7a4c70ada2
|
||
|
|
65c84a29e1
|
||
|
|
eea34dadad
|
||
|
|
f1e6ac7b89 | ||
|
|
7b24f66f93 | ||
|
|
b2b2934ce9 | ||
|
|
6ed3e673df | ||
|
|
aa7dcab1fd | ||
|
|
e2e578e485 | ||
|
|
6cebc903c9 | ||
|
|
c0190959e3 | ||
|
|
bb26366769
|
||
|
|
71849a457b
|
||
|
|
7c1a8d96a2
|
||
|
|
cebd152daf
|
||
|
|
2ca03389d2
|
||
|
|
cacf0981ce
|
||
|
|
bcf5b5cb7d
|
||
|
|
66b2f1a8f2
|
||
|
|
40ecca5440
|
||
|
|
a96c2312d0
|
||
|
|
faff3f4e6a | ||
|
|
83abf44380
|
||
|
|
e83960d67f
|
||
|
|
c6b2e64c05
|
||
|
|
029f719112 | ||
|
|
46f460c8ad | ||
|
|
af4401d9bb | ||
|
|
2f00aee947 | ||
|
|
dd2b032fa3 | ||
|
|
1b858ae36c
|
||
|
|
69f4d8e2c7 | ||
|
|
f24aea0120 | ||
|
|
f6dc7f49e2 | ||
|
|
c1f105226f
|
||
|
|
cecab2b0cf
|
||
|
|
39f4e89b03
|
||
|
|
83f595a27a
|
||
|
|
b0db11544d
|
||
|
|
8e3551cb11
|
||
|
|
61d99a3043
|
||
|
|
fe80deff0c | ||
|
|
536c00f5a8 | ||
|
|
66ed8635dd | ||
|
|
311c485cec | ||
|
|
5b5cf4e6d3 | ||
|
|
c5ed2d47fc | ||
|
|
428ec0d0ed | ||
|
|
96c5f987d6 | ||
|
|
f0ae28b087 | ||
|
|
fa4a266d77 | ||
|
|
32e854858e
|
||
|
|
f13371e679 | ||
|
|
2420f594a6
|
||
|
|
b7b0a1050c
|
||
|
|
d2a90157b9
|
||
|
|
a32cb3a2c0
|
||
|
|
7c0a3a6955
|
||
|
|
7d2e2945a1 | ||
|
|
dc526c7359 | ||
|
|
6c4cb484da | ||
|
|
d41246de9d | ||
|
|
6d40783224
|
||
|
|
6eb6014e80
|
||
|
|
103cf3f882
|
||
|
|
5969e0c82b
|
||
|
|
945f9027dd
|
||
|
|
0bf3145042
|
||
|
|
905669755f
|
||
|
|
57b12e8c04
|
||
|
|
eccd883edc
|
||
|
|
895b134cd0
|
||
|
|
7258573e4d
|
||
|
|
cbdfa6f6fc
|
||
|
|
ed25c58410
|
||
|
|
16cfa46864
|
||
|
|
e54a0a6668
|
||
|
|
eb545724ea
|
||
|
|
7858b48bad
|
||
|
|
a4ed41edbe
|
||
|
|
b5a9e52c43
|
||
|
|
c6166d3295
|
||
|
|
9520d29109
|
||
|
|
3edfff146e | ||
|
|
38416ccdf8
|
||
|
|
eeb5eabd12
|
||
|
|
41273f97db
|
||
|
|
0e23677e1b | ||
|
|
0f085c7f36
|
||
|
|
bd90076441
|
||
|
|
1801bdf55b
|
||
|
|
f27f0edfb6
|
||
|
|
02f23e7db4
|
||
|
|
9871e24811 | ||
|
|
a7dac2ce15 | ||
|
|
ed1d2cbf0d | ||
|
|
06ca32802b
|
||
|
|
568b45f93a
|
||
|
|
1ca07286a4
|
||
|
|
376aed9787
|
||
|
|
246751b4dd
|
||
|
|
7f3a9d69ca
|
||
|
|
a4106f6242
|
||
|
|
f233e8241e | ||
|
|
79dedea47c
|
||
|
|
e106a6a3cf
|
||
|
|
ee3d84d7b0
|
||
|
|
b4f197b7d8
|
||
|
|
e3c89a37aa
|
||
|
|
ad0770d1be
|
||
|
|
161ed97a34
|
||
|
|
f66008da56
|
||
|
|
6b400f76cf
|
||
|
|
758ae06fd9
|
||
|
|
49429e1e7e
|
||
|
|
c9dd873019
|
||
|
|
3ae49456b1
|
||
|
|
9bf7bd0fda
|
||
|
|
a9b51977d4
|
||
|
|
50408ed516
|
||
|
|
b0cdf3ccb5
|
||
|
|
ea80b85b33
|
||
|
|
39ca3e2bb9
|
||
|
|
f8cc0c9c92
|
||
|
|
7a9ef6454c
|
||
|
|
d48c27dccb
|
||
|
|
5a565c2678
|
||
|
|
1e0875ae73
|
||
|
|
33759d24e5
|
||
|
|
033e75de5c
|
||
|
|
f2f8374fd4 | ||
|
|
e891525d56
|
||
|
|
93bc8304ce | ||
|
|
d4218f409c | ||
|
|
462de95866
|
||
|
|
dad477ed14
|
||
|
|
660258f715
|
||
|
|
9f6c7d9489
|
||
|
|
de17d87f47
|
||
|
|
f8ebcf91b1
|
||
|
|
d25d414057
|
||
|
|
96a9254bf8
|
||
|
|
96643567d4 | ||
|
|
0a6db3d21f | ||
|
|
8a4cbbb976
|
||
|
|
696ba0b341
|
||
|
|
4efcbaed6a
|
||
|
|
eda5ecb124
|
||
|
|
0ef69178a5
|
||
|
|
5596eca326
|
||
|
|
af2dec7e2c
|
||
|
|
435dae801f
|
||
|
|
320c8191dc
|
||
|
|
803e18e3c3
|
||
|
|
fbac218c34
|
||
|
|
2e6ea3a00d
|
||
|
|
1f8812c939
|
||
|
|
44c2323883
|
||
|
|
82fb532e4b
|
||
|
|
ae6ca5c1ec
|
||
|
|
30ac7da4d7
|
||
|
|
8c30634fd1
|
||
|
|
59761743dc
|
||
|
|
5952dba533
|
||
|
|
2518ac021d
|
||
|
|
e656c1e567
|
||
|
|
b89c045f85
|
||
|
|
d347054ad0
|
||
|
|
3ebc44ea5a
|
||
|
|
57c8c3f6a4
|
||
|
|
fee769714d
|
||
|
|
9fcb24533a
|
||
|
|
1061632290
|
||
|
|
7dc297a266
|
||
|
|
f019a642a2
|
||
|
|
5554ac3003
|
||
|
|
7f9ad8b7d5
|
||
|
|
82af3a2e2d | ||
|
|
7a4fcb30dc
|
||
|
|
256326f5d4
|
||
|
|
505f615203
|
||
|
|
4e504e9679
|
||
|
|
18f9d87a29
|
||
|
|
2ad0c6e509
|
||
|
|
74b9e0b4a5
|
||
|
|
486ac65767
|
||
|
|
483641bcd5
|
||
|
|
ffdacc2cfb
|
||
|
|
4eac86da58
|
||
|
|
77fc38c899
|
||
|
|
0bf49ebfb9
|
||
|
|
93f0516121
|
||
|
|
36406c8001
|
||
|
|
836adcfe3c
|
||
|
|
71a3ffa21c
|
||
|
|
38f10b5f09
|
||
|
|
da6b1fe7f1
|
||
|
|
034e6374cc
|
||
|
|
9b95163f24
|
||
|
|
91b7934ee3
|
||
|
|
41216893a1
|
||
|
|
3553b87748
|
||
|
|
3e5e584fce
|
||
|
|
afb53d121b
|
||
|
|
1780122936
|
||
|
|
64aa5d041f | ||
|
|
fbccfbb65e | ||
|
|
13eb0d4eae
|
||
|
|
3969c47f07
|
||
|
|
c7e0d6d2cb
|
||
|
|
9e997a7ee2
|
||
|
|
9a8f70d87b
|
||
|
|
7132aeab0c
|
||
|
|
994c73adb2
|
||
|
|
9206b74500
|
||
|
|
5294aefbbd
|
||
|
|
8f0f586af9
|
||
|
|
9121533b93
|
||
|
|
90bff7b210
|
||
|
|
55f7b87ced
|
||
|
|
bee4de377a
|
||
|
|
b02911038b
|
||
|
|
9b4d5455e5
|
||
|
|
ca3e64f3b9
|
||
|
|
4d2b5ced82
|
||
|
|
e385820301
|
||
|
|
ec7c97d696
|
||
|
|
aae730d39c
|
||
|
|
3c412f2803
|
||
|
|
25769a9435
|
||
|
|
6c76d688b5
|
||
|
|
790c58f2b6
|
||
|
|
1eba863cc4
|
||
|
|
fbe5739d82
|
||
|
|
f8f8ef7dd3
|
||
|
|
ecc375ef41
|
||
|
|
9e17e58ecb
|
||
|
|
18f7e7b7c1
|
||
|
|
b15b09cc1e
|
||
|
|
49f2f85f79
|
||
|
|
2245383d9e
|
||
|
|
e619a6b509
|
||
|
|
fb9e750fe2
|
||
|
|
457aa0e4a5
|
||
|
|
761b91b7db
|
||
|
|
31f4472a8a
|
||
|
|
a79585f8de
|
||
|
|
69fbbbb51a
|
||
|
|
5eecbfc6f8
|
||
|
|
9121780d82
|
||
|
|
6691aa3526
|
||
|
|
582163ab46 | ||
|
|
394a70319f
|
||
|
|
4d340abdcf
|
||
|
|
6b9cfe46a0
|
||
|
|
1d4707fb20
|
||
|
|
d673024a10
|
||
|
|
3513aae088
|
||
|
|
83c43d0261
|
||
|
|
53cd8aeb5d
|
||
|
|
65b861d7ee
|
||
|
|
a5432e59d0
|
||
|
|
e67b45e9cd
|
||
|
|
8a8d9db7f9
|
||
|
|
602cf3bf13
|
||
|
|
ab2e43e8dd
|
||
|
|
49b39c34eb
|
||
|
|
fb5946fba5
|
||
|
|
3ff4d51778
|
||
|
|
49d1bf4bad
|
||
|
|
6a67a7de98
|
||
|
|
f132d285e9
|
||
|
|
f97b6e10d3
|
||
|
|
90509516dd
|
||
|
|
0a35505fa4
|
||
|
|
80a674436a
|
||
|
|
50bf2a4614
|
||
|
|
2f69be49e1
|
||
|
|
40fb8a4836
|
||
|
|
0da9ffee9b
|
||
|
|
c88e3d1bfe
|
||
|
|
ae76ce0abd
|
||
|
|
d17b2518df | ||
|
|
4901a2d384
|
||
|
|
47bf5cdd17
|
||
|
|
076c0cd604
|
||
|
|
c4ccc451ec
|
||
|
|
3d9bb9c2e0
|
||
|
|
4472cd0bdc
|
||
|
|
efc36e223c
|
||
|
|
af2b82616f
|
||
|
|
6f5d7ff84b | ||
|
|
4ba9468fae
|
||
|
|
7905ddb7bf
|
||
|
|
fdef4caa65
|
||
|
|
ebaf63d541
|
||
|
|
0e92973a05
|
||
|
|
6a4fa8ee0d
|
||
|
|
0081c86d1e
|
||
|
|
051fdee9b9
|
||
|
|
20330e19df
|
||
|
|
bb5c9d8fd6
|
||
|
|
18ae530edf
|
||
|
|
294897df54
|
||
|
|
4fcafe88a7
|
||
|
|
968e4afc8f
|
||
|
|
4193b884b0
|
||
|
|
9371de1b4a
|
||
|
|
c5c7f96c1a
|
||
|
|
e721642a10
|
||
|
|
4f0b18cc3c
|
||
|
|
904e26f56e
|
||
|
|
7a3642296a
|
||
|
|
87e57aea0e
|
||
|
|
ea256790ec
|
||
|
|
4cbd824ee0
|
||
|
|
4db1a4b32e
|
||
|
|
c060e05553
|
||
|
|
92cd195276
|
||
|
|
f9b270fef3
|
||
|
|
3f12dfd8ba
|
||
|
|
d7e57f30eb
|
||
|
|
ff822561cd
|
||
|
|
273973f4b6
|
||
|
|
c648e2df85
|
||
|
|
9b7e0ef169
|
||
|
|
6eccd248ea
|
||
|
|
eaaa1c5da8
|
||
|
|
95776cda5c
|
||
|
|
8ae0323dcc
|
||
|
|
f2d0020d92
|
||
|
|
67f3004eb0
|
||
|
|
f933c0616b | ||
|
|
a240c6f901
|
||
|
|
e2c2ae0360
|
||
|
|
bcd0117cdd
|
||
|
|
83f233cc99
|
||
|
|
4f21eab7b1
|
||
|
|
864ddf7efe
|
||
|
|
9d3636cc49
|
||
|
|
ce4f656030
|
||
|
|
a94f080cde
|
||
|
|
71ca873c7a
|
||
|
|
6e0d13e1fb
|
||
|
|
059c4d999a
|
||
|
|
f52e357e8a
|
||
|
|
761496be5c
|
||
|
|
551972d876
|
||
|
|
81c2fc4d43
|
||
|
|
3e542fcbfa
|
||
|
|
c9ab2c593d
|
||
|
|
0c9e00e90a
|
||
|
|
ea17972478
|
||
|
|
3d40df9755
|
||
|
|
b4ac348645
|
||
|
|
374611f66c
|
||
|
|
39b66fd626
|
||
|
|
75dca322b4 | ||
|
|
cfdae1ddfa
|
||
|
|
054a6c7073
|
||
|
|
e93d9e6cf5
|
||
|
|
30d99c6fc3
|
||
|
|
56c9b44c93
|
||
|
|
919ae5a863
|
||
|
|
43b8e546f6
|
||
|
|
b90aef662b
|
||
|
|
1da47863ae
|
||
|
|
81bd5c1914
|
||
|
|
b14f9a638f
|
||
|
|
8ff3a5a7a8
|
||
|
|
48c77bd6a2
|
||
|
|
35a017c1dc | ||
|
|
a3e8a10da9
|
||
|
|
142b96836e
|
||
|
|
9be0d2ec2d
|
||
|
|
fd817650e7
|
||
|
|
3c6cb96a9b
|
||
|
|
c4537454f9
|
||
|
|
82cdaa433e
|
||
|
|
32dd3ff43f
|
||
|
|
6a5840faaa
|
||
|
|
5b0a3b064d
|
||
|
|
14b8bb9790
|
||
|
|
650f4a5903 | ||
|
|
c50410a6da | ||
|
|
b2a676cd8b | ||
|
|
50a75e4543 | ||
|
|
22172ac66f | ||
|
|
392aaa343d | ||
|
|
d924f47d58 | ||
|
|
3b70cbe724 | ||
|
|
5c3233f883 | ||
|
|
b570bfa9d4 | ||
|
|
270cb25285 | ||
|
|
7d3b0db924 | ||
|
|
74d310e113 | ||
|
|
45afb1c090 | ||
|
|
40fc2f8bbf
|
||
|
|
a9de5a92e1
|
||
|
|
c592b00c3f
|
||
|
|
2c81be4d12
|
||
|
|
f10289f7b6
|
||
|
|
c1f06b4ce5 | ||
|
|
9ad3dbba90
|
||
|
|
12c62f87f7
|
||
|
|
635f1ae077
|
||
|
|
c89bd2f63f
|
||
|
|
2f94a8a2ca | ||
|
|
85b0d35af0 | ||
|
|
b25acacb1e | ||
|
|
c05a43f3b1
|
||
|
|
d99976daa9
|
||
|
|
62f53d09bf
|
||
|
|
88c78ec892
|
||
|
|
006ca76922
|
||
|
|
8cb2e2a447
|
||
|
|
517c85d003
|
||
|
|
83556b710c
|
||
|
|
a43b9091f8
|
||
|
|
e83a1bef49
|
||
|
|
1147a8262c
|
||
|
|
8a987cc55e
|
||
|
|
b28ca864f9
|
||
|
|
4bf77a5c55
|
||
|
|
4ebc20f182
|
||
|
|
9eff1ccaed
|
||
|
|
66170c98dd
|
||
|
|
397c054c66
|
||
|
|
0611551dc0
|
||
|
|
008f88d995
|
||
|
|
7fe450bc07
|
||
|
|
a88ec71b44
|
||
|
|
8a5a3b67f7
|
||
|
|
63771da876
|
||
|
|
68891fafdb
|
||
|
|
df31300a0b
|
||
|
|
16fb782bbf
|
||
|
|
ed3e013a53
|
||
|
|
0bf568a655
|
||
|
|
a5e481af96
|
||
|
|
78a9641c14
|
||
|
|
b517000650
|
||
|
|
1d20eb3c3e
|
||
|
|
8248ccbcd5
|
||
|
|
b880b9bace
|
||
|
|
2da374410b
|
||
|
|
fff8f9493b
|
||
|
|
987baaa307
|
||
|
|
9512ea9b52
|
||
|
|
b0f3c1c97d
|
||
|
|
e823b97cf2
|
||
|
|
203859ee5f
|
||
|
|
4870e2fa30
|
||
|
|
970b702a2b
|
||
|
|
053288b227
|
||
|
|
e9b975bea7
|
||
|
|
89fda44db8
|
||
|
|
fac8536095
|
||
|
|
c79e65b6b7
|
||
|
|
677e65ff6d
|
||
|
|
0c7589d524
|
||
|
|
da27ae2bad
|
||
|
|
f8cd58bcb3 | ||
|
|
3671a289b8 | ||
|
|
48f4dbec50 | ||
|
|
bdb29006e9 | ||
|
|
5ea324f103 | ||
|
|
2f0cd32c18 | ||
|
|
e8911d40df | ||
|
|
89f173e7e3 | ||
|
|
b0ab3f6ace | ||
|
|
641af435d4 | ||
|
|
16a2f20af0 | ||
|
|
79734a6dcf | ||
|
|
2e2ff1b150 | ||
|
|
5ce899ee6e | ||
|
|
e041080773 | ||
|
|
f8448fbb51 | ||
|
|
8defcd29a4 | ||
|
|
fba60df9d1 | ||
|
|
a4ff1f44ba | ||
|
|
7b75f4e01b | ||
|
|
a9fc69e70f | ||
|
|
a06c574327 | ||
|
|
420ae2f45b | ||
|
|
850073a096 | ||
|
|
e40aa88253 | ||
|
|
ff92b0149a | ||
|
|
e6049a17a2 | ||
|
|
9bc1bc13f2 | ||
|
|
b9cda08a4e | ||
|
|
4e2193fe6f | ||
|
|
155af45378 | ||
|
|
66d6bbc772 | ||
|
|
066a6d4e6a | ||
|
|
94f5834b61 | ||
|
|
947286bd09 | ||
|
|
a0dee353b5 | ||
|
|
308b1f2348 | ||
|
|
897780cf1c | ||
|
|
0f8a8011be | ||
|
|
7ebfd960b1 | ||
|
|
7b3d64996d | ||
|
|
e578a2f310 | ||
|
|
eecb4f699b | ||
|
|
9f4f7a759e | ||
|
|
11a98eb184 | ||
|
|
ed0bc5e19f | ||
|
|
020a2d2668 | ||
|
|
27cdd3ee4b | ||
|
|
43a95979e1 | ||
|
|
800106f9cb | ||
|
|
e5c50e48d3 | ||
|
|
08e43bed71 | ||
|
|
6773b8cddb | ||
|
|
23c030fd00 | ||
|
|
d5e67bb16d | ||
|
|
188e3a0fa6 | ||
|
|
b31ee022af | ||
|
|
87e063e03e | ||
|
|
48fe26e4b1 | ||
|
|
88fcc64537 | ||
|
|
d9beabbbbc | ||
|
|
3da0a7d950 | ||
|
|
50b1db75f0 | ||
|
|
94bb96d208 | ||
|
|
93490276fd | ||
|
|
73a7bf5a61 | ||
|
|
8a1f8f8e2c | ||
|
|
39c88c11c4 | ||
|
|
c2e956a639 | ||
|
|
368f31d1fa | ||
|
|
d3390dc490 | ||
|
|
eb36b6a52f | ||
|
|
be882000ad | ||
|
|
266c1c6a5b | ||
|
|
7864fe1e0f | ||
|
|
fe08fe0e2e | ||
|
|
87775a9471 | ||
|
|
8089457aa8 | ||
|
|
e443f92ddb | ||
|
|
cb65666600 | ||
|
|
6ed174e5dc | ||
|
|
dd7f0ef3bf | ||
|
|
ec8e43a2a9 | ||
|
|
a83b6b55cd | ||
|
|
d43f15e096 | ||
|
|
e09fdefa68 | ||
|
|
2b483749bc | ||
|
|
048d71920c | ||
|
|
47366086d5 | ||
|
|
f9a73be82b | ||
|
|
e7918469e5 | ||
|
|
687559a1a3 | ||
|
|
398c11e607 | ||
|
|
191544d28b | ||
|
|
647c2439e3 | ||
|
|
da2a6f347a | ||
|
|
dca341f35e | ||
|
|
d38ddcd79e | ||
|
|
03675349d8 | ||
|
|
72768ba7b5 | ||
|
|
a5477db6b6 | ||
|
|
c146e8587b | ||
|
|
24b65b0395 | ||
|
|
2f42691d2b | ||
|
|
ea619bd693 | ||
|
|
35a56e74bb | ||
|
|
6fb2358161 | ||
|
|
a039fb871b | ||
|
|
a19da6cda5 | ||
|
|
e5ba980865 | ||
|
|
f95ee8fab8 | ||
|
|
120706ef3f | ||
|
|
58da20f276 | ||
|
|
64af68e2d6 | ||
|
|
76a8740644 | ||
|
|
0863fafec0 | ||
|
|
42579810a2 | ||
|
|
47e6b91b82 | ||
|
|
dd38344319 | ||
|
|
7964aa5f6b | ||
|
|
85d372ecec | ||
|
|
6a2b27b875 | ||
|
|
3b8a82fa42 | ||
|
|
551e17b37b | ||
|
|
acccb74b4e | ||
|
|
39be8fa4b8 | ||
|
|
fc0c183ca3 | ||
|
|
329a461721 | ||
|
|
35b178fe3c | ||
|
|
7464629597 | ||
|
|
cb3982e57c | ||
|
|
08eae297fd | ||
|
|
c46128ed3e | ||
|
|
78a55fb87a | ||
|
|
43a5162a15 | ||
|
|
cb5cb68bf4 | ||
|
|
b79a655d56 | ||
|
|
5b19c24f84 | ||
|
|
e3716bda56 | ||
|
|
b710a26b3e | ||
|
|
e5507e1e61 | ||
|
|
85f3d0b500 | ||
|
|
27811f4891 | ||
|
|
b22987f21b | ||
|
|
8665838472 | ||
|
|
da3fb2c094 | ||
|
|
485d696e85 | ||
|
|
687f2b2edf | ||
|
|
296a27a409 | ||
|
|
c5ceff6fb5 | ||
|
|
2cb697f3dc | ||
|
|
56fd26935d | ||
|
|
002b528ef8 | ||
|
|
1f60f5b3a4 | ||
|
|
cbafa4af61 | ||
|
|
19f936b6c0 | ||
|
|
016f3c73e3 | ||
|
|
57541eca89 | ||
|
|
b7e568fb98 | ||
|
|
438cff532b | ||
|
|
3f71490d14 | ||
|
|
2221a8c9bf | ||
|
|
7255588bcc | ||
|
|
c732bcddb1 | ||
|
|
9f363e46fc | ||
|
|
99242ac3d3 | ||
|
|
3d6aabda06 | ||
|
|
d28a5e095a | ||
|
|
8104852abf | ||
|
|
459c108b13 | ||
|
|
d318ff7d90 | ||
|
|
1371b84687 | ||
|
|
2cc679dcac | ||
|
|
04f5a1bbe1 | ||
|
|
83c2fc918f | ||
|
|
63cfa5e298 | ||
|
|
3e815691df | ||
|
|
0fc0031574 | ||
|
|
6d335284ee | ||
|
|
1a9010ac06 | ||
|
|
4f40fa7813 | ||
|
|
b7346b3816 | ||
|
|
400e47f616 | ||
|
|
5d499bbfbe | ||
|
|
e0d5c44184 | ||
|
|
f100998800 | ||
|
|
5bc31c91fa | ||
|
|
4ca929d47d | ||
|
|
4ba43ea76a | ||
|
|
34232a5504 | ||
|
|
9b7464ab69 | ||
|
|
f003f38f74 | ||
|
|
91b2cecb19 | ||
|
|
8c11661fb4 | ||
|
|
9aabe0442d | ||
|
|
b463720512 | ||
|
|
6bc7c67589 | ||
|
|
443543d70f | ||
|
|
46a94b7816 | ||
|
|
b2e297bbb3 | ||
|
|
16906e960e | ||
|
|
91bc734612 | ||
|
|
fa5546874a | ||
|
|
3921d159ef | ||
|
|
cfcdc3149f | ||
|
|
717017fad5 | ||
|
|
b8f957130d | ||
|
|
5824079b41 | ||
|
|
fbcfbb7156 | ||
|
|
b738984235 | ||
|
|
c29333f8e0 | ||
|
|
123cf8d437 | ||
|
|
9293c4e480 | ||
|
|
fa5919aa1a | ||
|
|
194f2bd2a5 | ||
|
|
0ae6584b02 | ||
|
|
397aa76e15 | ||
|
|
43997b9117 | ||
|
|
de5fe818e6 | ||
|
|
e3e315a068 | ||
|
|
5430a43589 | ||
|
|
a44172f509 | ||
|
|
94bfd79afa | ||
|
|
2b4de68f0a | ||
|
|
282b413553 | ||
|
|
5164585360 | ||
|
|
f6642ecb0f | ||
|
|
928042d71b | ||
|
|
91cb3c4344 | ||
|
|
eff79c4778 | ||
|
|
f7776d5067 | ||
|
|
68aae0bec1 | ||
|
|
cb7eb3b711 | ||
|
|
2a6b661285 | ||
|
|
d2ebf94453 | ||
|
|
707f9ba7ce | ||
|
|
72e1d5e03b | ||
|
|
a612074aa4 | ||
|
|
86bbccb7f9 | ||
|
|
11b7b57343 | ||
|
|
b682e53abe | ||
|
|
ce877834cd | ||
|
|
c69d171c3a | ||
|
|
1b24aa2421 | ||
|
|
c61a4a70fc | ||
|
|
bdefcc622f | ||
|
|
67336323c2 | ||
|
|
3ac9e7c599 | ||
|
|
73f70fceff | ||
|
|
e353efc81d | ||
|
|
a37c427242 | ||
|
|
d3c9b1f8a6 | ||
|
|
0ca029babb | ||
|
|
492d113307 | ||
|
|
f2bd48e452 | ||
|
|
ddb7ee1ec2 | ||
|
|
7d62e94306 | ||
|
|
4961d76b96 | ||
|
|
12524e6e68 | ||
|
|
79f30ea275 | ||
|
|
6ec2bf2880 | ||
|
|
7708c26b71 | ||
|
|
4f300c6f82 | ||
|
|
f4d67e759e | ||
|
|
e9b76217f7 | ||
|
|
85f801df4d | ||
|
|
01d5f2cda9 | ||
|
|
601196e3f6 | ||
|
|
cbf0be20a5 | ||
|
|
e51421780e | ||
|
|
2240282155 | ||
|
|
5700b32c84 | ||
|
|
4d72e0860e | ||
|
|
994daf11d3 | ||
|
|
79b92427aa | ||
|
|
6938c74014 | ||
|
|
058a6e63f2 | ||
|
|
1be6b7a509 | ||
|
|
ef532f0779 | ||
|
|
095a23df6d | ||
|
|
7043521eaa | ||
|
|
5eaafaeee6 | ||
|
|
ec10949c64 | ||
|
|
0e882cea17 | ||
|
|
4ad5cab37b | ||
|
|
2b6139050d | ||
|
|
14be16ce74 | ||
|
|
c379ecf317 | ||
|
|
eadbc774e3 | ||
|
|
90787cdc53 | ||
|
|
337733c3d3 | ||
|
|
b7048a4422 | ||
|
|
a036f1c4bb | ||
|
|
f9b1ab3ba7 | ||
|
|
47599f000a | ||
|
|
efb1664443 | ||
|
|
2c016621b6 | ||
|
|
f2a2b338cd | ||
|
|
715a66fd35 | ||
|
|
cc73f8c5d6 | ||
|
|
9b54b2b57d | ||
|
|
fe4d095f21 | ||
|
|
f67fa5c764 | ||
|
|
06249f29cf | ||
|
|
242efc9ae7 | ||
|
|
c86572e6f3 | ||
|
|
03b458c1b2 | ||
|
|
aa2e50366b | ||
|
|
657a47c9ad | ||
|
|
5d718bf4ea | ||
|
|
082f847b1f | ||
|
|
54e4d74d0a | ||
|
|
1437d190e5 | ||
|
|
a95b26551c | ||
|
|
c96f6d9381 | ||
|
|
c7df50d899 | ||
|
|
29619ada08 | ||
|
|
222c8a25a4 | ||
|
|
eac9b7c2e2 | ||
|
|
31d6349d71 | ||
|
|
b67f4daf3a | ||
|
|
81b81d9036 | ||
|
|
2d06f368f8 | ||
|
|
d0dc0f2bd1 | ||
|
|
e301c0fd3e | ||
|
|
5879661267 | ||
|
|
ad1f070557 | ||
|
|
c20986b7b7 | ||
|
|
153f425c99 | ||
|
|
6eb202d4b2 | ||
|
|
f7e46e16a3 | ||
|
|
36d7e22040 | ||
|
|
b24c4806f5 | ||
|
|
8ab79ad9f4 | ||
|
|
4f4533e533 | ||
|
|
e569ffe8f4 | ||
|
|
e09709651c | ||
|
|
39d7b6d55c | ||
|
|
2b2a328062 | ||
|
|
65e1495b44 | ||
|
|
3400f5843e | ||
|
|
e580691c1d | ||
|
|
bb0e817943 | ||
|
|
b7e4db6acd | ||
|
|
366fe5d613 | ||
|
|
428f2706c3 | ||
|
|
7f2b4596f7 | ||
|
|
ab9bdf3822 | ||
|
|
585667dfe8 | ||
|
|
151e6ed1f3 | ||
|
|
0685d1caac | ||
|
|
f50ba83d31 | ||
|
|
24c043386d | ||
|
|
9d868cb2f4 | ||
|
|
be308fdb4a | ||
|
|
73a5f5287b | ||
|
|
acafb15215 | ||
|
|
79b9e1b22a | ||
|
|
7ebdef3116 | ||
|
|
a3fbaa0038 | ||
|
|
fea2163a01 | ||
|
|
d55443968f | ||
|
|
b08a2681a2 | ||
|
|
48af7e5e76 | ||
|
|
98f48441c9 | ||
|
|
65f2836379 | ||
|
|
3548d4e939 | ||
|
|
eb03f34a7e | ||
|
|
40b1a9fbdf | ||
|
|
76a31acadc | ||
|
|
0f71d786f7 | ||
|
|
fec2508091 | ||
|
|
4f087754e2 | ||
|
|
520dbb23f2 | ||
|
|
e8f2538510 | ||
|
|
fa6b271994 | ||
|
|
c4aa6b4ffc | ||
|
|
4bb1bac5d1 | ||
|
|
79815f99fc | ||
|
|
1342fb5cc1 | ||
|
|
eae488b44f | ||
|
|
72200683fe | ||
|
|
c506d608c2 | ||
|
|
69348680d5 | ||
|
|
f6b359955d | ||
|
|
0d4a68daea | ||
|
|
dfff94f319 | ||
|
|
8cff55b5ed | ||
|
|
d61143c2ad | ||
|
|
1afe999beb | ||
|
|
0dd3def0d5 | ||
|
|
0a1d81be76 | ||
|
|
91ea0d1c2a | ||
|
|
5fe9136aa1 | ||
|
|
3ef91d3617 | ||
|
|
0aa73c2f62 | ||
|
|
d8ad26f83c | ||
|
|
85a9f127bd | ||
|
|
edd5248d50 | ||
|
|
892d13212d | ||
|
|
0ab485f122 | ||
|
|
c220b3d511 | ||
|
|
57bb22497e | ||
|
|
1ae95ba4bc | ||
|
|
90b3684cdb | ||
|
|
15d6c427eb | ||
|
|
c68a428bf5 | ||
|
|
a289b192e4 | ||
|
|
356f3af919 | ||
|
|
a660ec4cca | ||
|
|
4c9ddcb272 | ||
|
|
5131a36e20 | ||
|
|
87c055563d | ||
|
|
124c27cf17 | ||
|
|
4f0dbf0f92 | ||
|
|
6e24ca230d | ||
|
|
ac6e1d2525 | ||
|
|
610b74d3a5 | ||
|
|
7f295aaacf | ||
|
|
a47669ff75 | ||
|
|
9f84eb8d4d | ||
|
|
5f36143b44 | ||
|
|
2d491dd393 | ||
|
|
63845afdc3 | ||
|
|
3cfcfff786 | ||
|
|
9f801df5dc | ||
|
|
21b8c6ea8f | ||
|
|
0807f9912c | ||
|
|
90a71ba75d | ||
|
|
2e26244992 | ||
|
|
8f1e713451 | ||
|
|
b7b5c7b0da | ||
|
|
cb42813597 | ||
|
|
91c46f465b | ||
|
|
435044dddd | ||
|
|
cccf9968e7 | ||
|
|
f1e4185193 | ||
|
|
dc538af7ba | ||
|
|
574ca07afe | ||
|
|
f18b2ed1a5 | ||
|
|
bc568e2083 | ||
|
|
bffdf9d190 | ||
|
|
e7af4563a2 | ||
|
|
5fc5adb14d | ||
|
|
f3ccf5e633 | ||
|
|
46cacc4a7d | ||
|
|
ac8edcee32 | ||
|
|
919c44c727 | ||
|
|
95921ae727 | ||
|
|
134f043e9c | ||
|
|
a7a14a66a6 | ||
|
|
148d92164a | ||
|
|
5ea1b0bce4 | ||
|
|
65aefadcdc | ||
|
|
1bc324fb9f | ||
|
|
28953ae1d9 | ||
|
|
3760e244a9 | ||
|
|
e86d755b69 | ||
|
|
6f560a1b34 | ||
|
|
6fe573ef7b | ||
|
|
2a7baf020f | ||
|
|
2e1815783a | ||
|
|
bab86c9f0b | ||
|
|
2716e9af39 | ||
|
|
9a303c4510 | ||
|
|
e547971a6f | ||
|
|
e9108ead86 | ||
|
|
6bbcb25138 | ||
|
|
98462ca34d | ||
|
|
7939dd0b44 | ||
|
|
3d966ec076 | ||
|
|
6afedb35df | ||
|
|
cdac63e05a | ||
|
|
8040cc28c4 | ||
|
|
264db40bdc | ||
|
|
2da1957c28 | ||
|
|
2297fa9c13 | ||
|
|
8175e76a77 | ||
|
|
2709dde8fa | ||
|
|
7c518efba8 | ||
|
|
b5fa2aef91 | ||
|
|
d2f6c34e85 | ||
|
|
cd1ccfadaf | ||
|
|
8ff6bff252 | ||
|
|
52f6cb2f30 | ||
|
|
e7af718a0f | ||
|
|
d211c92bf8 | ||
|
|
4acc988cfe | ||
|
|
270f236f95 | ||
|
|
2da12bb71f | ||
|
|
b479add03d | ||
|
|
ca9db6dc18 | ||
|
|
12c7c7b4ed | ||
|
|
e12c0e51c8 | ||
|
|
6683c70195 | ||
|
|
aef1cbd201 | ||
|
|
06786aff28 | ||
|
|
55439c268f | ||
|
|
3e4cf764c8 | ||
|
|
4e359f5eb9 | ||
|
|
2ff3746df2 | ||
|
|
62982d7ffb | ||
|
|
ec49cdb6ad | ||
|
|
4b64827f20 | ||
|
|
944c4cb564 | ||
|
|
db19655b60 | ||
|
|
1975f11338 | ||
|
|
59515d5276 | ||
|
|
fea9529bc8 | ||
|
|
1f6259c157 | ||
|
|
8908e12c59 | ||
|
|
a7d6bc2c5c | ||
|
|
97fd807c2c | ||
|
|
b31f7d64ec | ||
|
|
bdd574161e | ||
|
|
e23e36cbfa | ||
|
|
fb796e21e4 | ||
|
|
dd46c02f09 | ||
|
|
d1835c71b7 | ||
|
|
55332864ad | ||
|
|
96a8ef3bcc | ||
|
|
79cfbfe83b | ||
|
|
e7fa95ce8f | ||
|
|
a819dde71c | ||
|
|
281cfd366b | ||
|
|
f1ba7e76f3 | ||
|
|
2da72d9b1a | ||
|
|
4cdc18fe7e | ||
|
|
4400116bdd | ||
|
|
086d6d1ab5 | ||
|
|
02e86fd2e9 | ||
|
|
7310aa6971 | ||
|
|
4927a26c92 | ||
|
|
ee6bec2e0d | ||
|
|
def230bf30 | ||
|
|
0a4d568b06 | ||
|
|
69f8e1f1bd | ||
|
|
6f2cb4e05e | ||
|
|
db1fbb700c | ||
|
|
842a37eb7b | ||
|
|
76ff38ed10 | ||
|
|
db6b2be101 | ||
|
|
a998500839 | ||
|
|
dd5e686d03 | ||
|
|
c9f28e27d2 | ||
|
|
1bbeb4f50d | ||
|
|
410f6b261e | ||
|
|
7b21b60c11 | ||
|
|
e5d8b71d0a | ||
|
|
d96099b9d3 | ||
|
|
ffe9fc9349 | ||
|
|
b7415ba521 | ||
|
|
38e689ebb2 | ||
|
|
09caaee58d | ||
|
|
e8f8fc501d | ||
|
|
e6038b854e | ||
|
|
dad01b45e4 | ||
|
|
356250ba8c | ||
|
|
d1f7c13488 | ||
|
|
6f614eddd3 | ||
|
|
5142c94f84 | ||
|
|
c961096b70 | ||
|
|
c6050c6d21 | ||
|
|
8bbc6ae02d | ||
|
|
0adaf7d6c4 | ||
|
|
452c340112 | ||
|
|
ffabe96b15 | ||
|
|
3fc1183be6 | ||
|
|
de85ac9237 | ||
|
|
86dd573e2f | ||
|
|
b0c7d60d5a | ||
|
|
507fa102b9 | ||
|
|
95f079474e | ||
|
|
f951f313d2 | ||
|
|
50e11f22a1 | ||
|
|
6dac344a35 | ||
|
|
caf51fdc06 | ||
|
|
7d84d383d6 | ||
|
|
80d7ad8789 | ||
|
|
be5dc42eb1 | ||
|
|
c8961f60fa | ||
|
|
c757687eba | ||
|
|
dd6d59cf97 | ||
|
|
909f4ec2b7 | ||
|
|
4bf06d9ee5 | ||
|
|
587f9fc1ec | ||
|
|
841e5c5395 | ||
|
|
c383a5cc22 | ||
|
|
003ea3baa7 | ||
|
|
0fa98340c1 | ||
|
|
64e36f038e | ||
|
|
78d95048d5 | ||
|
|
c47f8dbba3 | ||
|
|
2dc206ff56 | ||
|
|
72f7811f3d | ||
|
|
c8146814df | ||
|
|
a01e5df650 | ||
|
|
9bd151cdc2 | ||
|
|
e2ed918437 | ||
|
|
bc658433e2 | ||
|
|
db1dd6f3df | ||
|
|
edca481362 | ||
|
|
bc1ca6274d | ||
|
|
2335dc7566 | ||
|
|
94ab040693 | ||
|
|
b4b4678e26 | ||
|
|
6c93d2fd85 | ||
|
|
4ca33cb007 | ||
|
|
96515fd16c | ||
|
|
d736e2d947 | ||
|
|
7631d99ce6 | ||
|
|
6ddeed82c0 | ||
|
|
ffc8242aae | ||
|
|
2767bf70d9 | ||
|
|
fa7c7794d0 | ||
|
|
015e9e54dc | ||
|
|
7dc9863b49 | ||
|
|
f13960a56a | ||
|
|
ba6370d206 | ||
|
|
32fd8c481a | ||
|
|
e9264e6f13 | ||
|
|
93e6a056d4 | ||
|
|
3610f2cbd4 | ||
|
|
0c51544e2e | ||
|
|
8f1f477054 | ||
|
|
0b72925f09 | ||
|
|
9fb477facc | ||
|
|
3c474e5551 | ||
|
|
9217f0aaf5 | ||
|
|
dddf4ccf6e | ||
|
|
4de010cb1e | ||
|
|
d2ed7a4a80 | ||
|
|
311d5c42a8 | ||
|
|
3c6a884663 | ||
|
|
1bfd0018b1 | ||
|
|
2c3a9b93c7 | ||
|
|
0961220fdd | ||
|
|
c8b2f28c7c | ||
|
|
3f7cc163ec | ||
|
|
8ede84c176 | ||
|
|
6a7f62f2c2 | ||
|
|
0b82024caa | ||
|
|
fd057ebb05 | ||
|
|
47e6958446 | ||
|
|
690fe46931 | ||
|
|
10ec7b55d0 | ||
|
|
5079db5ceb | ||
|
|
dd4f664724 | ||
|
|
932e8ca093 | ||
|
|
193e6eb9ca | ||
|
|
e28b878a68 | ||
|
|
4d6f64cf96 | ||
|
|
6441fc09e4 | ||
|
|
d8c54b4632 | ||
|
|
a8f2c9787d | ||
|
|
dfb10c1b44 | ||
|
|
95bd5b539f | ||
|
|
c811a56557 | ||
|
|
5892ddcad8 | ||
|
|
111a81766e | ||
|
|
5819045a01 | ||
|
|
b8f19e11ff | ||
|
|
d3c73579d9 | ||
|
|
5f001ee091 | ||
|
|
741c67c7cb | ||
|
|
9456406009 | ||
|
|
8464f96e40 | ||
|
|
3c23e0fb93 | ||
|
|
18807a642a | ||
|
|
975f77e907 | ||
|
|
bd42042a61 | ||
|
|
9134a7d9f6 | ||
|
|
53d65c31db | ||
|
|
612f15ebad | ||
|
|
33378c96ec | ||
|
|
703e2f51be | ||
|
|
7d8fa7f1c4 | ||
|
|
62089ef2c2 | ||
|
|
1d946aa525 | ||
|
|
19b62a632b | ||
|
|
cbd5b7fc5e | ||
|
|
58673fb385 | ||
|
|
26ea6a6c69 | ||
|
|
1727d34853 | ||
|
|
fc3b854add | ||
|
|
dba8e5d699 | ||
|
|
f3df6f7202 | ||
|
|
3cbf1eba30 | ||
|
|
4623cfbe06 | ||
|
|
d4d8e0045b | ||
|
|
ea4f1643d4 | ||
|
|
5a2ea3496e | ||
|
|
6dd77dd632 | ||
|
|
d4279b0cb7 | ||
|
|
601222a60d | ||
|
|
9c541735b7 | ||
|
|
858f7139ff | ||
|
|
a326ad3c66 | ||
|
|
33751a06fe | ||
|
|
8cbe92ca46 | ||
|
|
5587a358ce | ||
|
|
40b52dd517 | ||
|
|
5424869d8e | ||
|
|
68a2534d1b | ||
|
|
1699190334 | ||
|
|
d86d96acc1 | ||
|
|
f70dbf9cf3 | ||
|
|
33a1681536 | ||
|
|
fcb8da95ca | ||
|
|
e8148ab4dc | ||
|
|
c14f06615e | ||
|
|
1c0b28eacd | ||
|
|
d317a84b09 | ||
|
|
3972cf0194 | ||
|
|
6d408ac2b1 | ||
|
|
8338f8aaa0 | ||
|
|
fbd0561420 | ||
|
|
de854cc02c | ||
|
|
822e161e2e | ||
|
|
b60bf9fdf9 | ||
|
|
14b0a043d4 | ||
|
|
a2f5d66597 | ||
|
|
c02bc26799 | ||
|
|
932afec74a | ||
|
|
3da67e7d97 | ||
|
|
0c95b958aa | ||
|
|
8895ac329a | ||
|
|
cf0416e976 | ||
|
|
f8f3e4d9e8 | ||
|
|
d6bee9aa6d | ||
|
|
2d5e99a0d6 | ||
|
|
97b71347a6 | ||
|
|
10e3a0814f | ||
|
|
f909df204a | ||
|
|
661e6cc5da | ||
|
|
b2b911ec81 | ||
|
|
f238077944 | ||
|
|
3c930dacb8 | ||
|
|
6dcb46c0b8 | ||
|
|
27c7a5a3ad | ||
|
|
846bdfdc88 | ||
|
|
a2026cb3fd | ||
|
|
06fa539293 | ||
|
|
752f69d3ef | ||
|
|
897997b8ac | ||
|
|
526fa11c20 | ||
|
|
8eda98ff4c | ||
|
|
99d7a26b98 | ||
|
|
0aaadf9536 | ||
|
|
9adcbecce4 | ||
|
|
6605a84f2c | ||
|
|
6c9510d8f4 | ||
|
|
03a62dc23f | ||
|
|
93efacbef5 | ||
|
|
b6b28de8e2 | ||
|
|
faaed40b39 | ||
|
|
6b035f64d2 | ||
|
|
9f049dcb18 | ||
|
|
0141449e4f | ||
|
|
4ce49f259d | ||
|
|
0f35569e05 | ||
|
|
1c4dabed72 | ||
|
|
38114c0639 | ||
|
|
527c8370f1 | ||
|
|
6a9a57e2bc | ||
|
|
7b6f1b510e | ||
|
|
94bc7547d6 | ||
|
|
5a4552aaff | ||
|
|
06e314d301 | ||
|
|
8bead301ef | ||
|
|
6282445f7d | ||
|
|
bf244533f7 | ||
|
|
5ebfaf24ee | ||
|
|
0c0283dc02 | ||
|
|
375b08be87 | ||
|
|
cbc8f94b0a | ||
|
|
bdac8d163d | ||
|
|
1f61f37841 | ||
|
|
51d523ae72 | ||
|
|
3f9e4962e6 | ||
|
|
f8fc4fe56b | ||
|
|
fb64b7e412 | ||
|
|
3209cfbc45 | ||
|
|
8a99476136 | ||
|
|
eb80f8d111 | ||
|
|
afde3ce54d | ||
|
|
c4b61fec17 | ||
|
|
0b74abf300 | ||
|
|
e6c3c9f1d4 | ||
|
|
4e7560b4ed | ||
|
|
542491b278 | ||
|
|
d36439355d | ||
|
|
4a80815b39 | ||
|
|
6dc57f2566 | ||
|
|
07e8511ce1 | ||
|
|
8e927831f5 | ||
|
|
2c533d2ab3 | ||
|
|
38208750e7 | ||
|
|
df14d7c306 | ||
|
|
b3612db7d2 | ||
|
|
8d90da659e | ||
|
|
f8ddbc0622 | ||
|
|
673b7054aa | ||
|
|
1472cbf257 | ||
|
|
d806935c58 | ||
|
|
6b56eb79e1 | ||
|
|
d2aea16744 | ||
|
|
bb800f032e | ||
|
|
64b9f9443e | ||
|
|
fd2d3a0e06 | ||
|
|
08d678bdb8 | ||
|
|
418007e572 | ||
|
|
4a1bccdf75 | ||
|
|
00c0b59e9d | ||
|
|
ac82c8ff0b | ||
|
|
f4bef8a090 | ||
|
|
d8a1055bff | ||
|
|
d672ce4d80 | ||
|
|
43ec361d03 | ||
|
|
c3c99c5f76 | ||
|
|
eb1e1421ab | ||
|
|
e8a1d87919 | ||
|
|
921ba6811d | ||
|
|
906dd241b4 | ||
|
|
3f0cd2ad64 | ||
|
|
41420d1954 | ||
|
|
6e5a72b170 | ||
|
|
4b19e6aec8 | ||
|
|
58572cbc36 | ||
|
|
096d5766bf | ||
|
|
f5c5b56492 | ||
|
|
69c69d63e6 | ||
|
|
3fd8b21867 | ||
|
|
8660e8cd85 | ||
|
|
8458f725f2 | ||
|
|
366678c965 | ||
|
|
336b5668db | ||
|
|
55886269ea | ||
|
|
0b3698595b | ||
|
|
05e43a39db | ||
|
|
5737ad3db2 | ||
|
|
4ac174eb9a | ||
|
|
895eec10b4 | ||
|
|
e0d891e89a | ||
|
|
adf7734b85 | ||
|
|
5362be9c21 | ||
|
|
847ece52f2 | ||
|
|
851c59d22c | ||
|
|
0669534bba | ||
|
|
05db47e62a | ||
|
|
4a0e608d1c | ||
|
|
45fe73af86 | ||
|
|
4d9fcd657f | ||
|
|
a057deb0fe | ||
|
|
4766210a7d | ||
|
|
fd26aae6d3 | ||
|
|
c5c092cc8e | ||
|
|
58c0a21d90 | ||
|
|
8dc567f966 | ||
|
|
942b2752f5 | ||
|
|
b9259353f4 | ||
|
|
86c614dd40 | ||
|
|
1a010a16a9 | ||
|
|
d5b5726b1e | ||
|
|
d06f3b6bdf | ||
|
|
97a28f716c | ||
|
|
f54bdfcea0 | ||
|
|
5958c4b0ba | ||
|
|
7c3db881c7 | ||
|
|
51ee2e1b2c | ||
|
|
baa813004b | ||
|
|
86b5269d3d | ||
|
|
860e6dacac | ||
|
|
22025bd89e | ||
|
|
ed9301455d | ||
|
|
35df84e059 | ||
|
|
62deebf310 | ||
|
|
7ed4bd5c01 | ||
|
|
c8eb9332b4 | ||
|
|
1df55f9168 | ||
|
|
b726c6aa96 | ||
|
|
0a71962652 | ||
|
|
160946ef74 | ||
|
|
1dc67317dc | ||
|
|
08f4a2e8bf | ||
|
|
11ffdaa8f7 | ||
|
|
0f853303a4 | ||
|
|
d225eb9b16 | ||
|
|
d926e4b8bc | ||
|
|
3e2df1d4d8 | ||
|
|
d670dbf081 | ||
|
|
f510a312e3 | ||
|
|
19c44e3d31 | ||
|
|
d0848aee67 | ||
|
|
f4b4b6811c | ||
|
|
fecb3f1f7b | ||
|
|
4c924c0763 | ||
|
|
f1e8d70554 | ||
|
|
7d11bc152e | ||
|
|
fdf0a3135a | ||
|
|
3a1a455c48 | ||
|
|
3a786e835b | ||
|
|
c70181132f | ||
|
|
538615a1f5 | ||
|
|
aa20a60a1c | ||
|
|
69fa1dac6c | ||
|
|
3ab349af6e | ||
|
|
97ac7deb2f | ||
|
|
3230cafb9f | ||
|
|
394284d8de | ||
|
|
6323b174c6 | ||
|
|
3d3e0e5139 | ||
|
|
ffc7d4bacc | ||
|
|
598236a1d2 | ||
|
|
69207519bd | ||
|
|
022eb1012f | ||
|
|
0a9c59f91e | ||
|
|
7ebb22b892 | ||
|
|
3dc7fc6f14 | ||
|
|
90dea7517b | ||
|
|
eae48f9564 | ||
|
|
dd7afba5f5 | ||
|
|
73357b6777 | ||
|
|
53df6bbcc6 | ||
|
|
9871559227 | ||
|
|
9cbead1ddc | ||
|
|
6402028c17 | ||
|
|
76bd65cf53 | ||
|
|
6e4113de11 | ||
|
|
12f37f76c7 | ||
|
|
acd77b2c0a | ||
|
|
f4fb4ec00d | ||
|
|
46ae4669ea | ||
|
|
67b2dbfe98 | ||
|
|
4f3b39fbfa | ||
|
|
a28fc52309 | ||
|
|
d5f0d60794 | ||
|
|
72e65587df | ||
|
|
b4d4d90784 | ||
|
|
3f81fb759d | ||
|
|
d995b39e02 | ||
|
|
3bd09a1aa4 | ||
|
|
a6ff951c98 | ||
|
|
604b1557e8 | ||
|
|
279bd5c71a | ||
|
|
97dfb02ab6 | ||
|
|
32c7b02303 | ||
|
|
e135835e61 | ||
|
|
7ed9a8075c | ||
|
|
ead8110fb4 | ||
|
|
586b1b6c15 | ||
|
|
e1727c8d80 | ||
|
|
7bd8a7ff35 | ||
|
|
de48651ae7 | ||
|
|
9902e07be0 | ||
|
|
5e4b38895e | ||
|
|
38bbbf261a | ||
|
|
def0a52578 | ||
|
|
4f1f87bda0 | ||
|
|
15f9faa2fa | ||
|
|
7257491d8b | ||
|
|
c19b2a9ebe | ||
|
|
54e7fd0293 | ||
|
|
21f3a2082b | ||
|
|
f647eb5a7b | ||
|
|
d7b1db0081 | ||
|
|
11511316d1 | ||
|
|
95a93c2c44 | ||
|
|
815ce10c25 | ||
|
|
5f13bfe8a1 | ||
|
|
5cd494c00a | ||
|
|
5a0a8bedc1 | ||
|
|
3b9884160b | ||
|
|
5b2b01328a | ||
|
|
e5b51dcd16 | ||
|
|
4d8b816acf | ||
|
|
fa109c1b0b | ||
|
|
b987fce627 | ||
|
|
b072cc3266 | ||
|
|
366b40ea90 | ||
|
|
3d3daa205d | ||
|
|
665ebbd11a | ||
|
|
52a5a7697d | ||
|
|
97a38d516a | ||
|
|
e89475bf52 | ||
|
|
90a78b05ce | ||
|
|
8c6eff15f0 | ||
|
|
824c58b391 | ||
|
|
b97500430c | ||
|
|
bacafc67c9 | ||
|
|
f23ebcdc2d | ||
|
|
edbe8e3561 | ||
|
|
05d1e33b30 | ||
|
|
96b60ce0f5 | ||
|
|
6174bc7ffd | ||
|
|
3bd022e03a | ||
|
|
b0cc5b0b60 | ||
|
|
5493f70458 | ||
|
|
323b3d9d16 | ||
|
|
1b0742ad2a | ||
|
|
2eb7217f49 | ||
|
|
b6f5a286b0 | ||
|
|
66c496fb10 | ||
|
|
56ca588c1e | ||
|
|
e2b09caff3 | ||
|
|
a5b4a4c59f | ||
|
|
a70312a90a | ||
|
|
6c6a3238cb | ||
|
|
9af10d4bcb | ||
|
|
f6e1b4611e | ||
|
|
7bc762d357 | ||
|
|
8edf1da92b | ||
|
|
a18baf2ffe | ||
|
|
2d41bf8f2f | ||
|
|
334778bdae | ||
|
|
1b46a06eee | ||
|
|
1e860e9443 | ||
|
|
0b973672d2 | ||
|
|
868ed85c7f | ||
|
|
6f2a24ec66 | ||
|
|
e5d5899a15 | ||
|
|
243473a97d | ||
|
|
28d71b8ce2 | ||
|
|
1acbf90261 | ||
|
|
94229f84a3 | ||
|
|
cead74238a | ||
|
|
73c60ea94c | ||
|
|
73638da4db | ||
|
|
bc218b73e1 | ||
|
|
aac6632f4b | ||
|
|
fdba3fdc74 | ||
|
|
21bb61ec82 | ||
|
|
ce1203d64d | ||
|
|
56daf15c8e | ||
|
|
96faa924d8 | ||
|
|
ee8854451c | ||
|
|
0975e925a9 | ||
|
|
83d6a2169b | ||
|
|
21e7a4d966 | ||
|
|
404cd24855 | ||
|
|
b4ad72ee67 | ||
|
|
bea628b619 | ||
|
|
3637e54982 | ||
|
|
e0d1a0a612 | ||
|
|
3040996671 | ||
|
|
dd830e7500 | ||
|
|
d2dfe2c418 | ||
|
|
139fb6b6e0 | ||
|
|
c4f6976c42 | ||
|
|
ab428fc104 | ||
|
|
aa97f78acd | ||
|
|
dbce900aeb | ||
|
|
30b382e2e7 | ||
|
|
433c4abb86 | ||
|
|
64404e4092 | ||
|
|
08d483af8a | ||
|
|
fa19c17941 | ||
|
|
c896a999ad | ||
|
|
f9bca935ac | ||
|
|
7abf274d89 | ||
|
|
e2ad417306 | ||
|
|
2ea9655f6b | ||
|
|
f450d5d9de | ||
|
|
f8f4b73a09 | ||
|
|
926d96732d | ||
|
|
167113d6a3 | ||
|
|
911cb614a5 | ||
|
|
7a939b7024 | ||
|
|
6e57a60997 | ||
|
|
9f1151e699 | ||
|
|
3fbe1fb63d | ||
|
|
d4906eec5a | ||
|
|
ebe0663e74 | ||
|
|
04c89b9711 | ||
|
|
4f2bc874e5 | ||
|
|
316ac5c3c8 | ||
|
|
7882aa667e | ||
|
|
8b8d5eecbf | ||
|
|
65b76643ee | ||
|
|
f33e645113 | ||
|
|
528d30c317 | ||
|
|
7f0a3d320c | ||
|
|
8e940aeb65 | ||
|
|
a77ee60809 | ||
|
|
83383c29cd | ||
|
|
b6393141e8 | ||
|
|
10ce1827d8 | ||
|
|
605f3a12ff | ||
|
|
a33539e75f | ||
|
|
b2cca3687a | ||
|
|
628c54044f | ||
|
|
c0e7a3eece | ||
|
|
c7c13c19c1 | ||
|
|
d5f71b5878 | ||
|
|
cb589e9e26 | ||
|
|
eaeed47297 | ||
|
|
e00e5c5cd7 | ||
|
|
b3719f7166 | ||
|
|
337896974b | ||
|
|
bb7d1fc9ab | ||
|
|
07765c8d44 | ||
|
|
85cb91071e | ||
|
|
d41839845a | ||
|
|
c3d12aa55f | ||
|
|
a781e4b84c | ||
|
|
1fc0989fd2 | ||
|
|
14752260d3 | ||
|
|
84675c874f | ||
|
|
f30e6057be | ||
|
|
ba8b629f0e | ||
|
|
a0a45ff2aa | ||
|
|
325f890a0b | ||
|
|
923cac5408 | ||
|
|
23505326c7 | ||
|
|
5f1a48f523 | ||
|
|
a607d39030 | ||
|
|
96d108729e | ||
|
|
ef15adaaf8 | ||
|
|
f190b74a7e | ||
|
|
edbc2b88b6 | ||
|
|
dc000cecf1 | ||
|
|
7c95a483df | ||
|
|
27e5d73da1 | ||
|
|
6306dae92d | ||
|
|
a427ddff83 | ||
|
|
b62ee6e820 | ||
|
|
3c18666080 | ||
|
|
40968b301a | ||
|
|
05904d31fd | ||
|
|
75aeaf4ee7 | ||
|
|
ff4e67a9f6 | ||
|
|
5f672d5bd1 | ||
|
|
5cb39eba8b | ||
|
|
4d8c3c75d6 | ||
|
|
8bdd19fc06 | ||
|
|
0ec99d8ba1 | ||
|
|
929d2db5a5 | ||
|
|
a7ad77f433 | ||
|
|
9cd47d5deb | ||
|
|
3cb5691aae | ||
|
|
dce63919fa | ||
|
|
1cdbedcb96 | ||
|
|
1586712ce5 | ||
|
|
f059186494 | ||
|
|
0af0be57b0 | ||
|
|
dad2b03212 | ||
|
|
b6e307660f | ||
|
|
c21c14825a | ||
|
|
39f9c986e9 | ||
|
|
393683aebc | ||
|
|
a87fcb44a6 | ||
|
|
0a6496ddfb | ||
|
|
fa2841fac6 | ||
|
|
861e45419b | ||
|
|
15fd943456 | ||
|
|
b538bfc27e | ||
|
|
e0f32eddc4 | ||
|
|
75a704c196 | ||
|
|
6565fdbe7e | ||
|
|
6248d72852 | ||
|
|
00d1797b96 | ||
|
|
911194eba8 | ||
|
|
0fad3ae31d | ||
|
|
b6988d866a | ||
|
|
e30959a656 | ||
|
|
52eeff3466 | ||
|
|
a06ded552d | ||
|
|
e9b8a84243 | ||
|
|
1fc3cfd1f2 | ||
|
|
188b57ed7a | ||
|
|
c8620390ac | ||
|
|
b3f8ed2335 | ||
|
|
54bf504eb4 | ||
|
|
c6f3bf856b | ||
|
|
8b33a7926e | ||
|
|
a38cb90cbf | ||
|
|
1500e8e54f | ||
|
|
94fd8d5e9d | ||
|
|
373e0a2155 | ||
|
|
267298f341 | ||
|
|
359d46e94d | ||
|
|
11f5540099 | ||
|
|
680e1afcfd | ||
|
|
e4322e60cc | ||
|
|
82f2eecfe8 | ||
|
|
3e3c3c559d | ||
|
|
65f5e8e964 | ||
|
|
c5fbe93890 | ||
|
|
307d8b6165 | ||
|
|
bf08eb2f8b | ||
|
|
a569c1dfaf | ||
|
|
e48db0d231 | ||
|
|
1a5b5dbb45 | ||
|
|
56f21cabe5 | ||
|
|
7ac5afe05b | ||
|
|
b3db97f4a8 | ||
|
|
6d1a06a9d9 | ||
|
|
088643df6c | ||
|
|
fc00a0a363 | ||
|
|
7a48fdd246 | ||
|
|
89be493882 | ||
|
|
5947abf83d | ||
|
|
962db6821f | ||
|
|
f6a3df7858 | ||
|
|
090aaed3f4 | ||
|
|
71cb5aa9e4 | ||
|
|
043b29ef33 | ||
|
|
d81cf4aec3 | ||
|
|
7cb46eeb82 | ||
|
|
c3b4d54414 | ||
|
|
8b9acf2d3d | ||
|
|
08548181ed | ||
|
|
45f883c98b | ||
|
|
5f39229e47 | ||
|
|
8c5bdc2a4b | ||
|
|
7b7602bce2 | ||
|
|
a145792fac | ||
|
|
667a550f4c | ||
|
|
53e1ad8991 | ||
|
|
429c949d1f | ||
|
|
1548577d65 | ||
|
|
82e59b297f | ||
|
|
1f9c994425 | ||
|
|
fc0c7a5004 | ||
|
|
a2d0309c79 | ||
|
|
6d01fbb6e8 | ||
|
|
be270df088 | ||
|
|
88fd94e1cc | ||
|
|
e460392368 | ||
|
|
249cda99f4 | ||
|
|
327fce822a | ||
|
|
58931354a4 | ||
|
|
c8993e9832 | ||
|
|
4ee2e023aa | ||
|
|
22fa1b121e | ||
|
|
cbc6e526c3 | ||
|
|
96041faefd | ||
|
|
894c912e19 | ||
|
|
7b406a945f | ||
|
|
6ff5cc90f1 | ||
|
|
f66e56f4b5 | ||
|
|
8f09aab0ea | ||
|
|
b248b9ca2c | ||
|
|
5a6a31fefa | ||
|
|
1e485a3883 | ||
|
|
fed3246c84 | ||
|
|
daff4a9786 | ||
|
|
6e88b0c701 | ||
|
|
808f674173 | ||
|
|
ba377c9aac | ||
|
|
bb8909f552 | ||
|
|
5a4d9ffcfc | ||
|
|
5ed24a98cb | ||
|
|
6d17675ee7 | ||
|
|
e0b8bfdeae | ||
|
|
0db2009e65 | ||
|
|
5f016d74a1 | ||
|
|
02b9832750 | ||
|
|
18a888b9d4 | ||
|
|
7f20e981d2 | ||
|
|
d64e08f3c4 | ||
|
|
8bb5324896 | ||
|
|
8f2ebc6409 | ||
|
|
371318f62f | ||
|
|
6e94403dc6 | ||
|
|
c35f6905bb | ||
|
|
4eebbb3e81 | ||
|
|
8ddfc8fb4a | ||
|
|
14d2661be8 | ||
|
|
ec71bf29b8 | ||
|
|
b1b06d9c82 | ||
|
|
6feec9bdbd | ||
|
|
d00f4f281c | ||
|
|
15e3ec5263 | ||
|
|
d6ddd91fda | ||
|
|
de79e25510 | ||
|
|
08f6b4deed | ||
|
|
5cd115b54f | ||
|
|
44b6f5890c | ||
|
|
5dd5933390 | ||
|
|
d55d3f2fe1 | ||
|
|
2e9b87f0bc | ||
|
|
800c85dd03 | ||
|
|
5414f7161f | ||
|
|
98b5825475 | ||
|
|
bda21c421f | ||
|
|
ee27b06822 | ||
|
|
7504d62ab1 | ||
|
|
f66b5c91fc | ||
|
|
bf838cd561 | ||
|
|
eeb92f5915 | ||
|
|
4524fab6b9 | ||
|
|
d1a9b40ed5 | ||
|
|
96523408bd | ||
|
|
b5646e0988 | ||
|
|
645c5cc6c1 | ||
|
|
7323983d11 | ||
|
|
8650c9e4b9 | ||
|
|
7cfdb403b3 | ||
|
|
af30c69560 | ||
|
|
b49ecb5802 | ||
|
|
9f0dd8358f | ||
|
|
1fff99b5f2 | ||
|
|
f3ef65ad70 | ||
|
|
da9d59443b | ||
|
|
2e7a5c6244 | ||
|
|
0b6f04ed26 | ||
|
|
4856f6c477 | ||
|
|
0a0b499716 | ||
|
|
954888a879 | ||
|
|
f00a01c123 | ||
|
|
0efb3a6f30 | ||
|
|
d3a9a7b54c | ||
|
|
4bbf40c5b8 | ||
|
|
01ab59774b | ||
|
|
5a6f84d5d2 | ||
|
|
eea5135316 | ||
|
|
9f303966eb | ||
|
|
a31b5ea29d | ||
|
|
b6a6ee31ed | ||
|
|
9aa7556e5b | ||
|
|
12cc54b0ea | ||
|
|
f8c4eae715 | ||
|
|
f8d8d2122e | ||
|
|
157c8e92d5 | ||
|
|
bece81b10e | ||
|
|
99755e98ee | ||
|
|
541de612b2 | ||
|
|
c46d9fd04a | ||
|
|
a49695ace7 | ||
|
|
b562d45531 | ||
|
|
e9f8db58c0 | ||
|
|
ed3313b2bc | ||
|
|
7bb6a9615c | ||
|
|
e7333508c4 | ||
|
|
6e6feb6dc1 | ||
|
|
cb37e3e993 | ||
|
|
13f457eba3 | ||
|
|
e7f8900286 | ||
|
|
7199a770c0 | ||
|
|
e560bbdeb4 | ||
|
|
6479d39f93 | ||
|
|
9fc9790e93 | ||
|
|
5a50476e9d | ||
|
|
b8a8776c2e | ||
|
|
f155a341cb | ||
|
|
253e48694a | ||
|
|
30a090004b | ||
|
|
fb77443b99 | ||
|
|
06d88883d8 | ||
|
|
337c9d3241 | ||
|
|
1d6378c1fc | ||
|
|
f13cfd190e | ||
|
|
a2823b3c29 | ||
|
|
169edd4f9c | ||
|
|
d0fa094d04 | ||
|
|
6ac12d42fe | ||
|
|
a378ac8738 | ||
|
|
8b8f749006 | ||
|
|
b004a0609b | ||
|
|
82d4efcbc2 | ||
|
|
2476726a6a | ||
|
|
19a84d0cc8 | ||
|
|
a688b6fdce | ||
|
|
73e5f5d6ad | ||
|
|
014fb9408e | ||
|
|
91f2be6759 | ||
|
|
76ac6cf5b5 | ||
|
|
dbba6fa942 | ||
|
|
d0771e3392 | ||
|
|
6c8eca2f57 | ||
|
|
3aa9d8ae56 | ||
|
|
42e1764c44 | ||
|
|
5abe9bd6d5 | ||
|
|
d5492eee93 | ||
|
|
a26a59b193 | ||
|
|
3d2dbe9199 | ||
|
|
73749b8d22 | ||
|
|
50c30b7cd0 | ||
|
|
44305b9abf | ||
|
|
c98d8fd199 | ||
|
|
4adc0b7c24 | ||
|
|
1427ac632f | ||
|
|
5e4ae07575 | ||
|
|
9c7fddfb0d | ||
|
|
8ebe81b89f | ||
|
|
016ca770f5 | ||
|
|
c8948953c9 | ||
|
|
85ebd30c9c | ||
|
|
5ea6c4c449 | ||
|
|
bfa31d1c79 | ||
|
|
d4f7ce7560 | ||
|
|
0ef223d80e | ||
|
|
eb232f7bb1 | ||
|
|
ce4f44a951 | ||
|
|
f70cfb5d48 | ||
|
|
7e39be6d20 | ||
|
|
979afdbf7b | ||
|
|
e662b5ed23 | ||
|
|
fea7dcb4aa | ||
|
|
2220920afe | ||
|
|
180b3c7c5d | ||
|
|
beb7553629 | ||
|
|
75934fc5ae | ||
|
|
0882e06adc | ||
|
|
96bd755660 | ||
|
|
51c96b4d04 | ||
|
|
a529eba693 | ||
|
|
a00b5a71fc | ||
|
|
7f35dda305 | ||
|
|
fccebb059b | ||
|
|
cf1dc17298 | ||
|
|
b24eabc82a | ||
|
|
f3a26116b2 | ||
|
|
884c1ea82c | ||
|
|
c65737f554 | ||
|
|
b77a11bfc2 | ||
|
|
58fd8e3c7f | ||
|
|
a8cc2fc671 | ||
|
|
d19ebb6b13 | ||
|
|
fad02e8736 | ||
|
|
11c928bf30 | ||
|
|
b4262eb34b | ||
|
|
76c4a8a966 | ||
|
|
0a212af11e | ||
|
|
efffb46281 | ||
|
|
e2ec3ef532 | ||
|
|
d3c4dd59d2 | ||
|
|
dcebb79590 | ||
|
|
0f0b989963 | ||
|
|
4815f6c79a | ||
|
|
409063a339 | ||
|
|
c831d539b6 | ||
|
|
7aa826fc80 | ||
|
|
d603557c35 | ||
|
|
c267a5c7e0 | ||
|
|
46764ff9aa | ||
|
|
f7a041d9fc | ||
|
|
751336e5d1 | ||
|
|
b2403aedac | ||
|
|
d5f9e923c4 | ||
|
|
c3c2022029 | ||
|
|
fb08e86a4c | ||
|
|
6f4c32c04c | ||
|
|
7c74a40baf | ||
|
|
8bf60bb793 | ||
|
|
005aa959c5 | ||
|
|
d9818f6960 | ||
|
|
f90ac9dea4 | ||
|
|
e0036ca32b | ||
|
|
ad8acaf296 | ||
|
|
34a863a6ea | ||
|
|
724c7388af | ||
|
|
2bb6ef8efb | ||
|
|
baf4d3aa98 | ||
|
|
f4ca4431da | ||
|
|
19446a666e | ||
|
|
b48b09249e | ||
|
|
be282db1c2 | ||
|
|
667cf4062f | ||
|
|
ba442b1457 | ||
|
|
a07622d084 | ||
|
|
8855c92e73 | ||
|
|
6a67a6a66b | ||
|
|
6822c8137b | ||
|
|
76505aa4de | ||
|
|
40fee137d4 | ||
|
|
1f3259e907 | ||
|
|
33b0c19d43 | ||
|
|
1de59279a6 | ||
|
|
184a43ccf5 | ||
|
|
efcb71e866 | ||
|
|
7bc720be77 | ||
|
|
9ecf6d3735 | ||
|
|
ba968d6ff7 | ||
|
|
5cd86a2766 | ||
|
|
11325e6f07 | ||
|
|
5b2b7dc03e | ||
|
|
324a67c7da | ||
|
|
6b54797aec | ||
|
|
4e7529ae44 | ||
|
|
086e61bb19 | ||
|
|
c6eeeda1c3 | ||
|
|
6d642c8098 | ||
|
|
40c89a479f | ||
|
|
f43c811477 | ||
|
|
0a3277c6e7 | ||
|
|
667a8fea31 | ||
|
|
089bb027ae | ||
|
|
6667d85623 | ||
|
|
2513465c6b | ||
|
|
831266fe3c | ||
|
|
bea5cd1f52 | ||
|
|
961414559f | ||
|
|
ffa37160a5 | ||
|
|
d856d12126 | ||
|
|
1dc16932b6 | ||
|
|
db603c5ebd | ||
|
|
f837b71423 | ||
|
|
a5b7259577 | ||
|
|
3f6eeb2a30 | ||
|
|
f8434d7fe2 | ||
|
|
b5cc8ad820 | ||
|
|
20c2d96dee | ||
|
|
c08a669aff | ||
|
|
c4fe77a5ba | ||
|
|
6d6326e415 | ||
|
|
21a956eca8 | ||
|
|
da1273c135 | ||
|
|
aaf7870d88 | ||
|
|
03dffe1181 | ||
|
|
146010f3f5 | ||
|
|
6526653540 | ||
|
|
7b46a1b9ff | ||
|
|
0608f9b3c7 | ||
|
|
e63b46b004 | ||
|
|
17d9853e90 | ||
|
|
4d02639985 | ||
|
|
9677a55a5a | ||
|
|
87056a4052 | ||
|
|
aba9ee7b33 | ||
|
|
ad2baeda2f | ||
|
|
eab8a3b94e | ||
|
|
5d23032500 | ||
|
|
5a2b6db3bb | ||
|
|
546c6a3227 | ||
|
|
674018d2fc | ||
|
|
39b65284bd | ||
|
|
c0fee32c4c | ||
|
|
8428649377 | ||
|
|
430c792a9b | ||
|
|
1e029ee517 | ||
|
|
dfbc837371 | ||
|
|
3e1bb44284 | ||
|
|
aacb6adb26 | ||
|
|
95ac7454ae | ||
|
|
85389c4a60 | ||
|
|
913289e0ef | ||
|
|
84efd5bfdf | ||
|
|
33014dbd7d | ||
|
|
d0e20eb8d3 | ||
|
|
a386999567 | ||
|
|
8519481f96 | ||
|
|
97fdc095a5 | ||
|
|
915243ee4a | ||
|
|
727e447899 | ||
|
|
e6ea5824f0 | ||
|
|
8eee11cee9 | ||
|
|
7aca3049d1 | ||
|
|
03b8d0c388 | ||
|
|
aa7d01f3d6 | ||
|
|
b397c41c9e | ||
|
|
0561cc3320 | ||
|
|
6f47e92050 | ||
|
|
9a67ac7509 | ||
|
|
d922993eaf | ||
|
|
9fa2225283 | ||
|
|
35eadad96b | ||
|
|
081416475e | ||
|
|
12492c842c | ||
|
|
68e01c1e73 | ||
|
|
bdcc79ce34 | ||
|
|
869ad39ddc | ||
|
|
30e1e35090 | ||
|
|
6c185ffd09 | ||
|
|
a9435f8f32 | ||
|
|
9ea8d3ec97 | ||
|
|
d918234bb8 | ||
|
|
afbbbaa855 | ||
|
|
a844ef31a2 | ||
|
|
b469ce0504 | ||
|
|
ed2bc8c390 | ||
|
|
cb246e859e | ||
|
|
3d6b99c004 | ||
|
|
842942c0fe | ||
|
|
71c4a84833 | ||
|
|
d1bc434ced | ||
|
|
59f7448aa7 | ||
|
|
4408692565 | ||
|
|
2e8607b811 | ||
|
|
2f2890e582 | ||
|
|
e2b39be3ff | ||
|
|
7ada07a99a | ||
|
|
6b16573f6b | ||
|
|
1de49fe998 | ||
|
|
7109e66ad8 | ||
|
|
d21c2f67ba | ||
|
|
0d39add09c | ||
|
|
5e1f7ea571 | ||
|
|
35c71bd21b | ||
|
|
e6a39f246d | ||
|
|
65cd8af9e1 | ||
|
|
e916f2fc40 | ||
|
|
13da80ee85 | ||
|
|
4f4045363b | ||
|
|
9600e18c92 | ||
|
|
d5aefccadc | ||
|
|
9e64b268cf | ||
|
|
0893bf6473 | ||
|
|
21f8b814e0 | ||
|
|
10fd22ba81 | ||
|
|
a3fef6c62f | ||
|
|
d750167a00 | ||
|
|
241bf62fdc | ||
|
|
bc5574615d | ||
|
|
48cac053fd | ||
|
|
25837f6393 | ||
|
|
b281362c98 | ||
|
|
e5050bb6c8 | ||
|
|
2d0c3ef881 | ||
|
|
ee029aac10 | ||
|
|
da205c09f9 | ||
|
|
07317b86a2 | ||
|
|
79e2543266 | ||
|
|
303cbcd188 | ||
|
|
a47905541c | ||
|
|
4e988db50f | ||
|
|
9dc3d83a77 | ||
|
|
934c1b0cfe | ||
|
|
70181d95c7 | ||
|
|
8a210103c0 | ||
|
|
df96381759 | ||
|
|
2006845ff7 | ||
|
|
44f0e78086 | ||
|
|
824956a34d | ||
|
|
1e7e01b6b0 | ||
|
|
cd25aaaca6 | ||
|
|
d481047eb4 | ||
|
|
1699ac6e08 | ||
|
|
79b7188578 | ||
|
|
843f469914 | ||
|
|
71254e86f4 | ||
|
|
07328847f4 | ||
|
|
9181cbfee5 | ||
|
|
4aef22aac8 | ||
|
|
512266abf4 | ||
|
|
ef64f180a2 | ||
|
|
9e45800367 | ||
|
|
f027f7f225 | ||
|
|
6f7ac86e7f | ||
|
|
93d298ef75 | ||
|
|
121a892c9a | ||
|
|
9222e2bbdd | ||
|
|
fe78d82ace | ||
|
|
77e98d9942 | ||
|
|
2b1efae238 | ||
|
|
d70740b38c | ||
|
|
3ebb30795c | ||
|
|
5d42730e9a | ||
|
|
923777899e | ||
|
|
05b9187a3b | ||
|
|
1198baba67 | ||
|
|
d4b7cdc97c | ||
|
|
bb7e93ac2d | ||
|
|
59c0c6cfb8 | ||
|
|
8699a43a22 | ||
|
|
5529651f91 | ||
|
|
a6f225ae9d | ||
|
|
fceda31c11 | ||
|
|
e5a5281e10 | ||
|
|
ede1d89569 | ||
|
|
44b9ba96c3 | ||
|
|
7fd8bfbe4e | ||
|
|
17654633dc | ||
|
|
8fd0a54018 | ||
|
|
efe8a476da | ||
|
|
ac0f6c6b6c | ||
|
|
8c163515db | ||
|
|
7ce1e64ee8 | ||
|
|
b6e667a291 | ||
|
|
5c7522fd1f | ||
|
|
85e9223603 | ||
|
|
943e2be676 | ||
|
|
2f09df7521 | ||
|
|
445e445e49 | ||
|
|
a3925de127 | ||
|
|
f20e4bd572 | ||
|
|
816c2ac1c4 | ||
|
|
e731371ab1 | ||
|
|
5559693cb3 | ||
|
|
ca33c3b259 | ||
|
|
a78fa98b3d | ||
|
|
956dc82555 | ||
|
|
d30a824481 | ||
|
|
a643182eee | ||
|
|
e1dbc46d8d | ||
|
|
e33d8776bc | ||
|
|
f6d16883de | ||
|
|
51bdd3bbfd | ||
|
|
8f9ae78b8c | ||
|
|
584b7b8e45 | ||
|
|
f74e903f1f | ||
|
|
4cedf112f5 | ||
|
|
d607a8da0f | ||
|
|
84a12e28df | ||
|
|
54aa47d1a8 | ||
|
|
faaee4b945 | ||
|
|
0b46303f9f | ||
|
|
b98668bc60 | ||
|
|
947e8e9512 | ||
|
|
681918cb63 | ||
|
|
d0fae44430 | ||
|
|
3e752461e8 | ||
|
|
1a9e6f3b1a | ||
|
|
580275a8cf | ||
|
|
ee74771f16 | ||
|
|
81fa97d3ee | ||
|
|
00a6e9798f | ||
|
|
17a59cbdd5 | ||
|
|
d4c9a0a47a | ||
|
|
6423c22cf8 | ||
|
|
e21fbaff83 | ||
|
|
99e6a2676b | ||
|
|
ab47f40ee1 | ||
|
|
a7f000e51e | ||
|
|
0d9eabcaa0 | ||
|
|
b1c63d7f5e | ||
|
|
820c72820d | ||
|
|
300065504b | ||
|
|
8aa846b349 | ||
|
|
ae8b94b2d7 | ||
|
|
7670d55f3c | ||
|
|
528ab4e203 | ||
|
|
cf1dc90137 | ||
|
|
dd81dcc9c6 | ||
|
|
a31c949734 | ||
|
|
3536d5c413 | ||
|
|
0e50216cee | ||
|
|
16fed754a9 | ||
|
|
c7748934b8 | ||
|
|
d46b3154cc | ||
|
|
f8bcfba90e | ||
|
|
45a4ca5298 | ||
|
|
88e3a9852b | ||
|
|
cf1f023379 | ||
|
|
b4b6f5a1f7 | ||
|
|
a21eef6e84 | ||
|
|
3beca8bba5 | ||
|
|
b5d66dba8a | ||
|
|
24d01a2156 | ||
|
|
45d848cbb9 | ||
|
|
e2f649dd35 | ||
|
|
183bffbc0e | ||
|
|
a874415859 | ||
|
|
93b33ba383 | ||
|
|
26420719f3 | ||
|
|
dc6a35d656 | ||
|
|
51da0bd7b7 | ||
|
|
1afb2c6883 | ||
|
|
f78fcc2b71 | ||
|
|
fb2d30f2c9 | ||
|
|
8781e7c6ad | ||
|
|
c34317b1e5 | ||
|
|
b09730b422 | ||
|
|
0f1725a7ab | ||
|
|
b12e0358d6 | ||
|
|
7ef841746a | ||
|
|
2b52b2379e | ||
|
|
8dd5965c44 | ||
|
|
bc59521cc8 | ||
|
|
815822ef40 | ||
|
|
9e6d33cc1a | ||
|
|
44df85f2bd | ||
|
|
2c15c7087e | ||
|
|
6b281628ed | ||
|
|
9f74db0aff | ||
|
|
83ea5c7fa3 | ||
|
|
bf6fe3482b | ||
|
|
f4d6803720 | ||
|
|
23c2a16286 | ||
|
|
afc301fad2 | ||
|
|
1c0a50e48f | ||
|
|
02e119d0da | ||
|
|
06fcc383ce | ||
|
|
408b1f76e4 | ||
|
|
3a879a37e2 | ||
|
|
9e1bb50d78 | ||
|
|
25dcf426b1 | ||
|
|
7b7baaea62 | ||
|
|
36d83804d0 | ||
|
|
7c46d2e27f | ||
|
|
d4acad33ea | ||
|
|
91cc1159bc | ||
|
|
21b7068c90 | ||
|
|
682d2bf922 | ||
|
|
3ff6788405 | ||
|
|
e59a8606ab | ||
|
|
157285ddb6 | ||
|
|
f49c3e0ff7 | ||
|
|
345877b9fd | ||
|
|
37e4105585 | ||
|
|
4a05b59b4b | ||
|
|
57322d75d7 | ||
|
|
4ccc2c1f71 | ||
|
|
652b32619d | ||
|
|
57b3611965 | ||
|
|
afbf9e619a | ||
|
|
060b1da388 | ||
|
|
38024b6be4 | ||
|
|
6aede6e48b | ||
|
|
b27adfbe27 | ||
|
|
b28e3b2a00 | ||
|
|
ffe4374519 | ||
|
|
793df087ae | ||
|
|
85eadd5856 | ||
|
|
359efe0036 | ||
|
|
3186691b7b | ||
|
|
044c795f38 | ||
|
|
f7128449ca | ||
|
|
3d0c5165b7 | ||
|
|
fc6cda86df | ||
|
|
59877e181e | ||
|
|
506b1a17d1 | ||
|
|
214c2ba0ad | ||
|
|
387312bc87 | ||
|
|
3d3da04e58 | ||
|
|
7ec0cbb43c | ||
|
|
1cd834579c | ||
|
|
a11005c14b | ||
|
|
ea1480e286 | ||
|
|
f1dd328c38 | ||
|
|
44295de206 | ||
|
|
b273082492 | ||
|
|
da088d88ba | ||
|
|
fd13570074 | ||
|
|
b5630a9dae | ||
|
|
0e2cab6409 | ||
|
|
38dc587318 | ||
|
|
6fbddcb7c2 | ||
|
|
df1df2964d | ||
|
|
9b9c2546c8 | ||
|
|
6ce0e72b33 | ||
|
|
a7784d7870 | ||
|
|
306ca3e04f | ||
|
|
82988b0e08 | ||
|
|
8b27d0e249 | ||
|
|
bfae547240 | ||
|
|
0abd026f78 | ||
|
|
3362a76de7 | ||
|
|
355b6c2e7d | ||
|
|
4e3c643e43 | ||
|
|
760cb97db4 | ||
|
|
0be6f7f57e | ||
|
|
d31223fa0c | ||
|
|
86ee9befc1 | ||
|
|
d5689b061f | ||
|
|
a3c4da4455 | ||
|
|
ee9f97f917 | ||
|
|
270c7377de | ||
|
|
9044b57306 | ||
|
|
9ad815a44a | ||
|
|
b7e432228b | ||
|
|
78da30f2ad | ||
|
|
aeea53017f | ||
|
|
f21ebfc366 | ||
|
|
2549aa5809 | ||
|
|
b733b70ad8 | ||
|
|
f9f59bd7c2 | ||
|
|
58933a6bcd | ||
|
|
45d7a29a95 | ||
|
|
e9d1fdb4ee | ||
|
|
2785ca9f31 | ||
|
|
12912a62aa | ||
|
|
2c2b078514 | ||
|
|
110294103f | ||
|
|
a9f3b839ec | ||
|
|
6bd677ad6f | ||
|
|
7d1c5f3510 | ||
|
|
a49508fd20 | ||
|
|
5870213ff0 | ||
|
|
65c3d7f925 | ||
|
|
33f4fd8fee | ||
|
|
9bdc34dc42 | ||
|
|
ff654df997 | ||
|
|
b7758da2f3 | ||
|
|
747089f1a8 | ||
|
|
9ee3021b76 | ||
|
|
0c60ea66e3 | ||
|
|
c3bb312b5f | ||
|
|
7447a42d40 | ||
|
|
3e9cc367af | ||
|
|
4c1790014f | ||
|
|
03fc7a579a | ||
|
|
a53db257cf | ||
|
|
b093cab493 | ||
|
|
9b484dc819 | ||
|
|
5ab26a9f8c | ||
|
|
b800a63bd2 | ||
|
|
43a5e47fb3 | ||
|
|
319545106e | ||
|
|
39b261b8a0 | ||
|
|
c9e61d1098 | ||
|
|
0bffdaa5fc | ||
|
|
9228510834 | ||
|
|
0b002a8946 | ||
|
|
ad43ddabe6 | ||
|
|
24c022a329 | ||
|
|
0e48cee0d6 | ||
|
|
4ad1794d95 | ||
|
|
46cf25b585 | ||
|
|
b3d78fc30f | ||
|
|
556bc06da4 | ||
|
|
7e8f9c463b | ||
|
|
568c7779b6 | ||
|
|
0a0d237f4d | ||
|
|
c243ccbdce | ||
|
|
64b79d6af5 | ||
|
|
016c0f3743 | ||
|
|
fd1599e0a7 | ||
|
|
7408aa6b72 | ||
|
|
e6b2107fa9 | ||
|
|
9aff52eaad | ||
|
|
bf5bda0f85 | ||
|
|
ffbf2d0a93 | ||
|
|
82f59ef5a2 | ||
|
|
c2c40abbb4 | ||
|
|
bb54d732d0 | ||
|
|
eee4e0c676 | ||
|
|
d9457ae017 | ||
|
|
bbc0b18b19 | ||
|
|
da7651311e | ||
|
|
72846f0817 | ||
|
|
05ef3387ab | ||
|
|
eed44e5737 | ||
|
|
27c7a85a21 | ||
|
|
4f6dd046ec | ||
|
|
89fad9ada7 | ||
|
|
bc31b49b99 | ||
|
|
09444e3624 | ||
|
|
7586243a95 | ||
|
|
1e1c7801e1 | ||
|
|
a363f6ef5f | ||
|
|
334e1fd2da | ||
|
|
2e8e29e93c | ||
|
|
5e5a1a3668 | ||
|
|
b93b464ebf | ||
|
|
842ba46a95 | ||
|
|
03b27d8e8f | ||
|
|
c11b41c6ba | ||
|
|
018cc526ee | ||
|
|
edf4508e6b | ||
|
|
d26a1f0312 | ||
|
|
2984f6a453 | ||
|
|
a00058d959 | ||
|
|
8e56a457f1 | ||
|
|
74d5f021cd | ||
|
|
a37715315d | ||
|
|
d9c9977610 | ||
|
|
c2f0cbb10a | ||
|
|
a34d00d822 | ||
|
|
9924ec6963 | ||
|
|
9036201887 | ||
|
|
b2435d2430 | ||
|
|
afd6148770 | ||
|
|
b70b58a35a | ||
|
|
df963c2780 | ||
|
|
1b732c76e6 | ||
|
|
f9489b0173 | ||
|
|
18942c55ae | ||
|
|
bf34b2f1ca | ||
|
|
a717a021c2 | ||
|
|
dcf718d592 | ||
|
|
f5eeb2b839 | ||
|
|
bc435adc11 | ||
|
|
aeb8e82cbd | ||
|
|
5cb2ed3ccd | ||
|
|
93b1864d1b | ||
|
|
a6efffda45 | ||
|
|
c89d6f1a58 | ||
|
|
d4f16abfac | ||
|
|
8529f3f355 | ||
|
|
2eb136827d | ||
|
|
9594e6eb32 | ||
|
|
9e8111994a | ||
|
|
af0c2b7129 | ||
|
|
96b73a0cef | ||
|
|
6c290ee2d3 | ||
|
|
ca53e3de3a | ||
|
|
6ea3ec700a | ||
|
|
fe3355e08e | ||
|
|
42f08f5027 | ||
|
|
7a1c8882e6 | ||
|
|
2c193e7e48 | ||
|
|
9714c1c9f6 | ||
|
|
c8f72b5f14 | ||
|
|
be0439f771 | ||
|
|
43da95b4a5 | ||
|
|
3d93a63caa | ||
|
|
9550607da3 | ||
|
|
d5d9798913 | ||
|
|
6cfe08235f | ||
|
|
49eb850ff1 | ||
|
|
5a558583d2 | ||
|
|
1e5f0d0555 | ||
|
|
e2b0b03c96 | ||
|
|
b9fb9f1b34 | ||
|
|
52fd932fd8 | ||
|
|
b0cc200df7 | ||
|
|
05b32db37d | ||
|
|
41f7192532 | ||
|
|
fa420303dc | ||
|
|
b7fd539755 | ||
|
|
cfb8b03446 | ||
|
|
712601041d | ||
|
|
36093eccaf | ||
|
|
58eb6d4210 | ||
|
|
2166429cbf | ||
|
|
236ab10b11 | ||
|
|
99142fdde3 | ||
|
|
ca6755d8b5 | ||
|
|
92ad333863 | ||
|
|
4c48272b4c | ||
|
|
ab5bd1db69 | ||
|
|
5d1cd10f5d | ||
|
|
ef784be082 | ||
|
|
855c41a0e9 | ||
|
|
6ef9667f72 | ||
|
|
068d384e7a | ||
|
|
c3699a8595 | ||
|
|
2cb7513355 | ||
|
|
c58caeda4c | ||
|
|
26fc56f2b8 | ||
|
|
c44ae2f00c | ||
|
|
a00b62ffcc | ||
|
|
6a9e7aa89d | ||
|
|
6206b38a78 | ||
|
|
1767bfa70d | ||
|
|
b1d6611923 | ||
|
|
a6a713f40e | ||
|
|
e76ad04207 | ||
|
|
a231adbfdd | ||
|
|
88f97ecb4e | ||
|
|
68a471b859 | ||
|
|
9393324e1f | ||
|
|
944931f7d1 | ||
|
|
5a56be8a75 | ||
|
|
fe7aebae05 | ||
|
|
b6c3b0cdc3 | ||
|
|
fd734fadbc | ||
|
|
a3dc250698 | ||
|
|
3f2d36284f | ||
|
|
60d5184a7b | ||
|
|
da612bdc7b | ||
|
|
628a085ba8 | ||
|
|
5ae91ac620 | ||
|
|
70265c55ef | ||
|
|
7c3b5fc31e | ||
|
|
a9a830caa2 | ||
|
|
b49ff3d4ed | ||
|
|
42310fa170 | ||
|
|
bfff1d9e2f | ||
|
|
2c98777b9f | ||
|
|
4a91260a31 | ||
|
|
076971bcae | ||
|
|
01fcc9bcab | ||
|
|
f56f201bad | ||
|
|
45e579f0ef | ||
|
|
39db811361 | ||
|
|
ff87555eba | ||
|
|
6c5c2d40bc | ||
|
|
c08459e370 | ||
|
|
42418394ed | ||
|
|
64fd0e2f28 | ||
|
|
2de061203b | ||
|
|
cee0d3f03e | ||
|
|
aa19ae129b | ||
|
|
aecbf8ccb3 | ||
|
|
7e5c19f507 | ||
|
|
b178ecd494 | ||
|
|
05d5039fab | ||
|
|
1004e5a8bd | ||
|
|
dbcfe6fc6e | ||
|
|
56698aefe6 | ||
|
|
cbd2e136ed | ||
|
|
9846d7f8e4 | ||
|
|
d16c86a4d7 | ||
|
|
292e642d16 | ||
|
|
90736b52be | ||
|
|
928e8a200b | ||
|
|
2ee06eab2d | ||
|
|
01913983ea | ||
|
|
0aa2f2c44d | ||
|
|
f66d655782 | ||
|
|
4094a08198 | ||
|
|
05389da412 | ||
|
|
e38258b04b | ||
|
|
0cd0e2f730 | ||
|
|
d2c7483db1 | ||
|
|
d388c52ccd | ||
|
|
4a2954d3a4 | ||
|
|
804b9a1d71 | ||
|
|
1067efbbee | ||
|
|
d41ecbeed6 | ||
|
|
f93148b7d7 | ||
|
|
348877c7cd | ||
|
|
fb7c2573bf | ||
|
|
e4fcc77b0a | ||
|
|
5c9b79729f | ||
|
|
00d4541537 | ||
|
|
1660e563ab | ||
|
|
b94081c45b | ||
|
|
f7b59f0140 | ||
|
|
22aecbe4ba | ||
|
|
be98db9023 | ||
|
|
828e095e64 | ||
|
|
8e1e21b960 | ||
|
|
303d8815e3 | ||
|
|
ba574dda62 | ||
|
|
bf630b5f7d | ||
|
|
9b4bf148cc | ||
|
|
f5212b4aa1 | ||
|
|
eea4cdf379 | ||
|
|
e909b48fea | ||
|
|
258aabbdde | ||
|
|
478f26e75a | ||
|
|
57cc558b9b | ||
|
|
29984d4b09 | ||
|
|
e1a266e5d8 | ||
|
|
a33a7317cc | ||
|
|
1d0bcd857e | ||
|
|
040da2429f | ||
|
|
978a395421 | ||
|
|
63e5625d62 | ||
|
|
38bbae13b9 | ||
|
|
e975a8106f | ||
|
|
6a49887ad7 | ||
|
|
5565ec2ddb | ||
|
|
20b1f8eff8 | ||
|
|
34fd000df9 | ||
|
|
1132177e2d | ||
|
|
5be39c04ef | ||
|
|
0ee4593608 | ||
|
|
f301344587 | ||
|
|
d2c5c856ab | ||
|
|
5f8e4ae10c | ||
|
|
4ff30b1a9d | ||
|
|
a0b215dab6 | ||
|
|
144e82d7e2 | ||
|
|
79252ba3b0 | ||
|
|
c5286093f9 | ||
|
|
5ad194bd45 | ||
|
|
501113da44 | ||
|
|
f0a7990404 | ||
|
|
27f53ff4a6 | ||
|
|
9ec5dfc8b1 | ||
|
|
e4c1e414c8 | ||
|
|
a391650472 | ||
|
|
3cfde2b40d | ||
|
|
8bf1ed33dc | ||
|
|
422b3be0c5 | ||
|
|
c34e44c4ec | ||
|
|
a2b20eca67 | ||
|
|
d41c316bfb | ||
|
|
ca1d8aab84 | ||
|
|
32e3dcff7c | ||
|
|
9a23470622 | ||
|
|
c37a186802 | ||
|
|
84c17e3b22 | ||
|
|
64e0fca124 | ||
|
|
5c6537fd7a | ||
|
|
764a82df00 | ||
|
|
e904911fd9 | ||
|
|
a7494f72f6 | ||
|
|
b6b53b028d | ||
|
|
1743ce714a | ||
|
|
656f0c5d11 | ||
|
|
d80aebe1f4 | ||
|
|
ad48bc1962 | ||
|
|
d72fbb7098 | ||
|
|
95d5eaa09b | ||
|
|
b997a6159e | ||
|
|
1cd8b7a450 | ||
|
|
c5a8eb4261 | ||
|
|
8891c29cbd | ||
|
|
2facdfa1dd | ||
|
|
65c9fa0c21 | ||
|
|
e53c85dbaf | ||
|
|
3a231e8e61 | ||
|
|
4dc7776387 | ||
|
|
5ca043e0f1 | ||
|
|
9ef052c814 | ||
|
|
6d1690beaa | ||
|
|
171656e5be | ||
|
|
385e7f4871 | ||
|
|
89c5485784 | ||
|
|
02d191ec28 | ||
|
|
47c3090f3a | ||
|
|
476dac1ac1 | ||
|
|
8ca0d0ced4 | ||
|
|
ab197489d7 | ||
|
|
99736d187b | ||
|
|
197c09bd0d | ||
|
|
6cc634ba1f | ||
|
|
4c89ad91d2 | ||
|
|
d66233bce0 | ||
|
|
b485e6927e | ||
|
|
74b9e8bd7b | ||
|
|
545742ecc0 | ||
|
|
d9f1f65352 | ||
|
|
0904d17a5f | ||
|
|
87171b4246 | ||
|
|
78f8b56203 | ||
|
|
b79045eddb | ||
|
|
6eb67b1a3c | ||
|
|
777ec39bd9 | ||
|
|
9dcafaaa38 | ||
|
|
097e2fb653 | ||
|
|
e7aa97634b | ||
|
|
447b9f265f | ||
|
|
029a6f03b7 | ||
|
|
ae4a349d79 | ||
|
|
35728c7911 | ||
|
|
469330f270 | ||
|
|
03f9c56928 | ||
|
|
ed2a2a8975 | ||
|
|
b5380f183c | ||
|
|
f5bcaba352 | ||
|
|
5a70b23db9 | ||
|
|
fc3487e545 | ||
|
|
a4863dc8d7 | ||
|
|
af12a08e25 | ||
|
|
312dc294b3 | ||
|
|
d958dd5ee4 | ||
|
|
1ddc49b17b | ||
|
|
322541b16f | ||
|
|
00cb10f029 | ||
|
|
ed24a721ed | ||
|
|
9fc10e0f65 | ||
|
|
ab212e0565 | ||
|
|
eac0049577 | ||
|
|
9d1d51d0d7 | ||
|
|
4fd3c4ada6 | ||
|
|
dd73d8fc69 | ||
|
|
b89d37c8c5 | ||
|
|
bc4983c771 | ||
|
|
e6c186b31b | ||
|
|
b106fa55d3 | ||
|
|
981e42c5a9 | ||
|
|
c160c5a555 | ||
|
|
31c7bf5348 | ||
|
|
89bf457878 | ||
|
|
6eadf718fc | ||
|
|
effced24d1 | ||
|
|
09f399db9a | ||
|
|
2b73f6faea | ||
|
|
943662605e | ||
|
|
9a04962bd6 | ||
|
|
91a36eb9a0 | ||
|
|
c371f6bbb5 | ||
|
|
8324e2e454 | ||
|
|
30307c1b56 | ||
|
|
f139d0d2a8 | ||
|
|
33843764a7 | ||
|
|
aca7d7c571 | ||
|
|
bff72f609c | ||
|
|
adb03b7420 | ||
|
|
2094e18b60 | ||
|
|
541d8ddd40 | ||
|
|
a3d0ceb6a5 | ||
|
|
7679c11b5b | ||
|
|
e7ae2ab441 | ||
|
|
dd5feb0e2c | ||
|
|
b95d05c134 | ||
|
|
87bdd0016e | ||
|
|
b9befa4e63 | ||
|
|
d9ed00ddee | ||
|
|
4c2b484c2b | ||
|
|
ff31e41fec | ||
|
|
34204f6183 | ||
|
|
6fc8763895 | ||
|
|
1a0914196f | ||
|
|
9dd1adacd2 | ||
|
|
93c5268fbc | ||
|
|
98edc89fa0 | ||
|
|
3aad412102 | ||
|
|
a2ee9524fb | ||
|
|
78955a1540 | ||
|
|
f412b7e734 | ||
|
|
b13f3004e2 | ||
|
|
a093b0f8e8 | ||
|
|
34a84c6548 | ||
|
|
6c52c1177b | ||
|
|
f9bc312f91 | ||
|
|
7283153f44 | ||
|
|
df6b2bd0e8 |
@@ -0,0 +1,54 @@
|
|||||||
|
module.exports = {
|
||||||
|
root: true,
|
||||||
|
parser: "vue-eslint-parser",
|
||||||
|
"env": {
|
||||||
|
"browser": true,
|
||||||
|
"es2021": true,
|
||||||
|
'vue/setup-compiler-macros': true
|
||||||
|
},
|
||||||
|
ignorePatterns: ['*.test.ts', '.eslintrc.cjs', 'postcss.config.cjs', 'webpack.config.cjs', '*.js'],
|
||||||
|
overrides: [{
|
||||||
|
files: ['*.ts', '*.tsx', "*.vue"],
|
||||||
|
}],
|
||||||
|
plugins: [
|
||||||
|
"@typescript-eslint",
|
||||||
|
"prettier"
|
||||||
|
],
|
||||||
|
|
||||||
|
extends: [
|
||||||
|
"eslint:recommended",
|
||||||
|
"plugin:vue/vue3-recommended",
|
||||||
|
"plugin:@typescript-eslint/recommended",
|
||||||
|
"prettier",
|
||||||
|
],
|
||||||
|
parserOptions: {
|
||||||
|
"sourceType": "module",
|
||||||
|
"project": "./tsconfig.json",
|
||||||
|
"ecmaVersion": 2021,
|
||||||
|
"parser": "@typescript-eslint/parser",
|
||||||
|
extraFileExtensions: ['.vue']
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
'@typescript-eslint/no-floating-promises': 'error',
|
||||||
|
'vue/script-setup-uses-vars': 'error',
|
||||||
|
'vue/max-attributes-per-line': [
|
||||||
|
'warn',
|
||||||
|
{
|
||||||
|
singleline: 4, //prettier와 싸우지 말자
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'vue/v-on-event-hyphenation': 'off', //vue3에선 필요없다고 생각
|
||||||
|
'vue/attribute-hyphenation': 'off', //vue3에선 필요없다고 생각
|
||||||
|
},
|
||||||
|
settings: {
|
||||||
|
'import/resolver': {
|
||||||
|
alias: {
|
||||||
|
map: [
|
||||||
|
['@', './hwe/ts'],
|
||||||
|
['@util', './hwe/ts/util'],
|
||||||
|
['@scss', './hwe/scss'],
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -1,48 +1,74 @@
|
|||||||
.vscode/*
|
.vscode/*
|
||||||
!.vscode/settings.json
|
!.vscode/settings.json
|
||||||
!.vscode/tasks.json
|
!.vscode/tasks.json
|
||||||
!.vscode/launch.json
|
!.vscode/launch.json
|
||||||
!.vscode/extensions.json
|
!.vscode/extensions.json
|
||||||
|
|
||||||
|
/node_modules
|
||||||
|
|
||||||
|
# 체섭 ignore
|
||||||
# 체섭 ignore
|
*.log
|
||||||
*.log
|
|
||||||
|
logs/*.txt
|
||||||
logs/*.txt
|
api_log.db
|
||||||
d_log/*.txt
|
d_log/*.txt
|
||||||
d_log/*.zip
|
d_log/*.zip
|
||||||
sess_*
|
d_log/*.db
|
||||||
*/logs/*.txt
|
sess_*
|
||||||
*/logs/*/*.txt
|
*/logs/*.txt
|
||||||
err.txt
|
*/logs/*/*.txt
|
||||||
che/.htaccess
|
*/logs/preserved
|
||||||
kwe/.htaccess
|
err.txt
|
||||||
pwe/.htaccess
|
|
||||||
twe/.htaccess
|
hwe/.htaccess
|
||||||
hwe/.htaccess
|
|
||||||
|
d_shared
|
||||||
d_shared
|
|
||||||
|
/d_pic
|
||||||
d_pic/*.jpg
|
d_pic/*.jpg
|
||||||
d_pic/*.gif
|
d_pic/*.gif
|
||||||
d_pic/*.png
|
d_pic/*.png
|
||||||
|
d_pic/*.webp
|
||||||
d_setting/*.php
|
d_pic/*.avif
|
||||||
*/d_setting/*.php
|
d_pic/uploaded_image
|
||||||
*/d_setting/templates/*.php
|
|
||||||
|
/dist_js
|
||||||
**/old/*
|
*/dist_misc/*
|
||||||
test.php
|
*/dist_js/*
|
||||||
|
*/dist_css/*
|
||||||
/che
|
/dist_misc/*
|
||||||
/kwe
|
/dist_js/*
|
||||||
/pwe
|
/dist_css/*
|
||||||
/nya
|
|
||||||
/pya
|
d_setting/*.php
|
||||||
/twe
|
*/d_setting/*.php
|
||||||
|
*/d_setting/*.json
|
||||||
phpinfo.php
|
*/d_setting/templates/*.php
|
||||||
vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/*
|
!*.orig.php
|
||||||
*.sqlite3
|
|
||||||
|
**/data/file_cache
|
||||||
|
|
||||||
|
**/old/*
|
||||||
|
test.*
|
||||||
|
|
||||||
|
/che
|
||||||
|
/kwe
|
||||||
|
/pwe
|
||||||
|
/nya
|
||||||
|
/pya
|
||||||
|
/twe
|
||||||
|
|
||||||
|
/hwe/data
|
||||||
|
|
||||||
|
/vendor
|
||||||
|
phpinfo.php
|
||||||
|
*.sqlite3
|
||||||
|
|
||||||
|
ingame/js/*
|
||||||
|
ingame/css/*
|
||||||
|
gateway/js/*
|
||||||
|
gateway/css/*
|
||||||
|
|
||||||
|
*.db-journal
|
||||||
|
|
||||||
|
d_log/cachegrind.*
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"extension": ["ts"],
|
||||||
|
"spec": "hwe/test-ts/**/*.test.ts",
|
||||||
|
"require": [
|
||||||
|
"ts-node/register",
|
||||||
|
"tsconfig-paths/register"
|
||||||
|
],
|
||||||
|
"node-option": [
|
||||||
|
"experimental-specifier-resolution=node",
|
||||||
|
"loader=ts-node/esm"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -2,44 +2,120 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* This configuration will be read and overlaid on top of the
|
* This configuration will be read and overlaid on top of the
|
||||||
* default configuration. Command line arguments will be applied
|
* default configuration. Command-line arguments will be applied
|
||||||
* after this file is read.
|
* after this file is read.
|
||||||
*/
|
*/
|
||||||
return [
|
return [
|
||||||
|
// Supported values: `'5.6'`, `'7.0'`, `'7.1'`, `'7.2'`, `'7.3'`,
|
||||||
// Supported values: '7.0', '7.1', '7.2', null.
|
// `'7.4'`, `'8.0'`, `'8.1'`, `null`.
|
||||||
// If this is set to null,
|
// If this is set to `null`,
|
||||||
// then Phan assumes the PHP version which is closest to the minor version
|
// then Phan assumes the PHP version which is closest to the minor version
|
||||||
// of the php executable used to execute phan.
|
// of the php executable used to execute Phan.
|
||||||
"target_php_version" => '7.0',
|
//
|
||||||
'backward_compatibility_checks ' => false,
|
// Note that the **only** effect of choosing `'5.6'` is to infer
|
||||||
'ignore_undeclared_variables_in_global_scope' => false,
|
// that functions removed in php 7.0 exist.
|
||||||
'minimum_severity'=>\Phan\Issue::SEVERITY_LOW,
|
// (See `backward_compatibility_checks` for additional options)
|
||||||
|
"target_php_version" => '8.2',
|
||||||
|
"minimum_target_php_version" => '8.2',
|
||||||
|
'minimum_severity' => \Phan\Issue::SEVERITY_NORMAL,
|
||||||
|
|
||||||
'file_list' => [
|
'file_list' => [
|
||||||
'f_config/config.php',
|
'f_config/config.php',
|
||||||
'hwe/MYDB.php',
|
'hwe/_119_b.php',
|
||||||
'hwe/lib.php',
|
'hwe/_119.php',
|
||||||
|
'hwe/a_bestGeneral.php',
|
||||||
|
'hwe/_admin1.php',
|
||||||
|
'hwe/_admin1_submit.php',
|
||||||
|
'hwe/_admin2.php',
|
||||||
|
'hwe/_admin2_submit.php',
|
||||||
|
'hwe/_admin5.php',
|
||||||
|
'hwe/_admin5_submit.php',
|
||||||
|
'hwe/_admin7.php',
|
||||||
|
'hwe/_admin8.php',
|
||||||
|
'hwe/_admin_force_rehall.php',
|
||||||
|
'hwe/a_emperior_detail.php',
|
||||||
|
'hwe/a_emperior.php',
|
||||||
|
'hwe/a_genList.php',
|
||||||
|
'hwe/a_hallOfFame.php',
|
||||||
|
'hwe/a_kingdomList.php',
|
||||||
|
'hwe/a_npcList.php',
|
||||||
|
'hwe/api.php',
|
||||||
|
'hwe/a_traffic.php',
|
||||||
|
'hwe/battle_simulator.php',
|
||||||
|
'hwe/b_betting.php',
|
||||||
|
'hwe/v_chiefCenter.php',
|
||||||
|
'hwe/b_currentCity.php',
|
||||||
|
'hwe/v_nationStratFinan.php',
|
||||||
|
'hwe/b_genList.php',
|
||||||
|
'hwe/b_myBossInfo.php',
|
||||||
|
'hwe/b_myCityInfo.php',
|
||||||
|
'hwe/b_myGenInfo.php',
|
||||||
|
'hwe/b_myKingdomInfo.php',
|
||||||
|
'hwe/b_myPage.php',
|
||||||
|
'hwe/v_processing.php',
|
||||||
|
'hwe/b_tournament.php',
|
||||||
|
'hwe/c_tournament.php',
|
||||||
'hwe/func_auction.php',
|
'hwe/func_auction.php',
|
||||||
'hwe/func_command.php',
|
'hwe/func_command.php',
|
||||||
'hwe/func_converter.php',
|
'hwe/func_converter.php',
|
||||||
'hwe/func_diplomacy.php',
|
|
||||||
'hwe/func_gamerule.php',
|
'hwe/func_gamerule.php',
|
||||||
'hwe/func_history.php',
|
'hwe/func_history.php',
|
||||||
'hwe/func_legacy.php',
|
'hwe/func_legacy.php',
|
||||||
'hwe/func_map.php',
|
'hwe/func_map.php',
|
||||||
'hwe/func_message.php',
|
'hwe/func_message.php',
|
||||||
'hwe/func_npc.php',
|
'hwe/func.php',
|
||||||
'hwe/func_process_chief.php',
|
|
||||||
'hwe/func_process_personnel.php',
|
|
||||||
'hwe/func_process_sabotage.php',
|
|
||||||
'hwe/func_process.php',
|
'hwe/func_process.php',
|
||||||
'hwe/func_string.php',
|
'hwe/func_string.php',
|
||||||
'hwe/func_template.php',
|
'hwe/func_template.php',
|
||||||
'hwe/func_time_event.php',
|
'hwe/func_time_event.php',
|
||||||
'hwe/func_tournament.php',
|
'hwe/func_tournament.php',
|
||||||
|
'hwe/index.php',
|
||||||
|
'hwe/install_db.php',
|
||||||
|
'hwe/install.php',
|
||||||
|
'hwe/j_adjust_icon.php',
|
||||||
|
'hwe/j_autoreset.php',
|
||||||
|
'hwe/j_basic_info.php',
|
||||||
|
'hwe/j_board_article_add.php',
|
||||||
|
'hwe/j_board_comment_add.php',
|
||||||
|
'hwe/j_board_get_articles.php',
|
||||||
|
'hwe/j_diplomacy_destroy_letter.php',
|
||||||
|
'hwe/j_diplomacy_get_letter.php',
|
||||||
|
'hwe/j_diplomacy_respond_letter.php',
|
||||||
|
'hwe/j_diplomacy_rollback_letter.php',
|
||||||
|
'hwe/j_diplomacy_send_letter.php',
|
||||||
|
'hwe/j_export_simulator_object.php',
|
||||||
|
'hwe/j_general_log_old.php',
|
||||||
|
'hwe/j_general_set_permission.php',
|
||||||
|
'hwe/j_get_basic_general_list.php',
|
||||||
|
'hwe/j_get_city_list.php',
|
||||||
|
'hwe/j_get_select_npc_token.php',
|
||||||
|
'hwe/j_get_select_pool.php',
|
||||||
|
'hwe/j_install_db.php',
|
||||||
|
'hwe/j_install.php',
|
||||||
|
'hwe/j_load_scenarios.php',
|
||||||
|
'hwe/j_map.php',
|
||||||
|
'hwe/j_map_recent.php',
|
||||||
|
'hwe/j_myBossInfo.php',
|
||||||
|
'hwe/j_raise_event.php',
|
||||||
|
'hwe/j_select_npc.php',
|
||||||
|
'hwe/j_select_picked_general.php',
|
||||||
|
'hwe/j_server_basic_info.php',
|
||||||
|
'hwe/j_set_my_setting.php',
|
||||||
|
'hwe/j_set_npc_control.php',
|
||||||
|
'hwe/j_simulate_battle.php',
|
||||||
|
'hwe/j_update_picked_general.php',
|
||||||
|
'hwe/j_vacation.php',
|
||||||
|
'hwe/lib.php',
|
||||||
'hwe/process_war.php',
|
'hwe/process_war.php',
|
||||||
'hwe/func.php'
|
'hwe/proc.php',
|
||||||
|
'hwe/recent_map.php',
|
||||||
|
'hwe/select_general_from_pool.php',
|
||||||
|
'hwe/select_npc.php',
|
||||||
|
'hwe/t_diplomacy.php',
|
||||||
|
'hwe/v_board.php',
|
||||||
|
'hwe/v_inheritPoint.php',
|
||||||
|
'hwe/v_join.php',
|
||||||
|
'hwe/v_NPCControl.php',
|
||||||
],
|
],
|
||||||
|
|
||||||
// A list of directories that should be parsed for class and
|
// A list of directories that should be parsed for class and
|
||||||
@@ -50,9 +126,9 @@ return [
|
|||||||
// Thus, both first-party and third-party code being used by
|
// Thus, both first-party and third-party code being used by
|
||||||
// your application should be included in this list.
|
// your application should be included in this list.
|
||||||
'directory_list' => [
|
'directory_list' => [
|
||||||
'hwe/d_setting',
|
'hwe/d_setting',
|
||||||
'hwe/sammo',
|
'hwe/sammo',
|
||||||
'd_setting',
|
'd_setting',
|
||||||
'src/sammo',
|
'src/sammo',
|
||||||
'src/kakao',
|
'src/kakao',
|
||||||
'vendor'
|
'vendor'
|
||||||
@@ -74,6 +150,11 @@ return [
|
|||||||
'vendor/'
|
'vendor/'
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'suppress_issue_types' => [
|
||||||
|
'PhanUnreferencedUseNormal',
|
||||||
|
'PhanTypeArraySuspiciousNullable',
|
||||||
|
],
|
||||||
|
|
||||||
// A list of plugin files to execute.
|
// A list of plugin files to execute.
|
||||||
// See https://github.com/phan/phan/tree/master/.phan/plugins for even more.
|
// See https://github.com/phan/phan/tree/master/.phan/plugins for even more.
|
||||||
// (Pass these in as relative paths.
|
// (Pass these in as relative paths.
|
||||||
@@ -88,4 +169,4 @@ return [
|
|||||||
'PregRegexCheckerPlugin',
|
'PregRegexCheckerPlugin',
|
||||||
'PrintfCheckerPlugin',
|
'PrintfCheckerPlugin',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"tabWidth": 2,
|
||||||
|
"useTabs": false,
|
||||||
|
"printWidth": 120
|
||||||
|
}
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
"/nya":true,
|
"/nya":true,
|
||||||
"/pya":true,
|
"/pya":true,
|
||||||
"/twe":true,
|
"/twe":true,
|
||||||
|
|
||||||
},
|
},
|
||||||
"search.exclude": {
|
"search.exclude": {
|
||||||
"e_lib/*":true,
|
"e_lib/*":true,
|
||||||
@@ -24,5 +24,10 @@
|
|||||||
"/nya":true,
|
"/nya":true,
|
||||||
"/pya":true,
|
"/pya":true,
|
||||||
"/twe":true,
|
"/twe":true,
|
||||||
},
|
},
|
||||||
|
"cSpell.words": [
|
||||||
|
"josa",
|
||||||
|
"sammo"
|
||||||
|
],
|
||||||
|
"editor.tabSize": 4
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="color-scheme" content="dark">
|
||||||
|
<title>닫혀 있습니다.</title>
|
||||||
|
<script>
|
||||||
|
setTimeout(function(){
|
||||||
|
window.location.href = '../';
|
||||||
|
}, 5000);
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
html, body{
|
||||||
|
background-color:black;
|
||||||
|
color:yellow;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
서버가 닫혀있습니다.<br>
|
||||||
|
잠시 뒤에 입구로 이동합니다.
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
The MIT License
|
The MIT License
|
||||||
|
|
||||||
Copyright (c) 2018 Hide_D, 62che
|
Copyright (c) 2023 Hide_D, 62che
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -5,34 +5,44 @@
|
|||||||
|
|
||||||
## 요구사항
|
## 요구사항
|
||||||
|
|
||||||
* Apache2
|
* Apache2 또는 nginx
|
||||||
* <code>mpm_event</code> 권장
|
* Apache2인 경우 `mpm_event` 권장
|
||||||
* PHP 7.2 이상
|
* PHP 8.0 이상
|
||||||
* <code>php-fpm</code> 권장
|
* `php-fpm` 권장
|
||||||
* php에서 curl을 실행가능해야 합니다.
|
* php에서 curl, pdo-sqlite을 실행가능해야 합니다.
|
||||||
* MySQL 5.6 이상, 또는 MariaDB 10.0 이상
|
* mysqli, mysqlnd
|
||||||
* <code>git</code>
|
* gd
|
||||||
* <code>curl</code>
|
* mbstring
|
||||||
|
* NodeJS 14 이상
|
||||||
|
* 내부의 git을 통해 upgrade 때 `webpack build` 용도로 필요합니다.
|
||||||
|
* MariaDB 10.2.1 이상
|
||||||
|
* 현재 MySQL은 지원하지 않습니다.
|
||||||
|
* `git`
|
||||||
|
* `curl`
|
||||||
|
|
||||||
Linux는 Ubuntu 16.04, Windows는 Windows 10에서 XAMPP를 사용한 환경에서 테스트되었습니다.
|
Linux는 Ubuntu 18.04, 20.04, Windows는 WSL2를 사용한 환경에서 테스트되었습니다.
|
||||||
|
|
||||||
Docker를 이용한 설치는 계획중입니다.
|
Docker를 이용한 설치도 제공하고 있습니다.
|
||||||
|
|
||||||
## 설치
|
## Docker를 이용한 설치
|
||||||
|
|
||||||
|
https://storage.hided.net/gitea/devsam/docker 를 참고해 주세요.
|
||||||
|
|
||||||
|
## 수동 설치
|
||||||
|
|
||||||
본 게임은 <code>git</code>을 이용한 업그레이드 시스템을 구현하였으므로, <code>git</code>이 필요합니다.
|
본 게임은 <code>git</code>을 이용한 업그레이드 시스템을 구현하였으므로, <code>git</code>이 필요합니다.
|
||||||
또한 웹 서비스 데몬을 운영중인 사용자(일반적으로 <code>www-data</code>, <code>apache</code>)에게 디렉토리 권한이 주어져야합니다.
|
또한 웹 서비스 데몬을 운영중인 사용자(일반적으로 <code>www-data</code>)에게 디렉토리 권한이 주어져야합니다.
|
||||||
|
|
||||||
### 다운로드
|
### 다운로드
|
||||||
|
|
||||||
웹 데몬 user가 <code>www-data</code>인 경우 다음과 같이 입력하여 최신 배포버전과 이미지 파일을 얻을 수 있습니다.
|
웹 데몬 user가 <code>www-data</code>인 경우 다음과 같이 입력하여 최신 배포버전과 이미지 파일을 얻을 수 있습니다.
|
||||||
|
|
||||||
```
|
```
|
||||||
sudo -u www-data git clone ssh://git@storage.hided.net:2525/devsam/core.git
|
sudo -u www-data git clone https://storage.hided.net/gitea/devsam/core.git
|
||||||
git clone ssh://git@storage.hided.net:2525/devsam/image.git
|
sudo -u www-data git clone https://storage.hided.net/gitea/devsam/image.git
|
||||||
```
|
```
|
||||||
|
|
||||||
> 이미지는 git hook을 이용한 업데이트 기능을 제공하지만 아직 범용성 있는 설계가 되어있진 않습니다.
|
> 이미지는 hook/git_hook.php을 통해 동기화되며, 서버 설치 과정에 이미지 갱신 키를 지정하는 것으로 '훼' 서버 업데이트 시 동기화됩니다. 이미지 서버가 게임 서버와 별개여도 동작하나, php와 git을 지원해야합니다.
|
||||||
|
|
||||||
### 설치
|
### 설치
|
||||||
|
|
||||||
@@ -45,9 +55,9 @@ Database 수는 로그인 관리 서버 1개, 내부 서버 7개로, 총 8개의
|
|||||||
|
|
||||||
## 카카오로그인 연동
|
## 카카오로그인 연동
|
||||||
|
|
||||||
현재 카카오로그인 API KEY를 입력하는 작업이 설치과정에 추가되어있지 않습니다.
|
서버 설치 시 카카오 로그인 연동을 위한 API KEY를 입력받습니다.
|
||||||
|
|
||||||
<code>f_install/templates/KakaoKey.orig.php</code> 를 <code>d_setting/KakaoKey.php</code>로 복사한 후 API 키를 입력하여야 합니다.
|
만약 설치 이후 API KEY를 변경하고자 하는 경우 <code>d_setting/KakaoKey.php</code>에서 API키를 변경해야 합니다.
|
||||||
|
|
||||||
|
|
||||||
## 라이선스
|
## 라이선스
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace sammo;
|
||||||
|
|
||||||
|
require(__DIR__ . '/vendor/autoload.php');
|
||||||
|
|
||||||
|
|
||||||
|
if (!class_exists('\\sammo\\RootDB')) {
|
||||||
|
Json::dieWithReason('No DB');
|
||||||
|
}
|
||||||
|
$eParams = $_GET;
|
||||||
|
if(key_exists('path', $eParams)){
|
||||||
|
unset($eParams['path']);
|
||||||
|
}
|
||||||
|
|
||||||
|
APIHelper::launch(dirname(__FILE__), $_GET['path']??'', $eParams, true);
|
||||||
@@ -1,45 +1,52 @@
|
|||||||
{
|
{
|
||||||
"name":"sammo-hid/sammo",
|
"name":"sammo-hid/sammo",
|
||||||
"description":"삼국지 모의전투 HiDCHe",
|
"description":"삼국지 모의전투 HiDCHe",
|
||||||
"license": [
|
"license": [
|
||||||
"MIT",
|
"MIT",
|
||||||
"GPL-2.0-or-later",
|
"GPL-2.0-or-later",
|
||||||
"proprietary"
|
"proprietary"
|
||||||
],
|
],
|
||||||
"require": {
|
"config": {
|
||||||
"brandonwamboldt/utilphp": "^1.1",
|
"platform": {
|
||||||
"sergeytsalkov/meekrodb": "^2.3",
|
"php": "8.3"
|
||||||
"league/plates": "^3.3",
|
}
|
||||||
"guzzlehttp/guzzle": "^6.3",
|
},
|
||||||
"leafo/scssphp": "^0.7.5",
|
"require": {
|
||||||
"monolog/monolog": "^1.23",
|
"sergeytsalkov/meekrodb": "^2.5",
|
||||||
"firephp/firephp-core": "^0.4.0",
|
"league/plates": "^3.5",
|
||||||
"vlucas/valitron": "^1.4",
|
"vlucas/valitron": "^1.4",
|
||||||
"php-extended/php-tail": "^2.1",
|
"php-extended/php-tail": "^5.0",
|
||||||
"pguardiario/phpuri": "^1.0",
|
"symfony/lock": "^6.2",
|
||||||
"symfony/lock": "^4.1",
|
"ezyang/htmlpurifier": "^4.10",
|
||||||
"ezyang/htmlpurifier": "^4.10",
|
"xemlock/htmlpurifier-html5": "^0.1.7",
|
||||||
"xemlock/htmlpurifier-html5": "^0.1.7",
|
"catfan/medoo": "^2.1",
|
||||||
"catfan/medoo": "^1.5"
|
"phan/phan": "^5.4",
|
||||||
},
|
"nette/caching": "^3.3",
|
||||||
"autoload": {
|
"illuminate/database": "^10.0",
|
||||||
"psr-4": {
|
"illuminate/events": "^10.0",
|
||||||
"sammo\\": [
|
"php-ds/php-ds": "^1.5",
|
||||||
"src/sammo"
|
"hided62/ldto": "^1.0",
|
||||||
],
|
"league/uri": "^6.8"
|
||||||
"kakao\\": [
|
},
|
||||||
"src/kakao"
|
"autoload": {
|
||||||
]
|
"psr-4": {
|
||||||
},
|
"sammo\\": [
|
||||||
"classmap": [
|
"d_setting",
|
||||||
"d_setting/"
|
"src/sammo"
|
||||||
],
|
],
|
||||||
"exclude-from-classmap": [
|
"kakao\\": [
|
||||||
"**/*.orig.php"
|
"d_setting",
|
||||||
],
|
"src/kakao"
|
||||||
"files":[
|
]
|
||||||
"f_config/config.php"
|
},
|
||||||
]
|
"exclude-from-classmap": [
|
||||||
}
|
"**/*.orig.php"
|
||||||
|
],
|
||||||
}
|
"files":[
|
||||||
|
"f_config/config.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^10.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,167 +1,246 @@
|
|||||||
@charset "utf-8";
|
@charset "utf-8";
|
||||||
|
body {
|
||||||
body {
|
color: white;
|
||||||
color:white; background-color:black; font-family: '맑은 고딕';
|
background-color: black;
|
||||||
}
|
font-family: 'Pretendard';
|
||||||
|
}
|
||||||
table {
|
|
||||||
border: solid 1px; border-spacing: 0px; border-collapse: separate; border-top-color: gray; border-left-color: gray; border-right-color: black; border-bottom-color: black;
|
table {
|
||||||
padding: 0px;
|
border: solid 1px;
|
||||||
font-size: 13px;
|
border-spacing: 0px;
|
||||||
word-break: break-all;
|
border-collapse: separate;
|
||||||
text-align: center;
|
border-top-color: gray;
|
||||||
font-family: '맑은 고딕';
|
border-left-color: gray;
|
||||||
}
|
border-right-color: black;
|
||||||
th, td {
|
border-bottom-color: black;
|
||||||
border: solid 1px; border-spacing: 0px; border-collapse: separate; border-top-color: gray; border-left-color: gray; border-right-color: black; border-bottom-color: black;
|
padding: 0px;
|
||||||
padding: 0px;
|
font-size: 14px;
|
||||||
font-size: 13px;
|
word-break: break-all;
|
||||||
word-break: break-all;
|
text-align: center;
|
||||||
text-align: center;
|
}
|
||||||
font-family: '맑은 고딕';
|
|
||||||
}
|
th,
|
||||||
|
td {
|
||||||
a.just_link {
|
border: solid 1px;
|
||||||
text-decoration: none;
|
border-spacing: 0px;
|
||||||
}
|
border-collapse: separate;
|
||||||
|
border-top-color: gray;
|
||||||
.with_border{
|
border-left-color: gray;
|
||||||
margin:0;
|
border-right-color: black;
|
||||||
border: solid 1px;
|
border-bottom-color: black;
|
||||||
border-spacing: 0px;
|
padding: 0px;
|
||||||
border-collapse: separate;
|
font-size: 14px;
|
||||||
border-top-color: gray;
|
word-break: break-all;
|
||||||
border-left-color: gray;
|
text-align: center;
|
||||||
border-right-color: black;
|
}
|
||||||
border-bottom-color: black;
|
|
||||||
}
|
a.just_link {
|
||||||
|
text-decoration: none;
|
||||||
.section_title {
|
}
|
||||||
height:50px;
|
|
||||||
line-height:50px;
|
.with_border {
|
||||||
font-size: 30px; font-weight: bold;
|
margin: 0;
|
||||||
text-align: center;
|
border: solid 1px;
|
||||||
color:white;
|
border-spacing: 0px;
|
||||||
padding:0;
|
border-collapse: separate;
|
||||||
}
|
border-top-color: gray;
|
||||||
|
border-left-color: gray;
|
||||||
.legacy_layout div {
|
border-right-color: black;
|
||||||
border: solid 1px; border-spacing: 0px; border-collapse: separate; border-top-color: gray; border-left-color: gray; border-right-color: black; border-bottom-color: black;
|
border-bottom-color: black;
|
||||||
padding: 0px;
|
}
|
||||||
font-size: 13px;
|
|
||||||
word-break: break-all;
|
.section_title {
|
||||||
text-align: center;
|
height: 50px;
|
||||||
font-family: '맑은 고딕';;
|
line-height: 50px;
|
||||||
}
|
font-size: 30px;
|
||||||
|
font-weight: bold;
|
||||||
.obj_fill{
|
text-align: center;
|
||||||
display:block;
|
color: white;
|
||||||
width:100%;
|
padding: 0;
|
||||||
height:100%;
|
}
|
||||||
}
|
|
||||||
|
.legacy_layout div {
|
||||||
button.with_skin {
|
border: solid 1px;
|
||||||
padding:0 4px;
|
border-spacing: 0px;
|
||||||
background-color: black; color: white;
|
border-collapse: separate;
|
||||||
font-family: '맑은 고딕';
|
border-top-color: gray;
|
||||||
font-size: 13px;
|
border-left-color: gray;
|
||||||
}
|
border-right-color: black;
|
||||||
|
border-bottom-color: black;
|
||||||
button.with_skin:disabled {
|
padding: 0px;
|
||||||
background-color:#333333;
|
font-size: 14px;
|
||||||
}
|
word-break: break-all;
|
||||||
|
text-align: center;
|
||||||
input.with_skin {
|
}
|
||||||
background-color: black; color: white;
|
|
||||||
font-family: '맑은 고딕';
|
.obj_fill {
|
||||||
font-size: 13px;
|
display: block;
|
||||||
}
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
input.with_skin:disabled {
|
}
|
||||||
background-color: #333333;
|
|
||||||
}
|
button.with_skin {
|
||||||
|
padding: 0 4px;
|
||||||
.font0 { font-size: 10px; }
|
background-color: #191919;
|
||||||
.font1 { font-size: 13px; }
|
color: white;
|
||||||
.font2 { font-size: 15px; }
|
font-size: 14px;
|
||||||
.font3 { font-size: 20px; }
|
border-top-color: gray;
|
||||||
.font4 { font-size: 30px; }
|
border-left-color: gray;
|
||||||
.font5 { font-size: 50px; }
|
border-right-color: black;
|
||||||
|
border-bottom-color: black;
|
||||||
caption.section_title {
|
}
|
||||||
caption-side:top;
|
|
||||||
}
|
button.with_skin:disabled {
|
||||||
|
background-color: #333;
|
||||||
|
}
|
||||||
.samButton{
|
|
||||||
float:left;
|
input.with_skin {
|
||||||
display:block;
|
background-color: #191919;
|
||||||
padding:0;
|
color: white;
|
||||||
margin:0;
|
font-size: 14px;
|
||||||
text-decoration: none;
|
}
|
||||||
position:relative;
|
|
||||||
}
|
input.with_skin[type=button], input.with_skin[type=submit]{
|
||||||
|
border-top-color: gray;
|
||||||
a.samButton.disabled {
|
border-left-color: gray;
|
||||||
pointer-events: none;
|
border-right-color: black;
|
||||||
cursor: default;
|
border-bottom-color: black;
|
||||||
}
|
}
|
||||||
|
|
||||||
.samButtonOuter{
|
input.with_skin:disabled {
|
||||||
display: table;
|
background-color: #333;
|
||||||
border: outset 2px white;
|
}
|
||||||
box-sizing: border-box;
|
|
||||||
font-weight:bold;
|
.font0 {
|
||||||
padding: 1px 6px;
|
font-size: 10px;
|
||||||
width:125px;
|
}
|
||||||
height:30px;
|
|
||||||
background-color:#000000;
|
.font1 {
|
||||||
color:#ffffff;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.samButtonOuter:active{
|
.font2 {
|
||||||
border: inset 2px white;
|
font-size: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.font3 {
|
||||||
.samButtonInner{
|
font-size: 20px;
|
||||||
display: table-cell;
|
}
|
||||||
vertical-align: middle;
|
|
||||||
width: 100%;
|
.font4 {
|
||||||
margin: 0 auto;
|
font-size: 30px;
|
||||||
text-align: center;
|
}
|
||||||
user-select: none;
|
|
||||||
}
|
.font5 {
|
||||||
|
font-size: 50px;
|
||||||
.samToolbarButton > .samButtonOuter{
|
}
|
||||||
width:125px;
|
|
||||||
height:30px;
|
caption.section_title {
|
||||||
background-color:#225500;
|
caption-side: top;
|
||||||
color:white;
|
}
|
||||||
}
|
|
||||||
|
.samButton {
|
||||||
.samToolbarButton2 > .samButtonOuter{
|
float: left;
|
||||||
width:125px;
|
display: block;
|
||||||
height:30px;
|
padding: 0;
|
||||||
background-color:#225500;
|
margin: 0;
|
||||||
color:magenta;
|
text-decoration: none;
|
||||||
}
|
position: relative;
|
||||||
|
}
|
||||||
.samCommandButton > .samButtonOuter{
|
|
||||||
width:111px;
|
a.samButton.disabled {
|
||||||
height:30px;
|
pointer-events: none;
|
||||||
}
|
cursor: default;
|
||||||
|
}
|
||||||
.samCommandButton.disabled > .samButtonOuter{
|
|
||||||
background-color:transparent !important;
|
.samButtonOuter {
|
||||||
color:gray !important;
|
display: table;
|
||||||
border-color:transparent !important;
|
border: outset 2px white;
|
||||||
}
|
box-sizing: border-box;
|
||||||
|
font-weight: bold;
|
||||||
.samCommandButton.disabled > .samButtonOuter > .samButtonInner::before{
|
padding: 1px 6px;
|
||||||
content:'【'
|
width: 125px;
|
||||||
}
|
height: 30px;
|
||||||
|
background-color: #000000;
|
||||||
.samCommandButton.disabled > .samButtonOuter > .samButtonInner::after{
|
color: #ffffff;
|
||||||
content:'】'
|
}
|
||||||
|
|
||||||
|
.samButtonOuter:active {
|
||||||
|
border: inset 2px white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.samButtonInner {
|
||||||
|
display: table-cell;
|
||||||
|
vertical-align: middle;
|
||||||
|
width: 100%;
|
||||||
|
margin: 0 auto;
|
||||||
|
text-align: center;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.samToolbarButton>.samButtonOuter {
|
||||||
|
width: 125px;
|
||||||
|
height: 30px;
|
||||||
|
background-color: #225500;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.samToolbarButton2>.samButtonOuter {
|
||||||
|
width: 125px;
|
||||||
|
height: 30px;
|
||||||
|
background-color: #225500;
|
||||||
|
color: magenta;
|
||||||
|
}
|
||||||
|
|
||||||
|
.samCommandButton>.samButtonOuter {
|
||||||
|
width: 111px;
|
||||||
|
height: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.samCommandButton.disabled>.samButtonOuter {
|
||||||
|
background-color: transparent !important;
|
||||||
|
color: gray !important;
|
||||||
|
border-color: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.samCommandButton.disabled>.samButtonOuter>.samButtonInner::before {
|
||||||
|
content: '【'
|
||||||
|
}
|
||||||
|
|
||||||
|
.samCommandButton.disabled>.samButtonOuter>.samButtonInner::after {
|
||||||
|
content: '】'
|
||||||
|
}
|
||||||
|
|
||||||
|
.tooltip_copyable_info .tooltiptext {
|
||||||
|
display: inline;
|
||||||
|
color: rgba(0, 0, 0, 0);
|
||||||
|
font-size: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tooltiptext {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hidden_but_copyable {
|
||||||
|
color: rgba(0, 0, 0, 0);
|
||||||
|
font-size: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vertical_flex {
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-content: center;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: stretch;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vertical_flex .item {
|
||||||
|
display: block;
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fill_box {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
@@ -1,141 +1,161 @@
|
|||||||
@charset "utf-8";
|
@charset "utf-8";
|
||||||
|
body {
|
||||||
body{
|
line-height: 1.3;
|
||||||
line-height: 1.3;
|
}
|
||||||
}
|
|
||||||
|
#server_notice {
|
||||||
#server_notice {
|
margin: 10px 0;
|
||||||
margin:10px 0;
|
border: none;
|
||||||
border: none;
|
text-align: center;
|
||||||
text-align:center;
|
}
|
||||||
}
|
|
||||||
|
#server_list_container {
|
||||||
#server_list_container{
|
width: 800px;
|
||||||
width:800px;
|
position: absolute;
|
||||||
position:absolute;
|
left: 50%;
|
||||||
left:50%;
|
margin-left: -400px;
|
||||||
margin-left:-400px;
|
}
|
||||||
}
|
|
||||||
|
#server_list_table {
|
||||||
#server_list_table{
|
width: 100%;
|
||||||
width:100%;
|
}
|
||||||
}
|
|
||||||
|
#server_list tr {
|
||||||
#server_list tr{
|
height: 66px;
|
||||||
height:66px;
|
}
|
||||||
}
|
|
||||||
|
.ignore_border {
|
||||||
#server_list .server_create_and_select .general_create,
|
border: 0;
|
||||||
#server_list .server_create_and_select .general_select {
|
margin: 0;
|
||||||
width: 120px; height: 33px;
|
padding: 0;
|
||||||
float: left;
|
}
|
||||||
}
|
|
||||||
|
#user_info {
|
||||||
#server_list .general_create,
|
margin-top: 20px;
|
||||||
#server_list .general_login {
|
width: 800px;
|
||||||
width: 120px; height: 66px;
|
height: 130px;
|
||||||
float: left;
|
}
|
||||||
}
|
|
||||||
|
#user_info .btn {
|
||||||
.ignore_border{
|
width: 200px;
|
||||||
border:0;
|
margin: 10px 50px;
|
||||||
margin:0;
|
padding: 10px;
|
||||||
padding:0;
|
}
|
||||||
}
|
|
||||||
|
.center_ordered_items {
|
||||||
#user_info {
|
text-align: center;
|
||||||
margin-top:20px;
|
}
|
||||||
width: 800px; height: 130px;
|
|
||||||
}
|
.server-action{
|
||||||
|
padding-top: 16px;
|
||||||
|
padding-bottom: 16px;
|
||||||
#user_info button{
|
}
|
||||||
width: 200px;
|
|
||||||
height: 50px;
|
.Entrance_ServerList {
|
||||||
margin: 10px 50px;
|
width: 800px;
|
||||||
}
|
height: 64px;
|
||||||
|
border: none;
|
||||||
.center_ordered_items{
|
float: left;
|
||||||
text-align:center;
|
}
|
||||||
}
|
|
||||||
|
.Entrance_ServerListServer {
|
||||||
.Entrance_ServerList {
|
width: 98px;
|
||||||
width: 800px; height: 64px;
|
height: 64px;
|
||||||
border: none;
|
float: left;
|
||||||
float: left;
|
}
|
||||||
}
|
|
||||||
|
.Entrance_ServerListDown {
|
||||||
.Entrance_ServerListServer {
|
width: 698px;
|
||||||
width: 98px; height: 64px;
|
height: 64px;
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Entrance_ServerListDown {
|
.Entrance_ServerListInfo {
|
||||||
width: 698px; height: 64px;
|
width: 398px;
|
||||||
float: left;
|
height: 64px;
|
||||||
}
|
float: left;
|
||||||
|
}
|
||||||
.Entrance_ServerListInfo {
|
|
||||||
width: 398px; height: 64px;
|
.Entrance_ServerListBlock {
|
||||||
float: left;
|
width: 298px;
|
||||||
}
|
height: 64px;
|
||||||
|
float: left;
|
||||||
.Entrance_ServerListBlock {
|
line-height: 64px;
|
||||||
width: 298px; height: 64px;
|
}
|
||||||
float: left;
|
|
||||||
line-height: 64px;
|
.Entrance_ServerListCharacter {
|
||||||
}
|
width: 64px;
|
||||||
|
height: 64px;
|
||||||
.Entrance_ServerListCharacter {
|
float: left;
|
||||||
width: 64px; height: 64px;
|
}
|
||||||
float: left;
|
|
||||||
}
|
.Entrance_ServerListName {
|
||||||
|
width: 112px;
|
||||||
.Entrance_ServerListName {
|
height: 64px;
|
||||||
width: 112px; height: 64px;
|
float: left;
|
||||||
float: left;
|
line-height: 64px;
|
||||||
line-height: 64px;
|
}
|
||||||
}
|
|
||||||
|
.Entrance_ServerListSelect {
|
||||||
|
width: 120px;
|
||||||
.Entrance_ServerListSelect {
|
height: 32px;
|
||||||
width: 120px; height: 32px;
|
float: left;
|
||||||
float: left;
|
}
|
||||||
}
|
|
||||||
|
#Entrance_000003 {
|
||||||
#Entrance_000003 {
|
width: 798px;
|
||||||
width: 798px; height: 155px;
|
height: 155px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Entrance_Alert {
|
.Entrance_Alert {
|
||||||
color: red; font-size: 15px; font-weight: bold;
|
color: red;
|
||||||
}
|
font-size: 15px;
|
||||||
|
font-weight: bold;
|
||||||
.Entrance_Che {
|
}
|
||||||
color: white; font-size: 15px; font-weight: bold;
|
|
||||||
}
|
.Entrance_Che {
|
||||||
|
color: white;
|
||||||
.Entrance_Kwe {
|
font-size: 15px;
|
||||||
color: yellow; font-size: 15px; font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Entrance_Pwe {
|
.Entrance_Kwe {
|
||||||
color: orange; font-size: 15px; font-weight: bold;
|
color: yellow;
|
||||||
}
|
font-size: 15px;
|
||||||
|
font-weight: bold;
|
||||||
.Entrance_Twe {
|
}
|
||||||
color: magenta; font-size: 15px; font-weight: bold;
|
|
||||||
}
|
.Entrance_Pwe {
|
||||||
|
color: orange;
|
||||||
.Entrance_Nya {
|
font-size: 15px;
|
||||||
color: #e67e22; font-size: 15px; font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Entrance_Pya {
|
.Entrance_Twe {
|
||||||
color: #9b59b6; font-size: 15px; font-weight: bold;
|
color: magenta;
|
||||||
}
|
font-size: 15px;
|
||||||
|
font-weight: bold;
|
||||||
.Entrance_Hwe {
|
}
|
||||||
color: red; font-size: 15px; font-weight: bold;
|
|
||||||
|
.Entrance_Nya {
|
||||||
|
color: #e67e22;
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Entrance_Pya {
|
||||||
|
color: #9b59b6;
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Entrance_Hwe {
|
||||||
|
color: red;
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.BtnPlate {
|
||||||
|
height: inherit;
|
||||||
}
|
}
|
||||||
@@ -7,10 +7,10 @@ body, html{
|
|||||||
margin-top: 70px;
|
margin-top: 70px;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1.title {
|
h1.title {
|
||||||
font-size: 50px;
|
font-size: 50px;
|
||||||
font-family: 'Passion One', cursive;
|
font-family: 'Pretendard', 'Apple SD Gothic Neo', 'Noto Sans KR', 'Malgun Gothic';
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
hr{
|
hr{
|
||||||
|
|||||||
@@ -7,10 +7,10 @@
|
|||||||
margin-top: 70px;
|
margin-top: 70px;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1.title {
|
h1.title {
|
||||||
font-size: 50px;
|
font-size: 50px;
|
||||||
font-family: 'Passion One', cursive;
|
font-family: 'Pretendard', 'Apple SD Gothic Neo', 'Noto Sans KR', 'Malgun Gothic';
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
hr{
|
hr{
|
||||||
|
|||||||
@@ -1,131 +0,0 @@
|
|||||||
body, html{
|
|
||||||
height: 100%;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
.main{
|
|
||||||
margin-top: 70px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
font-size: 50px;
|
|
||||||
font-family: 'Passion One', cursive;
|
|
||||||
font-weight: 400;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr{
|
|
||||||
width: 10%;
|
|
||||||
/*color: #fff;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
.form-group{
|
|
||||||
margin-bottom: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
label{
|
|
||||||
margin-bottom: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
input,
|
|
||||||
input::-webkit-input-placeholder {
|
|
||||||
font-size: 11px;
|
|
||||||
padding-top: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.main-login{
|
|
||||||
/*background-color: #fff;*/
|
|
||||||
/* shadows and rounded borders */
|
|
||||||
-moz-border-radius: 2px;
|
|
||||||
-webkit-border-radius: 2px;
|
|
||||||
border-radius: 2px;
|
|
||||||
-moz-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);
|
|
||||||
-webkit-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);
|
|
||||||
box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.main-center{
|
|
||||||
margin-top: 30px;
|
|
||||||
margin: 0 auto;
|
|
||||||
max-width: 330px;
|
|
||||||
padding: 40px 40px;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.login_btn_group{
|
|
||||||
margin-top: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.login-register{
|
|
||||||
font-size: 11px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.col-form-label{
|
|
||||||
text-align:center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.terms{
|
|
||||||
max-height: 200px; overflow-y: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.terms pre{
|
|
||||||
width:100%;
|
|
||||||
white-space: pre-wrap; /* Since CSS 2.1 */
|
|
||||||
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
|
|
||||||
white-space: -pre-wrap; /* Opera 4-6 */
|
|
||||||
white-space: -o-pre-wrap; /* Opera 7 */
|
|
||||||
word-wrap: break-word; /* Internet Explorer 5.5+ */
|
|
||||||
}
|
|
||||||
|
|
||||||
.vertical-center {
|
|
||||||
min-height: 100%; /* Fallback for browsers do NOT support vh unit */
|
|
||||||
min-height: 100vh; /* These two lines are counted as one :-) */
|
|
||||||
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.full-content {
|
|
||||||
position:fixed;
|
|
||||||
left:0;
|
|
||||||
top:0;
|
|
||||||
width:100%;
|
|
||||||
height:100%;
|
|
||||||
margin:0;
|
|
||||||
padding:0;
|
|
||||||
z-index:800;
|
|
||||||
}
|
|
||||||
|
|
||||||
#login_card{
|
|
||||||
z-index:801;
|
|
||||||
}
|
|
||||||
|
|
||||||
#btn_kakao_login{
|
|
||||||
cursor: pointer;
|
|
||||||
height:46px;
|
|
||||||
width:116px;
|
|
||||||
background-color: transparent;
|
|
||||||
color:transparent;
|
|
||||||
border:0;
|
|
||||||
background-size: 100%; /* To fill the dimensions of container (button), or */
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-position: bottom center;
|
|
||||||
margin-top:5px;
|
|
||||||
background-image:url('../oauth_kakao/kakao_login_join.png');
|
|
||||||
}
|
|
||||||
|
|
||||||
#btn_kakao_login:hover {
|
|
||||||
background-image:url('../oauth_kakao/kakao_login_join_ov.png');
|
|
||||||
}
|
|
||||||
|
|
||||||
#bottom_box{
|
|
||||||
position:fixed;
|
|
||||||
bottom:0;
|
|
||||||
width:100%;
|
|
||||||
left:0;
|
|
||||||
}
|
|
||||||
#bottom_box .container{
|
|
||||||
text-align:center;
|
|
||||||
}
|
|
||||||
@@ -1,132 +0,0 @@
|
|||||||
//download.js v3.0, by dandavis; 2008-2014. [CCBY2] see http://danml.com/download.html for tests/usage
|
|
||||||
// v1 landed a FF+Chrome compat way of downloading strings to local un-named files, upgraded to use a hidden frame and optional mime
|
|
||||||
// v2 added named files via a[download], msSaveBlob, IE (10+) support, and window.URL support for larger+faster saves than dataURLs
|
|
||||||
// v3 added dataURL and Blob Input, bind-toggle arity, and legacy dataURL fallback was improved with force-download mime and base64 support
|
|
||||||
|
|
||||||
// data can be a string, Blob, File, or dataURL
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function download(data, strFileName, strMimeType) {
|
|
||||||
|
|
||||||
var self = window, // this script is only for browsers anyway...
|
|
||||||
u = "application/octet-stream", // this default mime also triggers iframe downloads
|
|
||||||
m = strMimeType || u,
|
|
||||||
x = data,
|
|
||||||
D = document,
|
|
||||||
a = D.createElement("a"),
|
|
||||||
z = function(a){return String(a);},
|
|
||||||
|
|
||||||
|
|
||||||
B = self.Blob || self.MozBlob || self.WebKitBlob || z,
|
|
||||||
BB = self.MSBlobBuilder || self.WebKitBlobBuilder || self.BlobBuilder,
|
|
||||||
fn = strFileName || "download",
|
|
||||||
blob,
|
|
||||||
b,
|
|
||||||
ua,
|
|
||||||
fr;
|
|
||||||
|
|
||||||
//if(typeof B.bind === 'function' ){ B=B.bind(self); }
|
|
||||||
|
|
||||||
if(String(this)==="true"){ //reverse arguments, allowing download.bind(true, "text/xml", "export.xml") to act as a callback
|
|
||||||
x=[x, m];
|
|
||||||
m=x[0];
|
|
||||||
x=x[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//go ahead and download dataURLs right away
|
|
||||||
if(String(x).match(/^data\:[\w+\-]+\/[\w+\-]+[,;]/)){
|
|
||||||
return navigator.msSaveBlob ? // IE10 can't do a[download], only Blobs:
|
|
||||||
navigator.msSaveBlob(d2b(x), fn) :
|
|
||||||
saver(x) ; // everyone else can save dataURLs un-processed
|
|
||||||
}//end if dataURL passed?
|
|
||||||
|
|
||||||
try{
|
|
||||||
|
|
||||||
blob = x instanceof B ?
|
|
||||||
x :
|
|
||||||
new B([x], {type: m}) ;
|
|
||||||
}catch(y){
|
|
||||||
if(BB){
|
|
||||||
b = new BB();
|
|
||||||
b.append([x]);
|
|
||||||
blob = b.getBlob(m); // the blob
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function d2b(u) {
|
|
||||||
var p= u.split(/[:;,]/),
|
|
||||||
t= p[1],
|
|
||||||
dec= p[2] == "base64" ? atob : decodeURIComponent,
|
|
||||||
bin= dec(p.pop()),
|
|
||||||
mx= bin.length,
|
|
||||||
i= 0,
|
|
||||||
uia= new Uint8Array(mx);
|
|
||||||
|
|
||||||
for(i;i<mx;++i) uia[i]= bin.charCodeAt(i);
|
|
||||||
|
|
||||||
return new B([uia], {type: t});
|
|
||||||
}
|
|
||||||
|
|
||||||
function saver(url, winMode){
|
|
||||||
|
|
||||||
|
|
||||||
if ('download' in a) { //html5 A[download]
|
|
||||||
a.href = url;
|
|
||||||
a.setAttribute("download", fn);
|
|
||||||
a.innerHTML = "downloading...";
|
|
||||||
D.body.appendChild(a);
|
|
||||||
setTimeout(function() {
|
|
||||||
a.click();
|
|
||||||
D.body.removeChild(a);
|
|
||||||
if(winMode===true){setTimeout(function(){ self.URL.revokeObjectURL(a.href);}, 250 );}
|
|
||||||
}, 66);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//do iframe dataURL download (old ch+FF):
|
|
||||||
var f = D.createElement("iframe");
|
|
||||||
D.body.appendChild(f);
|
|
||||||
if(!winMode){ // force a mime that will download:
|
|
||||||
url="data:"+url.replace(/^data:([\w\/\-\+]+)/, u);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
f.src = url;
|
|
||||||
setTimeout(function(){ D.body.removeChild(f); }, 333);
|
|
||||||
|
|
||||||
}//end saver
|
|
||||||
|
|
||||||
|
|
||||||
if (navigator.msSaveBlob) { // IE10+ : (has Blob, but not a[download] or URL)
|
|
||||||
return navigator.msSaveBlob(blob, fn);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(self.URL){ // simple fast and modern way using Blob and URL:
|
|
||||||
saver(self.URL.createObjectURL(blob), true);
|
|
||||||
}else{
|
|
||||||
// handle non-Blob()+non-URL browsers:
|
|
||||||
if(typeof blob === "string" || blob.constructor===z ){
|
|
||||||
try{
|
|
||||||
return saver( "data:" + m + ";base64," + self.btoa(blob) );
|
|
||||||
}catch(y){
|
|
||||||
return saver( "data:" + m + "," + encodeURIComponent(blob) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Blob but not URL:
|
|
||||||
fr=new FileReader();
|
|
||||||
fr.onload=function(e){
|
|
||||||
saver(this.result);
|
|
||||||
};
|
|
||||||
fr.readAsDataURL(blob);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
} /* end download() */
|
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 341 B |
|
Before Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 386 B |
|
Before Width: | Height: | Size: 346 B |
|
Before Width: | Height: | Size: 396 B |
|
Before Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 6.2 KiB |
@@ -1,152 +0,0 @@
|
|||||||
/*
|
|
||||||
jQuery Redirect v1.1.1
|
|
||||||
|
|
||||||
Copyright (c) 2013-2017 Miguel Galante
|
|
||||||
Copyright (c) 2011-2013 Nemanja Avramovic, www.avramovic.info
|
|
||||||
|
|
||||||
Licensed under CC BY-SA 4.0 License: http://creativecommons.org/licenses/by-sa/4.0/
|
|
||||||
|
|
||||||
This means everyone is allowed to:
|
|
||||||
|
|
||||||
Share - copy and redistribute the material in any medium or format
|
|
||||||
Adapt - remix, transform, and build upon the material for any purpose, even commercially.
|
|
||||||
Under following conditions:
|
|
||||||
|
|
||||||
Attribution - You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
|
|
||||||
ShareAlike - If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
|
|
||||||
|
|
||||||
*/
|
|
||||||
(function ($) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* jQuery Redirect
|
|
||||||
* @param {string} url - Url of the redirection
|
|
||||||
* @param {Object} values - (optional) An object with the data to send. If not present will look for values as QueryString in the target url.
|
|
||||||
* @param {string} method - (optional) The HTTP verb can be GET or POST (defaults to POST)
|
|
||||||
* @param {string} target - (optional) The target of the form. "_blank" will open the url in a new window.
|
|
||||||
* @param {boolean} traditional - (optional) This provides the same function as jquery's ajax function. The brackets are omitted on the field name if its an array. This allows arrays to work with MVC.net among others.
|
|
||||||
* @param {boolean} redirectTop - (optional) If its called from a iframe, force to navigate the top window.
|
|
||||||
*/
|
|
||||||
$.redirect = function (url, values, method, target, traditional, redirectTop) {
|
|
||||||
redirectTop = redirectTop || false;
|
|
||||||
var generatedForm = $.redirect.getForm(url, values, method, target, traditional);
|
|
||||||
$('body', redirectTop ? window.top.document : undefined).append(generatedForm.form);
|
|
||||||
generatedForm.submit();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
$.redirect.getForm = function (url, values, method, target, traditional) {
|
|
||||||
method = (method && ["GET", "POST", "PUT", "DELETE"].indexOf(method.toUpperCase()) !== -1) ? method.toUpperCase() : 'POST';
|
|
||||||
|
|
||||||
url = url.split("#");
|
|
||||||
var hash = url[1] ? ("#" + url[1]) : "";
|
|
||||||
url = url[0];
|
|
||||||
|
|
||||||
if (!values) {
|
|
||||||
var obj = $.parseUrl(url);
|
|
||||||
url = obj.url;
|
|
||||||
values = obj.params;
|
|
||||||
}
|
|
||||||
|
|
||||||
values = removeNulls(values);
|
|
||||||
|
|
||||||
var form = $('<form>')
|
|
||||||
.attr("method", method)
|
|
||||||
.attr("action", url + hash);
|
|
||||||
|
|
||||||
|
|
||||||
if (target) {
|
|
||||||
form.attr("target", target);
|
|
||||||
}
|
|
||||||
|
|
||||||
var submit = form[0].submit;
|
|
||||||
iterateValues(values, [], form, null, traditional);
|
|
||||||
|
|
||||||
return { form: form, submit: function () { submit.call(form[0]); } };
|
|
||||||
}
|
|
||||||
//Utility Functions
|
|
||||||
/**
|
|
||||||
* Url and QueryString Parser.
|
|
||||||
* @param {string} url - a Url to parse.
|
|
||||||
* @returns {object} an object with the parsed url with the following structure {url: URL, params:{ KEY: VALUE }}
|
|
||||||
*/
|
|
||||||
$.parseUrl = function (url) {
|
|
||||||
|
|
||||||
if (url.indexOf('?') === -1) {
|
|
||||||
return {
|
|
||||||
url: url,
|
|
||||||
params: {}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
var parts = url.split('?'),
|
|
||||||
query_string = parts[1],
|
|
||||||
elems = query_string.split('&');
|
|
||||||
url = parts[0];
|
|
||||||
|
|
||||||
var i, pair, obj = {};
|
|
||||||
for (i = 0; i < elems.length; i += 1) {
|
|
||||||
pair = elems[i].split('=');
|
|
||||||
obj[pair[0]] = pair[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
url: url,
|
|
||||||
params: obj
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
//Private Functions
|
|
||||||
var getInput = function (name, value, parent, array, traditional) {
|
|
||||||
var parentString;
|
|
||||||
if (parent.length > 0) {
|
|
||||||
parentString = parent[0];
|
|
||||||
var i;
|
|
||||||
for (i = 1; i < parent.length; i += 1) {
|
|
||||||
parentString += "[" + parent[i] + "]";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array) {
|
|
||||||
if (traditional)
|
|
||||||
name = parentString;
|
|
||||||
else
|
|
||||||
name = parentString + "[" + name + "]";
|
|
||||||
} else {
|
|
||||||
name = parentString + "[" + name + "]";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $("<input>").attr("type", "hidden")
|
|
||||||
.attr("name", name)
|
|
||||||
.attr("value", value);
|
|
||||||
};
|
|
||||||
|
|
||||||
var iterateValues = function (values, parent, form, isArray, traditional) {
|
|
||||||
var i, iterateParent = [];
|
|
||||||
Object.keys(values).forEach(function (i) {
|
|
||||||
if (typeof values[i] === "object") {
|
|
||||||
iterateParent = parent.slice();
|
|
||||||
iterateParent.push(i);
|
|
||||||
iterateValues(values[i], iterateParent, form, Array.isArray(values[i]), traditional);
|
|
||||||
} else {
|
|
||||||
form.append(getInput(i, values[i], parent, isArray, traditional));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
var removeNulls = function (values) {
|
|
||||||
var propNames = Object.getOwnPropertyNames(values);
|
|
||||||
for (var i = 0; i < propNames.length; i++) {
|
|
||||||
var propName = propNames[i];
|
|
||||||
if (values[propName] === null || values[propName] === undefined) {
|
|
||||||
delete values[propName];
|
|
||||||
} else if (typeof values[propName] === 'object') {
|
|
||||||
values[propName] = removeNulls(values[propName]);
|
|
||||||
} else if (values[propName].length < 1) {
|
|
||||||
delete values[propName];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return values;
|
|
||||||
};
|
|
||||||
|
|
||||||
}(window.jQuery || window.Zepto || window.jqlite));
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
TODO : adobdb5, phpmailer5(?), plates, utilphp
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||||
|
|
||||||
|
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(n){return"너무 깁니다. "+(n.input.length-n.maximum)+" 글자 지워주세요."},inputTooShort:function(n){return"너무 짧습니다. "+(n.minimum-n.input.length)+" 글자 더 입력해주세요."},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(n){return"최대 "+n.maximum+"개까지만 선택 가능합니다."},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"},removeAllItems:function(){return"모든 항목 삭제"}}}),n.define,n.require}();
|
||||||
@@ -0,0 +1,553 @@
|
|||||||
|
/* select2-bootstrap4 with Darkly */
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 {
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection {
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid #ced4da;
|
||||||
|
border-radius: 0.25rem;
|
||||||
|
color: #495057;
|
||||||
|
font-size: 1rem;
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection.form-control {
|
||||||
|
border-radius: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-search--dropdown .select2-search__field {
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid #ced4da;
|
||||||
|
border-radius: 0.25rem;
|
||||||
|
color: #495057;
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-search__field {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-search__field::-webkit-input-placeholder {
|
||||||
|
color: #6c757d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-search__field:-moz-placeholder {
|
||||||
|
color: #6c757d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-search__field::-moz-placeholder {
|
||||||
|
color: #6c757d;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-search__field:-ms-input-placeholder {
|
||||||
|
color: #6c757d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-results__option {
|
||||||
|
padding: 0.75rem 0.375rem;
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-results__option[role=group] {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-results__option[aria-disabled=true] {
|
||||||
|
color: #6c757d;
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-results__option[aria-selected=true] {
|
||||||
|
background-color: #f8f9fa;
|
||||||
|
color: #16181b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-results__option--highlighted[aria-selected] {
|
||||||
|
background-color: #007bff;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-results__option .select2-results__option {
|
||||||
|
padding: 0.75rem 0.375rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-results__option .select2-results__option .select2-results__group {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-results__option .select2-results__option .select2-results__option {
|
||||||
|
margin-left: -0.375rem;
|
||||||
|
padding-left: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||||
|
margin-left: -0.75rem;
|
||||||
|
padding-left: 1.125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||||
|
margin-left: -1.125rem;
|
||||||
|
padding-left: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||||
|
margin-left: -1.5rem;
|
||||||
|
padding-left: 1.875rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||||
|
margin-left: -1.875rem;
|
||||||
|
padding-left: 2.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-results__group {
|
||||||
|
color: #6c757d;
|
||||||
|
display: block;
|
||||||
|
padding: 0.75rem 0.375rem;
|
||||||
|
font-size: 75%;
|
||||||
|
line-height: 1;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4.select2-container--focus .select2-selection,
|
||||||
|
.select2-container--bootstrap4.select2-container--open .select2-selection {
|
||||||
|
transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
|
||||||
|
border-color: #80bdff;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (prefers-reduced-motion: reduce) {
|
||||||
|
.select2-container--bootstrap4.select2-container--focus .select2-selection,
|
||||||
|
.select2-container--bootstrap4.select2-container--open .select2-selection {
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4.select2-container--open .select2-selection .select2-selection__arrow b {
|
||||||
|
border-color: transparent transparent #6c757d transparent;
|
||||||
|
border-width: 0 0.25rem 0.25rem 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4.select2-container--open.select2-container--below .select2-selection {
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
border-bottom-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4.select2-container--open.select2-container--above .select2-selection {
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-top-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection__clear {
|
||||||
|
color: #6c757d;
|
||||||
|
cursor: pointer;
|
||||||
|
float: right;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection__clear:hover {
|
||||||
|
color: #343a40;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4.select2-container--disabled .select2-selection {
|
||||||
|
border-color: #ced4da;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4.select2-container--disabled .select2-selection,
|
||||||
|
.select2-container--bootstrap4.select2-container--disabled .select2-search__field {
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4.select2-container--disabled .select2-selection,
|
||||||
|
.select2-container--bootstrap4.select2-container--disabled .select2-selection--multiple .select2-selection__choice {
|
||||||
|
background-color: #e9ecef;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4.select2-container--disabled .select2-selection__clear,
|
||||||
|
.select2-container--bootstrap4.select2-container--disabled .select2-selection--multiple .select2-selection__choice__remove {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-dropdown {
|
||||||
|
border-color: #80bdff;
|
||||||
|
border-width: 1px;
|
||||||
|
overflow-x: hidden;
|
||||||
|
margin-top: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-dropdown--above {
|
||||||
|
margin-top: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-results>.select2-results__options {
|
||||||
|
max-height: 200px;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--single {
|
||||||
|
height: calc(2.25rem + 2px);
|
||||||
|
line-height: 1;
|
||||||
|
padding: 0.75rem 1.125rem 0.75rem 0.375rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0.375rem;
|
||||||
|
top: 0;
|
||||||
|
width: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b {
|
||||||
|
border-color: #6c757d transparent transparent transparent;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 0.25rem 0.25rem 0 0.25rem;
|
||||||
|
height: 0;
|
||||||
|
left: 0;
|
||||||
|
margin-left: -0.25rem;
|
||||||
|
margin-top: -0.125rem;
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--single .select2-selection__rendered {
|
||||||
|
color: #495057;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--single .select2-selection__placeholder {
|
||||||
|
color: #6c757d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--multiple {
|
||||||
|
min-height: calc(2.25rem + 2px);
|
||||||
|
padding: 0;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__rendered {
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: block;
|
||||||
|
line-height: 1;
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0.75rem 0.375rem 0 0.75rem;
|
||||||
|
width: 100%;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__placeholder {
|
||||||
|
color: #6c757d;
|
||||||
|
float: left;
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice {
|
||||||
|
color: #495057;
|
||||||
|
background: transparent;
|
||||||
|
border: 1px solid #343a40;
|
||||||
|
border-radius: 0.25rem;
|
||||||
|
cursor: default;
|
||||||
|
float: left;
|
||||||
|
margin: -0.25rem 0 0 0.1875rem;
|
||||||
|
padding: 0 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--multiple .select2-search--inline .select2-search__field {
|
||||||
|
background: transparent;
|
||||||
|
padding: 0 0.375rem;
|
||||||
|
height: calc(2.25rem + 2px)-2;
|
||||||
|
line-height: 1;
|
||||||
|
margin-top: 0;
|
||||||
|
min-width: 5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice__remove {
|
||||||
|
color: #6c757d;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-right: 0.375rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice__remove:hover {
|
||||||
|
color: #343a40;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__clear {
|
||||||
|
margin-top: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--single.input-sm,
|
||||||
|
.input-group-sm .select2-container--bootstrap4 .select2-selection--single,
|
||||||
|
.form-group-sm .select2-container--bootstrap4 .select2-selection--single {
|
||||||
|
border-radius: 0.2rem;
|
||||||
|
font-size: 75%;
|
||||||
|
height: calc(1.8125rem + 2px);
|
||||||
|
line-height: 1;
|
||||||
|
padding: 0.5rem 1rem 0.5rem 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--single.input-sm .select2-selection__arrow b,
|
||||||
|
.input-group-sm .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b,
|
||||||
|
.form-group-sm .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b {
|
||||||
|
margin-left: -0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--multiple.input-sm,
|
||||||
|
.input-group-sm .select2-container--bootstrap4 .select2-selection--multiple,
|
||||||
|
.form-group-sm .select2-container--bootstrap4 .select2-selection--multiple {
|
||||||
|
min-height: calc(1.8125rem + 2px);
|
||||||
|
border-radius: 0.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--multiple.input-sm .select2-selection__rendered,
|
||||||
|
.input-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__rendered,
|
||||||
|
.form-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__rendered {
|
||||||
|
padding: 0.5rem 0.25rem 0 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--multiple.input-sm .select2-selection__choice,
|
||||||
|
.input-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice,
|
||||||
|
.form-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice {
|
||||||
|
font-size: 75%;
|
||||||
|
line-height: 1;
|
||||||
|
margin: 0 0 0 0.125rem;
|
||||||
|
padding: 0 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--multiple.input-sm .select2-search--inline .select2-search__field,
|
||||||
|
.input-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-search--inline .select2-search__field,
|
||||||
|
.form-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-search--inline .select2-search__field {
|
||||||
|
padding: 0 0.25rem;
|
||||||
|
font-size: 75%;
|
||||||
|
height: calc(1.8125rem + 2px)-2;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--multiple.input-sm .select2-selection__clear,
|
||||||
|
.input-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__clear,
|
||||||
|
.form-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__clear {
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--single.input-lg,
|
||||||
|
.input-group-lg .select2-container--bootstrap4 .select2-selection--single,
|
||||||
|
.form-group-lg .select2-container--bootstrap4 .select2-selection--single {
|
||||||
|
border-radius: 0.3rem;
|
||||||
|
font-size: 1.25rem;
|
||||||
|
height: calc(2.875rem + 2px);
|
||||||
|
line-height: 1;
|
||||||
|
padding: 1rem 1.4375rem 1rem 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--single.input-lg .select2-selection__arrow,
|
||||||
|
.input-group-lg .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow,
|
||||||
|
.form-group-lg .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow {
|
||||||
|
width: 0.3125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--single.input-lg .select2-selection__arrow b,
|
||||||
|
.input-group-lg .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b,
|
||||||
|
.form-group-lg .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b {
|
||||||
|
border-width: 0.3125rem 0.3125rem 0 0.3125rem;
|
||||||
|
margin-left: -0.3125rem;
|
||||||
|
margin-left: -1rem;
|
||||||
|
margin-top: -0.15625rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--multiple.input-lg,
|
||||||
|
.input-group-lg .select2-container--bootstrap4 .select2-selection--multiple,
|
||||||
|
.form-group-lg .select2-container--bootstrap4 .select2-selection--multiple {
|
||||||
|
min-height: calc(2.875rem + 2px);
|
||||||
|
border-radius: 0.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--multiple.input-lg .select2-selection__choice,
|
||||||
|
.input-group-lg .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice,
|
||||||
|
.form-group-lg .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice {
|
||||||
|
font-size: 1.25rem;
|
||||||
|
line-height: 1;
|
||||||
|
border-radius: 0.25rem;
|
||||||
|
margin: 0rem 0 0 0.25rem;
|
||||||
|
padding: 0 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--multiple.input-lg .select2-search--inline .select2-search__field,
|
||||||
|
.input-group-lg .select2-container--bootstrap4 .select2-selection--multiple .select2-search--inline .select2-search__field,
|
||||||
|
.form-group-lg .select2-container--bootstrap4 .select2-selection--multiple .select2-search--inline .select2-search__field {
|
||||||
|
padding: 0 0.5rem;
|
||||||
|
font-size: 1.25rem;
|
||||||
|
height: calc(2.875rem + 2px)-2;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection--multiple.input-lg .select2-selection__clear,
|
||||||
|
.input-group-lg .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__clear,
|
||||||
|
.form-group-lg .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__clear {
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4 .select2-selection.input-lg.select2-container--open .select2-selection--single .select2-selection__arrow b {
|
||||||
|
border-color: transparent transparent #6c757d transparent;
|
||||||
|
border-width: 0 0.3125rem 0.3125rem 0.3125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group-lg .select2-container--bootstrap4 .select2-selection.select2-container--open .select2-selection--single .select2-selection__arrow b {
|
||||||
|
border-color: transparent transparent #6c757d transparent;
|
||||||
|
border-width: 0 0.3125rem 0.3125rem 0.3125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4[dir="rtl"] .select2-selection--single {
|
||||||
|
padding-left: 1.125rem;
|
||||||
|
padding-right: 0.375rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4[dir="rtl"] .select2-selection--single .select2-selection__rendered {
|
||||||
|
padding-right: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4[dir="rtl"] .select2-selection--single .select2-selection__clear {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4[dir="rtl"] .select2-selection--single .select2-selection__arrow {
|
||||||
|
left: 0.375rem;
|
||||||
|
right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4[dir="rtl"] .select2-selection--single .select2-selection__arrow b {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4[dir="rtl"] .select2-selection--multiple .select2-selection__choice,
|
||||||
|
.select2-container--bootstrap4[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,
|
||||||
|
.select2-container--bootstrap4[dir="rtl"] .select2-selection--multiple .select2-search--inline {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0.1875rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--bootstrap4[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
|
||||||
|
margin-left: 2px;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.has-warning .select2-dropdown,
|
||||||
|
.has-warning .select2-selection {
|
||||||
|
border-color: #ffc107;
|
||||||
|
}
|
||||||
|
|
||||||
|
.has-warning .select2-container--focus .select2-selection,
|
||||||
|
.has-warning .select2-container--open .select2-selection {
|
||||||
|
border-color: #d39e00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.has-warning.select2-drop-active {
|
||||||
|
border-color: #d39e00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.has-warning.select2-drop-active.select2-drop.select2-drop-above {
|
||||||
|
border-top-color: #d39e00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.has-error .select2-dropdown,
|
||||||
|
.has-error .select2-selection {
|
||||||
|
border-color: #dc3545;
|
||||||
|
}
|
||||||
|
|
||||||
|
.has-error .select2-container--focus .select2-selection,
|
||||||
|
.has-error .select2-container--open .select2-selection {
|
||||||
|
border-color: #bd2130;
|
||||||
|
}
|
||||||
|
|
||||||
|
.has-error.select2-drop-active {
|
||||||
|
border-color: #bd2130;
|
||||||
|
}
|
||||||
|
|
||||||
|
.has-error.select2-drop-active.select2-drop.select2-drop-above {
|
||||||
|
border-top-color: #bd2130;
|
||||||
|
}
|
||||||
|
|
||||||
|
.has-success .select2-dropdown,
|
||||||
|
.has-success .select2-selection {
|
||||||
|
border-color: #28a745;
|
||||||
|
}
|
||||||
|
|
||||||
|
.has-success .select2-container--focus .select2-selection,
|
||||||
|
.has-success .select2-container--open .select2-selection {
|
||||||
|
border-color: #1e7e34;
|
||||||
|
}
|
||||||
|
|
||||||
|
.has-success.select2-drop-active {
|
||||||
|
border-color: #1e7e34;
|
||||||
|
}
|
||||||
|
|
||||||
|
.has-success.select2-drop-active.select2-drop.select2-drop-above {
|
||||||
|
border-top-color: #1e7e34;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group>.select2-hidden-accessible:first-child+.select2-container--bootstrap4>.selection>.select2-selection,
|
||||||
|
.input-group>.select2-hidden-accessible:first-child+.select2-container--bootstrap4>.selection>.select2-selection.form-control {
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group>.select2-hidden-accessible:not(:first-child)+.select2-container--bootstrap4:not(:last-child)>.selection>.select2-selection,
|
||||||
|
.input-group>.select2-hidden-accessible:not(:first-child)+.select2-container--bootstrap4:not(:last-child)>.selection>.select2-selection.form-control {
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group>.select2-hidden-accessible:not(:first-child):not(:last-child)+.select2-container--bootstrap4:last-child>.selection>.select2-selection,
|
||||||
|
.input-group>.select2-hidden-accessible:not(:first-child):not(:last-child)+.select2-container--bootstrap4:last-child>.selection>.select2-selection.form-control {
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group>.select2-container--bootstrap4 {
|
||||||
|
display: table;
|
||||||
|
table-layout: fixed;
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
width: 100%;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group>.select2-container--bootstrap4>.selection>.select2-selection.form-control {
|
||||||
|
float: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group>.select2-container--bootstrap4.select2-container--open,
|
||||||
|
.input-group>.select2-container--bootstrap4.select2-container--focus {
|
||||||
|
z-index: 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group>.select2-container--bootstrap4,
|
||||||
|
.input-group>.select2-container--bootstrap4 .input-group-btn,
|
||||||
|
.input-group>.select2-container--bootstrap4 .input-group-btn .btn {
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-control.select2-hidden-accessible {
|
||||||
|
position: absolute !important;
|
||||||
|
width: 1px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 576px) {
|
||||||
|
.form-inline .select2-container--bootstrap4 {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,481 @@
|
|||||||
|
.select2-container {
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: inline-block;
|
||||||
|
margin: 0;
|
||||||
|
position: relative;
|
||||||
|
vertical-align: middle; }
|
||||||
|
.select2-container .select2-selection--single {
|
||||||
|
box-sizing: border-box;
|
||||||
|
cursor: pointer;
|
||||||
|
display: block;
|
||||||
|
height: 28px;
|
||||||
|
user-select: none;
|
||||||
|
-webkit-user-select: none; }
|
||||||
|
.select2-container .select2-selection--single .select2-selection__rendered {
|
||||||
|
display: block;
|
||||||
|
padding-left: 8px;
|
||||||
|
padding-right: 20px;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap; }
|
||||||
|
.select2-container .select2-selection--single .select2-selection__clear {
|
||||||
|
position: relative; }
|
||||||
|
.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered {
|
||||||
|
padding-right: 8px;
|
||||||
|
padding-left: 20px; }
|
||||||
|
.select2-container .select2-selection--multiple {
|
||||||
|
box-sizing: border-box;
|
||||||
|
cursor: pointer;
|
||||||
|
display: block;
|
||||||
|
min-height: 32px;
|
||||||
|
user-select: none;
|
||||||
|
-webkit-user-select: none; }
|
||||||
|
.select2-container .select2-selection--multiple .select2-selection__rendered {
|
||||||
|
display: inline-block;
|
||||||
|
overflow: hidden;
|
||||||
|
padding-left: 8px;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap; }
|
||||||
|
.select2-container .select2-search--inline {
|
||||||
|
float: left; }
|
||||||
|
.select2-container .select2-search--inline .select2-search__field {
|
||||||
|
box-sizing: border-box;
|
||||||
|
border: none;
|
||||||
|
font-size: 100%;
|
||||||
|
margin-top: 5px;
|
||||||
|
padding: 0; }
|
||||||
|
.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {
|
||||||
|
-webkit-appearance: none; }
|
||||||
|
|
||||||
|
.select2-dropdown {
|
||||||
|
background-color: white;
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 4px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
left: -100000px;
|
||||||
|
width: 100%;
|
||||||
|
z-index: 1051; }
|
||||||
|
|
||||||
|
.select2-results {
|
||||||
|
display: block; }
|
||||||
|
|
||||||
|
.select2-results__options {
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0; }
|
||||||
|
|
||||||
|
.select2-results__option {
|
||||||
|
padding: 6px;
|
||||||
|
user-select: none;
|
||||||
|
-webkit-user-select: none; }
|
||||||
|
.select2-results__option[aria-selected] {
|
||||||
|
cursor: pointer; }
|
||||||
|
|
||||||
|
.select2-container--open .select2-dropdown {
|
||||||
|
left: 0; }
|
||||||
|
|
||||||
|
.select2-container--open .select2-dropdown--above {
|
||||||
|
border-bottom: none;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
border-bottom-right-radius: 0; }
|
||||||
|
|
||||||
|
.select2-container--open .select2-dropdown--below {
|
||||||
|
border-top: none;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 0; }
|
||||||
|
|
||||||
|
.select2-search--dropdown {
|
||||||
|
display: block;
|
||||||
|
padding: 4px; }
|
||||||
|
.select2-search--dropdown .select2-search__field {
|
||||||
|
padding: 4px;
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box; }
|
||||||
|
.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {
|
||||||
|
-webkit-appearance: none; }
|
||||||
|
.select2-search--dropdown.select2-search--hide {
|
||||||
|
display: none; }
|
||||||
|
|
||||||
|
.select2-close-mask {
|
||||||
|
border: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
display: block;
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
min-height: 100%;
|
||||||
|
min-width: 100%;
|
||||||
|
height: auto;
|
||||||
|
width: auto;
|
||||||
|
opacity: 0;
|
||||||
|
z-index: 99;
|
||||||
|
background-color: #fff;
|
||||||
|
filter: alpha(opacity=0); }
|
||||||
|
|
||||||
|
.select2-hidden-accessible {
|
||||||
|
border: 0 !important;
|
||||||
|
clip: rect(0 0 0 0) !important;
|
||||||
|
-webkit-clip-path: inset(50%) !important;
|
||||||
|
clip-path: inset(50%) !important;
|
||||||
|
height: 1px !important;
|
||||||
|
overflow: hidden !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
position: absolute !important;
|
||||||
|
width: 1px !important;
|
||||||
|
white-space: nowrap !important; }
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--single {
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 4px; }
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
||||||
|
color: #444;
|
||||||
|
line-height: 28px; }
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__clear {
|
||||||
|
cursor: pointer;
|
||||||
|
float: right;
|
||||||
|
font-weight: bold; }
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__placeholder {
|
||||||
|
color: #999; }
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__arrow {
|
||||||
|
height: 26px;
|
||||||
|
position: absolute;
|
||||||
|
top: 1px;
|
||||||
|
right: 1px;
|
||||||
|
width: 20px; }
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__arrow b {
|
||||||
|
border-color: #888 transparent transparent transparent;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 5px 4px 0 4px;
|
||||||
|
height: 0;
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -4px;
|
||||||
|
margin-top: -2px;
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
width: 0; }
|
||||||
|
|
||||||
|
.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear {
|
||||||
|
float: left; }
|
||||||
|
|
||||||
|
.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow {
|
||||||
|
left: 1px;
|
||||||
|
right: auto; }
|
||||||
|
|
||||||
|
.select2-container--default.select2-container--disabled .select2-selection--single {
|
||||||
|
background-color: #eee;
|
||||||
|
cursor: default; }
|
||||||
|
.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {
|
||||||
|
display: none; }
|
||||||
|
|
||||||
|
.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
|
||||||
|
border-color: transparent transparent #888 transparent;
|
||||||
|
border-width: 0 4px 5px 4px; }
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--multiple {
|
||||||
|
background-color: white;
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: text; }
|
||||||
|
.select2-container--default .select2-selection--multiple .select2-selection__rendered {
|
||||||
|
box-sizing: border-box;
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0 5px;
|
||||||
|
width: 100%; }
|
||||||
|
.select2-container--default .select2-selection--multiple .select2-selection__rendered li {
|
||||||
|
list-style: none; }
|
||||||
|
.select2-container--default .select2-selection--multiple .select2-selection__clear {
|
||||||
|
cursor: pointer;
|
||||||
|
float: right;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-top: 5px;
|
||||||
|
margin-right: 10px;
|
||||||
|
padding: 1px; }
|
||||||
|
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
||||||
|
background-color: #e4e4e4;
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: default;
|
||||||
|
float: left;
|
||||||
|
margin-right: 5px;
|
||||||
|
margin-top: 5px;
|
||||||
|
padding: 0 5px; }
|
||||||
|
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
|
||||||
|
color: #999;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-right: 2px; }
|
||||||
|
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
|
||||||
|
color: #333; }
|
||||||
|
|
||||||
|
.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline {
|
||||||
|
float: right; }
|
||||||
|
|
||||||
|
.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
|
||||||
|
margin-left: 5px;
|
||||||
|
margin-right: auto; }
|
||||||
|
|
||||||
|
.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
|
||||||
|
margin-left: 2px;
|
||||||
|
margin-right: auto; }
|
||||||
|
|
||||||
|
.select2-container--default.select2-container--focus .select2-selection--multiple {
|
||||||
|
border: solid black 1px;
|
||||||
|
outline: 0; }
|
||||||
|
|
||||||
|
.select2-container--default.select2-container--disabled .select2-selection--multiple {
|
||||||
|
background-color: #eee;
|
||||||
|
cursor: default; }
|
||||||
|
|
||||||
|
.select2-container--default.select2-container--disabled .select2-selection__choice__remove {
|
||||||
|
display: none; }
|
||||||
|
|
||||||
|
.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple {
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 0; }
|
||||||
|
|
||||||
|
.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
border-bottom-right-radius: 0; }
|
||||||
|
|
||||||
|
.select2-container--default .select2-search--dropdown .select2-search__field {
|
||||||
|
border: 1px solid #aaa; }
|
||||||
|
|
||||||
|
.select2-container--default .select2-search--inline .select2-search__field {
|
||||||
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
outline: 0;
|
||||||
|
box-shadow: none;
|
||||||
|
-webkit-appearance: textfield; }
|
||||||
|
|
||||||
|
.select2-container--default .select2-results > .select2-results__options {
|
||||||
|
max-height: 200px;
|
||||||
|
overflow-y: auto; }
|
||||||
|
|
||||||
|
.select2-container--default .select2-results__option[role=group] {
|
||||||
|
padding: 0; }
|
||||||
|
|
||||||
|
.select2-container--default .select2-results__option[aria-disabled=true] {
|
||||||
|
color: #999; }
|
||||||
|
|
||||||
|
.select2-container--default .select2-results__option[aria-selected=true] {
|
||||||
|
background-color: #ddd; }
|
||||||
|
|
||||||
|
.select2-container--default .select2-results__option .select2-results__option {
|
||||||
|
padding-left: 1em; }
|
||||||
|
.select2-container--default .select2-results__option .select2-results__option .select2-results__group {
|
||||||
|
padding-left: 0; }
|
||||||
|
.select2-container--default .select2-results__option .select2-results__option .select2-results__option {
|
||||||
|
margin-left: -1em;
|
||||||
|
padding-left: 2em; }
|
||||||
|
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||||
|
margin-left: -2em;
|
||||||
|
padding-left: 3em; }
|
||||||
|
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||||
|
margin-left: -3em;
|
||||||
|
padding-left: 4em; }
|
||||||
|
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||||
|
margin-left: -4em;
|
||||||
|
padding-left: 5em; }
|
||||||
|
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||||
|
margin-left: -5em;
|
||||||
|
padding-left: 6em; }
|
||||||
|
|
||||||
|
.select2-container--default .select2-results__option--highlighted[aria-selected] {
|
||||||
|
background-color: #5897fb;
|
||||||
|
color: white; }
|
||||||
|
|
||||||
|
.select2-container--default .select2-results__group {
|
||||||
|
cursor: default;
|
||||||
|
display: block;
|
||||||
|
padding: 6px; }
|
||||||
|
|
||||||
|
.select2-container--classic .select2-selection--single {
|
||||||
|
background-color: #f7f7f7;
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 4px;
|
||||||
|
outline: 0;
|
||||||
|
background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%);
|
||||||
|
background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%);
|
||||||
|
background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%);
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }
|
||||||
|
.select2-container--classic .select2-selection--single:focus {
|
||||||
|
border: 1px solid #5897fb; }
|
||||||
|
.select2-container--classic .select2-selection--single .select2-selection__rendered {
|
||||||
|
color: #444;
|
||||||
|
line-height: 28px; }
|
||||||
|
.select2-container--classic .select2-selection--single .select2-selection__clear {
|
||||||
|
cursor: pointer;
|
||||||
|
float: right;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-right: 10px; }
|
||||||
|
.select2-container--classic .select2-selection--single .select2-selection__placeholder {
|
||||||
|
color: #999; }
|
||||||
|
.select2-container--classic .select2-selection--single .select2-selection__arrow {
|
||||||
|
background-color: #ddd;
|
||||||
|
border: none;
|
||||||
|
border-left: 1px solid #aaa;
|
||||||
|
border-top-right-radius: 4px;
|
||||||
|
border-bottom-right-radius: 4px;
|
||||||
|
height: 26px;
|
||||||
|
position: absolute;
|
||||||
|
top: 1px;
|
||||||
|
right: 1px;
|
||||||
|
width: 20px;
|
||||||
|
background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
|
||||||
|
background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
|
||||||
|
background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); }
|
||||||
|
.select2-container--classic .select2-selection--single .select2-selection__arrow b {
|
||||||
|
border-color: #888 transparent transparent transparent;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 5px 4px 0 4px;
|
||||||
|
height: 0;
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -4px;
|
||||||
|
margin-top: -2px;
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
width: 0; }
|
||||||
|
|
||||||
|
.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear {
|
||||||
|
float: left; }
|
||||||
|
|
||||||
|
.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow {
|
||||||
|
border: none;
|
||||||
|
border-right: 1px solid #aaa;
|
||||||
|
border-radius: 0;
|
||||||
|
border-top-left-radius: 4px;
|
||||||
|
border-bottom-left-radius: 4px;
|
||||||
|
left: 1px;
|
||||||
|
right: auto; }
|
||||||
|
|
||||||
|
.select2-container--classic.select2-container--open .select2-selection--single {
|
||||||
|
border: 1px solid #5897fb; }
|
||||||
|
.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {
|
||||||
|
background: transparent;
|
||||||
|
border: none; }
|
||||||
|
.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {
|
||||||
|
border-color: transparent transparent #888 transparent;
|
||||||
|
border-width: 0 4px 5px 4px; }
|
||||||
|
|
||||||
|
.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {
|
||||||
|
border-top: none;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%);
|
||||||
|
background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);
|
||||||
|
background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%);
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }
|
||||||
|
|
||||||
|
.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {
|
||||||
|
border-bottom: none;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%);
|
||||||
|
background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%);
|
||||||
|
background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%);
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); }
|
||||||
|
|
||||||
|
.select2-container--classic .select2-selection--multiple {
|
||||||
|
background-color: white;
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: text;
|
||||||
|
outline: 0; }
|
||||||
|
.select2-container--classic .select2-selection--multiple:focus {
|
||||||
|
border: 1px solid #5897fb; }
|
||||||
|
.select2-container--classic .select2-selection--multiple .select2-selection__rendered {
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0 5px; }
|
||||||
|
.select2-container--classic .select2-selection--multiple .select2-selection__clear {
|
||||||
|
display: none; }
|
||||||
|
.select2-container--classic .select2-selection--multiple .select2-selection__choice {
|
||||||
|
background-color: #e4e4e4;
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: default;
|
||||||
|
float: left;
|
||||||
|
margin-right: 5px;
|
||||||
|
margin-top: 5px;
|
||||||
|
padding: 0 5px; }
|
||||||
|
.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {
|
||||||
|
color: #888;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-right: 2px; }
|
||||||
|
.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {
|
||||||
|
color: #555; }
|
||||||
|
|
||||||
|
.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
|
||||||
|
float: right;
|
||||||
|
margin-left: 5px;
|
||||||
|
margin-right: auto; }
|
||||||
|
|
||||||
|
.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
|
||||||
|
margin-left: 2px;
|
||||||
|
margin-right: auto; }
|
||||||
|
|
||||||
|
.select2-container--classic.select2-container--open .select2-selection--multiple {
|
||||||
|
border: 1px solid #5897fb; }
|
||||||
|
|
||||||
|
.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {
|
||||||
|
border-top: none;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 0; }
|
||||||
|
|
||||||
|
.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {
|
||||||
|
border-bottom: none;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
border-bottom-right-radius: 0; }
|
||||||
|
|
||||||
|
.select2-container--classic .select2-search--dropdown .select2-search__field {
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
outline: 0; }
|
||||||
|
|
||||||
|
.select2-container--classic .select2-search--inline .select2-search__field {
|
||||||
|
outline: 0;
|
||||||
|
box-shadow: none; }
|
||||||
|
|
||||||
|
.select2-container--classic .select2-dropdown {
|
||||||
|
background-color: white;
|
||||||
|
border: 1px solid transparent; }
|
||||||
|
|
||||||
|
.select2-container--classic .select2-dropdown--above {
|
||||||
|
border-bottom: none; }
|
||||||
|
|
||||||
|
.select2-container--classic .select2-dropdown--below {
|
||||||
|
border-top: none; }
|
||||||
|
|
||||||
|
.select2-container--classic .select2-results > .select2-results__options {
|
||||||
|
max-height: 200px;
|
||||||
|
overflow-y: auto; }
|
||||||
|
|
||||||
|
.select2-container--classic .select2-results__option[role=group] {
|
||||||
|
padding: 0; }
|
||||||
|
|
||||||
|
.select2-container--classic .select2-results__option[aria-disabled=true] {
|
||||||
|
color: grey; }
|
||||||
|
|
||||||
|
.select2-container--classic .select2-results__option--highlighted[aria-selected] {
|
||||||
|
background-color: #3875d7;
|
||||||
|
color: white; }
|
||||||
|
|
||||||
|
.select2-container--classic .select2-results__group {
|
||||||
|
cursor: default;
|
||||||
|
display: block;
|
||||||
|
padding: 6px; }
|
||||||
|
|
||||||
|
.select2-container--classic.select2-container--open .select2-dropdown {
|
||||||
|
border-color: #5897fb; }
|
||||||
@@ -1,155 +0,0 @@
|
|||||||
(function($) {
|
|
||||||
$.extend($.summernote.lang, {
|
|
||||||
'ko-KR': {
|
|
||||||
font: {
|
|
||||||
bold: '굵게',
|
|
||||||
italic: '기울임꼴',
|
|
||||||
underline: '밑줄',
|
|
||||||
clear: '글자 효과 없애기',
|
|
||||||
height: '줄간격',
|
|
||||||
name: '글꼴',
|
|
||||||
superscript: '위 첨자',
|
|
||||||
subscript: '아래 첨자',
|
|
||||||
strikethrough: '취소선',
|
|
||||||
size: '글자 크기'
|
|
||||||
},
|
|
||||||
image: {
|
|
||||||
image: '사진',
|
|
||||||
insert: '사진 추가',
|
|
||||||
resizeFull: '100% 크기로 변경',
|
|
||||||
resizeHalf: '50% 크기로 변경',
|
|
||||||
resizeQuarter: '25% 크기로 변경',
|
|
||||||
floatLeft: '왼쪽 정렬',
|
|
||||||
floatRight: '오른쪽 정렬',
|
|
||||||
floatNone: '정렬하지 않음',
|
|
||||||
shapeRounded: '스타일: 둥근 모서리',
|
|
||||||
shapeCircle: '스타일: 원형',
|
|
||||||
shapeThumbnail: '스타일: 액자',
|
|
||||||
shapeNone: '스타일: 없음',
|
|
||||||
dragImageHere: '텍스트 혹은 사진을 이곳으로 끌어오세요',
|
|
||||||
dropImage: '텍스트 혹은 사진을 내려놓으세요',
|
|
||||||
selectFromFiles: '파일 선택',
|
|
||||||
maximumFileSize: 'Maximum file size',
|
|
||||||
maximumFileSizeError: 'Maximum file size exceeded.',
|
|
||||||
url: '사진 URL',
|
|
||||||
remove: '사진 삭제',
|
|
||||||
original: 'Original'
|
|
||||||
},
|
|
||||||
video: {
|
|
||||||
video: '동영상',
|
|
||||||
videoLink: '동영상 링크',
|
|
||||||
insert: '동영상 추가',
|
|
||||||
url: '동영상 URL',
|
|
||||||
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, Youku 사용 가능)'
|
|
||||||
},
|
|
||||||
link: {
|
|
||||||
link: '링크',
|
|
||||||
insert: '링크 추가',
|
|
||||||
unlink: '링크 삭제',
|
|
||||||
edit: '수정',
|
|
||||||
textToDisplay: '링크에 표시할 내용',
|
|
||||||
url: '이동할 URL',
|
|
||||||
openInNewWindow: '새창으로 열기'
|
|
||||||
},
|
|
||||||
table: {
|
|
||||||
table: '테이블',
|
|
||||||
addRowAbove: 'Add row above',
|
|
||||||
addRowBelow: 'Add row below',
|
|
||||||
addColLeft: 'Add column left',
|
|
||||||
addColRight: 'Add column right',
|
|
||||||
delRow: 'Delete row',
|
|
||||||
delCol: 'Delete column',
|
|
||||||
delTable: 'Delete table'
|
|
||||||
},
|
|
||||||
hr: {
|
|
||||||
insert: '구분선 추가'
|
|
||||||
},
|
|
||||||
style: {
|
|
||||||
style: '스타일',
|
|
||||||
p: '본문',
|
|
||||||
blockquote: '인용구',
|
|
||||||
pre: '코드',
|
|
||||||
h1: '제목 1',
|
|
||||||
h2: '제목 2',
|
|
||||||
h3: '제목 3',
|
|
||||||
h4: '제목 4',
|
|
||||||
h5: '제목 5',
|
|
||||||
h6: '제목 6'
|
|
||||||
},
|
|
||||||
lists: {
|
|
||||||
unordered: '글머리 기호',
|
|
||||||
ordered: '번호 매기기'
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
help: '도움말',
|
|
||||||
fullscreen: '전체 화면',
|
|
||||||
codeview: '코드 보기'
|
|
||||||
},
|
|
||||||
paragraph: {
|
|
||||||
paragraph: '문단 정렬',
|
|
||||||
outdent: '내어쓰기',
|
|
||||||
indent: '들여쓰기',
|
|
||||||
left: '왼쪽 정렬',
|
|
||||||
center: '가운데 정렬',
|
|
||||||
right: '오른쪽 정렬',
|
|
||||||
justify: '양쪽 정렬'
|
|
||||||
},
|
|
||||||
color: {
|
|
||||||
recent: '마지막으로 사용한 색',
|
|
||||||
more: '다른 색 선택',
|
|
||||||
background: '배경색',
|
|
||||||
foreground: '글자색',
|
|
||||||
transparent: '투명',
|
|
||||||
setTransparent: '투명',
|
|
||||||
reset: '취소',
|
|
||||||
resetToDefault: '기본 값으로 변경'
|
|
||||||
},
|
|
||||||
shortcut: {
|
|
||||||
shortcuts: '키보드 단축키',
|
|
||||||
close: '닫기',
|
|
||||||
textFormatting: '글자 스타일 적용',
|
|
||||||
action: '기능',
|
|
||||||
paragraphFormatting: '문단 스타일 적용',
|
|
||||||
documentStyle: '문서 스타일 적용',
|
|
||||||
extraKeys: 'Extra keys'
|
|
||||||
},
|
|
||||||
help: {
|
|
||||||
'insertParagraph': 'Insert Paragraph',
|
|
||||||
'undo': 'Undoes the last command',
|
|
||||||
'redo': 'Redoes the last command',
|
|
||||||
'tab': 'Tab',
|
|
||||||
'untab': 'Untab',
|
|
||||||
'bold': 'Set a bold style',
|
|
||||||
'italic': 'Set a italic style',
|
|
||||||
'underline': 'Set a underline style',
|
|
||||||
'strikethrough': 'Set a strikethrough style',
|
|
||||||
'removeFormat': 'Clean a style',
|
|
||||||
'justifyLeft': 'Set left align',
|
|
||||||
'justifyCenter': 'Set center align',
|
|
||||||
'justifyRight': 'Set right align',
|
|
||||||
'justifyFull': 'Set full align',
|
|
||||||
'insertUnorderedList': 'Toggle unordered list',
|
|
||||||
'insertOrderedList': 'Toggle ordered list',
|
|
||||||
'outdent': 'Outdent on current paragraph',
|
|
||||||
'indent': 'Indent on current paragraph',
|
|
||||||
'formatPara': 'Change current block\'s format as a paragraph(P tag)',
|
|
||||||
'formatH1': 'Change current block\'s format as H1',
|
|
||||||
'formatH2': 'Change current block\'s format as H2',
|
|
||||||
'formatH3': 'Change current block\'s format as H3',
|
|
||||||
'formatH4': 'Change current block\'s format as H4',
|
|
||||||
'formatH5': 'Change current block\'s format as H5',
|
|
||||||
'formatH6': 'Change current block\'s format as H6',
|
|
||||||
'insertHorizontalRule': 'Insert horizontal rule',
|
|
||||||
'linkDialog.show': 'Show Link Dialog'
|
|
||||||
},
|
|
||||||
history: {
|
|
||||||
undo: '실행 취소',
|
|
||||||
redo: '다시 실행'
|
|
||||||
},
|
|
||||||
specialChar: {
|
|
||||||
specialChar: '특수문자',
|
|
||||||
select: '특수문자를 선택하세요'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})(jQuery);
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
.ext-databasic {
|
|
||||||
position: relative;
|
|
||||||
display: block;
|
|
||||||
min-height: 50px;
|
|
||||||
background-color: cyan;
|
|
||||||
text-align: center;
|
|
||||||
padding: 20px;
|
|
||||||
border: 1px solid white;
|
|
||||||
border-radius: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ext-databasic p {
|
|
||||||
color: white;
|
|
||||||
font-size: 1.2em;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
@@ -1,292 +0,0 @@
|
|||||||
(function(factory) {
|
|
||||||
/* global define */
|
|
||||||
if (typeof define === 'function' && define.amd) {
|
|
||||||
// AMD. Register as an anonymous module.
|
|
||||||
define(['jquery'], factory);
|
|
||||||
} else if (typeof module === 'object' && module.exports) {
|
|
||||||
// Node/CommonJS
|
|
||||||
module.exports = factory(require('jquery'));
|
|
||||||
} else {
|
|
||||||
// Browser globals
|
|
||||||
factory(window.jQuery);
|
|
||||||
}
|
|
||||||
}(function($) {
|
|
||||||
// pull in some summernote core functions
|
|
||||||
var ui = $.summernote.ui;
|
|
||||||
var dom = $.summernote.dom;
|
|
||||||
|
|
||||||
// define the popover plugin
|
|
||||||
var DataBasicPlugin = function(context) {
|
|
||||||
var self = this;
|
|
||||||
var options = context.options;
|
|
||||||
var lang = options.langInfo;
|
|
||||||
|
|
||||||
self.icon = '<i class="fa fa-object-group"/>';
|
|
||||||
|
|
||||||
// add context menu button for dialog
|
|
||||||
context.memo('button.databasic', function() {
|
|
||||||
return ui.button({
|
|
||||||
contents: self.icon,
|
|
||||||
tooltip: lang.databasic.insert,
|
|
||||||
click: context.createInvokeHandler('databasic.showDialog')
|
|
||||||
}).render();
|
|
||||||
});
|
|
||||||
|
|
||||||
// add popover edit button
|
|
||||||
context.memo('button.databasicDialog', function() {
|
|
||||||
return ui.button({
|
|
||||||
contents: self.icon,
|
|
||||||
tooltip: lang.databasic.edit,
|
|
||||||
click: context.createInvokeHandler('databasic.showDialog')
|
|
||||||
}).render();
|
|
||||||
});
|
|
||||||
|
|
||||||
// add popover size buttons
|
|
||||||
context.memo('button.databasicSize100', function() {
|
|
||||||
return ui.button({
|
|
||||||
contents: '<span class="note-fontsize-10">100%</span>',
|
|
||||||
tooltip: lang.image.resizeFull,
|
|
||||||
click: context.createInvokeHandler('editor.resize', '1')
|
|
||||||
}).render();
|
|
||||||
});
|
|
||||||
context.memo('button.databasicSize50', function() {
|
|
||||||
return ui.button({
|
|
||||||
contents: '<span class="note-fontsize-10">50%</span>',
|
|
||||||
tooltip: lang.image.resizeHalf,
|
|
||||||
click: context.createInvokeHandler('editor.resize', '0.5')
|
|
||||||
}).render();
|
|
||||||
});
|
|
||||||
context.memo('button.databasicSize25', function() {
|
|
||||||
return ui.button({
|
|
||||||
contents: '<span class="note-fontsize-10">25%</span>',
|
|
||||||
tooltip: lang.image.resizeQuarter,
|
|
||||||
click: context.createInvokeHandler('editor.resize', '0.25')
|
|
||||||
}).render();
|
|
||||||
});
|
|
||||||
|
|
||||||
self.events = {
|
|
||||||
'summernote.init': function(we, e) {
|
|
||||||
// update existing containers
|
|
||||||
$('data.ext-databasic', e.editable).each(function() { self.setContent($(this)); });
|
|
||||||
// TODO: make this an undo snapshot...
|
|
||||||
},
|
|
||||||
'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function() {
|
|
||||||
self.update();
|
|
||||||
},
|
|
||||||
'summernote.dialog.shown': function() {
|
|
||||||
self.hidePopover();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
self.initialize = function() {
|
|
||||||
// create dialog markup
|
|
||||||
var $container = options.dialogsInBody ? $(document.body) : context.layoutInfo.editor;
|
|
||||||
|
|
||||||
var body = '<div class="form-group row-fluid">' +
|
|
||||||
'<label>' + lang.databasic.testLabel + '</label>' +
|
|
||||||
'<input class="ext-databasic-test form-control" type="text" />' +
|
|
||||||
'</div>';
|
|
||||||
var footer = '<button href="#" class="btn btn-primary ext-databasic-save">' + lang.databasic.insert + '</button>';
|
|
||||||
|
|
||||||
self.$dialog = ui.dialog({
|
|
||||||
title: lang.databasic.name,
|
|
||||||
fade: options.dialogsFade,
|
|
||||||
body: body,
|
|
||||||
footer: footer
|
|
||||||
}).render().appendTo($container);
|
|
||||||
|
|
||||||
// create popover
|
|
||||||
self.$popover = ui.popover({
|
|
||||||
className: 'ext-databasic-popover'
|
|
||||||
}).render().appendTo('body');
|
|
||||||
var $content = self.$popover.find('.popover-content');
|
|
||||||
|
|
||||||
context.invoke('buttons.build', $content, options.popover.databasic);
|
|
||||||
};
|
|
||||||
|
|
||||||
self.destroy = function() {
|
|
||||||
self.$popover.remove();
|
|
||||||
self.$popover = null;
|
|
||||||
self.$dialog.remove();
|
|
||||||
self.$dialog = null;
|
|
||||||
};
|
|
||||||
|
|
||||||
self.update = function() {
|
|
||||||
// Prevent focusing on editable when invoke('code') is executed
|
|
||||||
if (!context.invoke('editor.hasFocus')) {
|
|
||||||
self.hidePopover();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var rng = context.invoke('editor.createRange');
|
|
||||||
var visible = false;
|
|
||||||
|
|
||||||
if (rng.isOnData()) {
|
|
||||||
var $data = $(rng.sc).closest('data.ext-databasic');
|
|
||||||
|
|
||||||
if ($data.length) {
|
|
||||||
var pos = dom.posFromPlaceholder($data[0]);
|
|
||||||
|
|
||||||
self.$popover.css({
|
|
||||||
display: 'block',
|
|
||||||
left: pos.left,
|
|
||||||
top: pos.top
|
|
||||||
});
|
|
||||||
|
|
||||||
// save editor target to let size buttons resize the container
|
|
||||||
context.invoke('editor.saveTarget', $data[0]);
|
|
||||||
|
|
||||||
visible = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// hide if not visible
|
|
||||||
if (!visible) {
|
|
||||||
self.hidePopover();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
self.hidePopover = function() {
|
|
||||||
self.$popover.hide();
|
|
||||||
};
|
|
||||||
|
|
||||||
// define plugin dialog
|
|
||||||
self.getInfo = function() {
|
|
||||||
var rng = context.invoke('editor.createRange');
|
|
||||||
|
|
||||||
if (rng.isOnData()) {
|
|
||||||
var $data = $(rng.sc).closest('data.ext-databasic');
|
|
||||||
|
|
||||||
if ($data.length) {
|
|
||||||
// Get the first node on range(for edit).
|
|
||||||
return {
|
|
||||||
node: $data,
|
|
||||||
test: $data.attr('data-test')
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return {};
|
|
||||||
};
|
|
||||||
|
|
||||||
self.setContent = function($node) {
|
|
||||||
$node.html('<p contenteditable="false">' + self.icon + ' ' + lang.databasic.name + ': ' +
|
|
||||||
$node.attr('data-test') + '</p>');
|
|
||||||
};
|
|
||||||
|
|
||||||
self.updateNode = function(info) {
|
|
||||||
self.setContent(info.node
|
|
||||||
.attr('data-test', info.test));
|
|
||||||
};
|
|
||||||
|
|
||||||
self.createNode = function(info) {
|
|
||||||
var $node = $('<data class="ext-databasic"></data>');
|
|
||||||
|
|
||||||
if ($node) {
|
|
||||||
// save node to info structure
|
|
||||||
info.node = $node;
|
|
||||||
// insert node into editor dom
|
|
||||||
context.invoke('editor.insertNode', $node[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $node;
|
|
||||||
};
|
|
||||||
|
|
||||||
self.showDialog = function() {
|
|
||||||
var info = self.getInfo();
|
|
||||||
var newNode = !info.node;
|
|
||||||
context.invoke('editor.saveRange');
|
|
||||||
|
|
||||||
self
|
|
||||||
.openDialog(info)
|
|
||||||
.then(function(dialogInfo) {
|
|
||||||
// [workaround] hide dialog before restore range for IE range focus
|
|
||||||
ui.hideDialog(self.$dialog);
|
|
||||||
context.invoke('editor.restoreRange');
|
|
||||||
|
|
||||||
// insert a new node
|
|
||||||
if (newNode) {
|
|
||||||
self.createNode(info);
|
|
||||||
}
|
|
||||||
|
|
||||||
// update info with dialog info
|
|
||||||
$.extend(info, dialogInfo);
|
|
||||||
|
|
||||||
self.updateNode(info);
|
|
||||||
})
|
|
||||||
.fail(function() {
|
|
||||||
context.invoke('editor.restoreRange');
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
self.openDialog = function(info) {
|
|
||||||
return $.Deferred(function(deferred) {
|
|
||||||
var $inpTest = self.$dialog.find('.ext-databasic-test');
|
|
||||||
var $saveBtn = self.$dialog.find('.ext-databasic-save');
|
|
||||||
var onKeyup = function(event) {
|
|
||||||
if (event.keyCode === 13) {
|
|
||||||
$saveBtn.trigger('click');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ui.onDialogShown(self.$dialog, function() {
|
|
||||||
context.triggerEvent('dialog.shown');
|
|
||||||
|
|
||||||
$inpTest.val(info.test).on('input', function() {
|
|
||||||
ui.toggleBtn($saveBtn, $inpTest.val());
|
|
||||||
}).trigger('focus').on('keyup', onKeyup);
|
|
||||||
|
|
||||||
$saveBtn
|
|
||||||
.text(info.node ? lang.databasic.edit : lang.databasic.insert)
|
|
||||||
.click(function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
deferred.resolve({ test: $inpTest.val() });
|
|
||||||
});
|
|
||||||
|
|
||||||
// init save button
|
|
||||||
ui.toggleBtn($saveBtn, $inpTest.val());
|
|
||||||
});
|
|
||||||
|
|
||||||
ui.onDialogHidden(self.$dialog, function() {
|
|
||||||
$inpTest.off('input keyup');
|
|
||||||
$saveBtn.off('click');
|
|
||||||
|
|
||||||
if (deferred.state() === 'pending') {
|
|
||||||
deferred.reject();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
ui.showDialog(self.$dialog);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// Extends summernote
|
|
||||||
$.extend(true, $.summernote, {
|
|
||||||
plugins: {
|
|
||||||
databasic: DataBasicPlugin
|
|
||||||
},
|
|
||||||
|
|
||||||
options: {
|
|
||||||
popover: {
|
|
||||||
databasic: [
|
|
||||||
['databasic', ['databasicDialog', 'databasicSize100', 'databasicSize50', 'databasicSize25']]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// add localization texts
|
|
||||||
lang: {
|
|
||||||
'en-US': {
|
|
||||||
databasic: {
|
|
||||||
name: 'Basic Data Container',
|
|
||||||
insert: 'insert basic data container',
|
|
||||||
edit: 'edit basic data container',
|
|
||||||
testLabel: 'test input'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
(function(factory) {
|
|
||||||
/* global define */
|
|
||||||
if (typeof define === 'function' && define.amd) {
|
|
||||||
// AMD. Register as an anonymous module.
|
|
||||||
define(['jquery'], factory);
|
|
||||||
} else if (typeof module === 'object' && module.exports) {
|
|
||||||
// Node/CommonJS
|
|
||||||
module.exports = factory(require('jquery'));
|
|
||||||
} else {
|
|
||||||
// Browser globals
|
|
||||||
factory(window.jQuery);
|
|
||||||
}
|
|
||||||
}(function($) {
|
|
||||||
// Extends plugins for adding hello.
|
|
||||||
// - plugin is external module for customizing.
|
|
||||||
$.extend($.summernote.plugins, {
|
|
||||||
/**
|
|
||||||
* @param {Object} context - context object has status of editor.
|
|
||||||
*/
|
|
||||||
'hello': function(context) {
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
// ui has renders to build ui elements.
|
|
||||||
// - you can create a button with `ui.button`
|
|
||||||
var ui = $.summernote.ui;
|
|
||||||
|
|
||||||
// add hello button
|
|
||||||
context.memo('button.hello', function() {
|
|
||||||
// create button
|
|
||||||
var button = ui.button({
|
|
||||||
contents: '<i class="fa fa-child"/> Hello',
|
|
||||||
tooltip: 'hello',
|
|
||||||
click: function() {
|
|
||||||
self.$panel.show();
|
|
||||||
self.$panel.hide(500);
|
|
||||||
// invoke insertText method with 'hello' on editor module.
|
|
||||||
context.invoke('editor.insertText', 'hello');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// create jQuery object from button instance.
|
|
||||||
var $hello = button.render();
|
|
||||||
return $hello;
|
|
||||||
});
|
|
||||||
|
|
||||||
// This events will be attached when editor is initialized.
|
|
||||||
this.events = {
|
|
||||||
// This will be called after modules are initialized.
|
|
||||||
'summernote.init': function(we, e) {
|
|
||||||
console.log('summernote initialized', we, e);
|
|
||||||
},
|
|
||||||
// This will be called when user releases a key on editable.
|
|
||||||
'summernote.keyup': function(we, e) {
|
|
||||||
console.log('summernote keyup', we, e);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// This method will be called when editor is initialized by $('..').summernote();
|
|
||||||
// You can create elements for plugin
|
|
||||||
this.initialize = function() {
|
|
||||||
this.$panel = $('<div class="hello-panel"/>').css({
|
|
||||||
position: 'absolute',
|
|
||||||
width: 100,
|
|
||||||
height: 100,
|
|
||||||
left: '50%',
|
|
||||||
top: '50%',
|
|
||||||
background: 'red'
|
|
||||||
}).hide();
|
|
||||||
|
|
||||||
this.$panel.appendTo('body');
|
|
||||||
};
|
|
||||||
|
|
||||||
// This methods will be called when editor is destroyed by $('..').summernote('destroy');
|
|
||||||
// You should remove elements on `initialize`.
|
|
||||||
this.destroy = function() {
|
|
||||||
this.$panel.remove();
|
|
||||||
this.$panel = null;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
@@ -1,312 +0,0 @@
|
|||||||
(function(factory) {
|
|
||||||
/* global define */
|
|
||||||
if (typeof define === 'function' && define.amd) {
|
|
||||||
// AMD. Register as an anonymous module.
|
|
||||||
define(['jquery'], factory);
|
|
||||||
} else if (typeof module === 'object' && module.exports) {
|
|
||||||
// Node/CommonJS
|
|
||||||
module.exports = factory(require('jquery'));
|
|
||||||
} else {
|
|
||||||
// Browser globals
|
|
||||||
factory(window.jQuery);
|
|
||||||
}
|
|
||||||
}(function($) {
|
|
||||||
$.extend($.summernote.plugins, {
|
|
||||||
'specialchars': function(context) {
|
|
||||||
var self = this;
|
|
||||||
var ui = $.summernote.ui;
|
|
||||||
|
|
||||||
var $editor = context.layoutInfo.editor;
|
|
||||||
var options = context.options;
|
|
||||||
var lang = options.langInfo;
|
|
||||||
|
|
||||||
var KEY = {
|
|
||||||
UP: 38,
|
|
||||||
DOWN: 40,
|
|
||||||
LEFT: 37,
|
|
||||||
RIGHT: 39,
|
|
||||||
ENTER: 13
|
|
||||||
};
|
|
||||||
var COLUMN_LENGTH = 15;
|
|
||||||
var COLUMN_WIDTH = 35;
|
|
||||||
|
|
||||||
var currentColumn = 0;
|
|
||||||
var currentRow = 0;
|
|
||||||
var totalColumn = 0;
|
|
||||||
var totalRow = 0;
|
|
||||||
|
|
||||||
// special characters data set
|
|
||||||
var specialCharDataSet = [
|
|
||||||
'"', '&', '<', '>', '¡', '¢',
|
|
||||||
'£', '¤', '¥', '¦', '§',
|
|
||||||
'¨', '©', 'ª', '«', '¬',
|
|
||||||
'®', '¯', '°', '±', '²',
|
|
||||||
'³', '´', 'µ', '¶', '·',
|
|
||||||
'¸', '¹', 'º', '»', '¼',
|
|
||||||
'½', '¾', '¿', '×', '÷',
|
|
||||||
'ƒ', 'ˆ', '˜', '–', '—',
|
|
||||||
'‘', '’', '‚', '“', '”',
|
|
||||||
'„', '†', '‡', '•', '…',
|
|
||||||
'‰', '′', '″', '‹', '›',
|
|
||||||
'‾', '⁄', '€', 'ℑ', '℘',
|
|
||||||
'ℜ', '™', 'ℵ', '←', '↑',
|
|
||||||
'→', '↓', '↔', '↵', '⇐',
|
|
||||||
'⇑', '⇒', '⇓', '⇔', '∀',
|
|
||||||
'∂', '∃', '∅', '∇', '∈',
|
|
||||||
'∉', '∋', '∏', '∑', '−',
|
|
||||||
'∗', '√', '∝', '∞', '∠',
|
|
||||||
'∧', '∨', '∩', '∪', '∫',
|
|
||||||
'∴', '∼', '≅', '≈', '≠',
|
|
||||||
'≡', '≤', '≥', '⊂', '⊃',
|
|
||||||
'⊄', '⊆', '⊇', '⊕', '⊗',
|
|
||||||
'⊥', '⋅', '⌈', '⌉', '⌊',
|
|
||||||
'⌋', '◊', '♠', '♣', '♥',
|
|
||||||
'♦'
|
|
||||||
];
|
|
||||||
|
|
||||||
context.memo('button.specialchars', function() {
|
|
||||||
return ui.button({
|
|
||||||
contents: '<i class="fa fa-font fa-flip-vertical">',
|
|
||||||
tooltip: lang.specialChar.specialChar,
|
|
||||||
click: function() {
|
|
||||||
self.show();
|
|
||||||
}
|
|
||||||
}).render();
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Make Special Characters Table
|
|
||||||
*
|
|
||||||
* @member plugin.specialChar
|
|
||||||
* @private
|
|
||||||
* @return {jQuery}
|
|
||||||
*/
|
|
||||||
this.makeSpecialCharSetTable = function() {
|
|
||||||
var $table = $('<table/>');
|
|
||||||
$.each(specialCharDataSet, function(idx, text) {
|
|
||||||
var $td = $('<td/>').addClass('note-specialchar-node');
|
|
||||||
var $tr = (idx % COLUMN_LENGTH === 0) ? $('<tr/>') : $table.find('tr').last();
|
|
||||||
|
|
||||||
var $button = ui.button({
|
|
||||||
callback: function($node) {
|
|
||||||
$node.html(text);
|
|
||||||
$node.attr('title', text);
|
|
||||||
$node.attr('data-value', encodeURIComponent(text));
|
|
||||||
$node.css({
|
|
||||||
width: COLUMN_WIDTH,
|
|
||||||
'margin-right': '2px',
|
|
||||||
'margin-bottom': '2px'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}).render();
|
|
||||||
|
|
||||||
$td.append($button);
|
|
||||||
|
|
||||||
$tr.append($td);
|
|
||||||
if (idx % COLUMN_LENGTH === 0) {
|
|
||||||
$table.append($tr);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
totalRow = $table.find('tr').length;
|
|
||||||
totalColumn = COLUMN_LENGTH;
|
|
||||||
|
|
||||||
return $table;
|
|
||||||
};
|
|
||||||
|
|
||||||
this.initialize = function() {
|
|
||||||
var $container = options.dialogsInBody ? $(document.body) : $editor;
|
|
||||||
|
|
||||||
var body = '<div class="form-group row-fluid">' + this.makeSpecialCharSetTable()[0].outerHTML + '</div>';
|
|
||||||
|
|
||||||
this.$dialog = ui.dialog({
|
|
||||||
title: lang.specialChar.select,
|
|
||||||
body: body
|
|
||||||
}).render().appendTo($container);
|
|
||||||
};
|
|
||||||
|
|
||||||
this.show = function() {
|
|
||||||
var text = context.invoke('editor.getSelectedText');
|
|
||||||
context.invoke('editor.saveRange');
|
|
||||||
this.showSpecialCharDialog(text).then(function(selectChar) {
|
|
||||||
context.invoke('editor.restoreRange');
|
|
||||||
|
|
||||||
// build node
|
|
||||||
var $node = $('<span></span>').html(selectChar)[0];
|
|
||||||
|
|
||||||
if ($node) {
|
|
||||||
// insert video node
|
|
||||||
context.invoke('editor.insertNode', $node);
|
|
||||||
}
|
|
||||||
}).fail(function() {
|
|
||||||
context.invoke('editor.restoreRange');
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* show image dialog
|
|
||||||
*
|
|
||||||
* @param {jQuery} $dialog
|
|
||||||
* @return {Promise}
|
|
||||||
*/
|
|
||||||
this.showSpecialCharDialog = function(text) {
|
|
||||||
return $.Deferred(function(deferred) {
|
|
||||||
var $specialCharDialog = self.$dialog;
|
|
||||||
var $specialCharNode = $specialCharDialog.find('.note-specialchar-node');
|
|
||||||
var $selectedNode = null;
|
|
||||||
var ARROW_KEYS = [KEY.UP, KEY.DOWN, KEY.LEFT, KEY.RIGHT];
|
|
||||||
var ENTER_KEY = KEY.ENTER;
|
|
||||||
|
|
||||||
function addActiveClass($target) {
|
|
||||||
if (!$target) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$target.find('button').addClass('active');
|
|
||||||
$selectedNode = $target;
|
|
||||||
}
|
|
||||||
|
|
||||||
function removeActiveClass($target) {
|
|
||||||
$target.find('button').removeClass('active');
|
|
||||||
$selectedNode = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// find next node
|
|
||||||
function findNextNode(row, column) {
|
|
||||||
var findNode = null;
|
|
||||||
$.each($specialCharNode, function(idx, $node) {
|
|
||||||
var findRow = Math.ceil((idx + 1) / COLUMN_LENGTH);
|
|
||||||
var findColumn = ((idx + 1) % COLUMN_LENGTH === 0) ? COLUMN_LENGTH : (idx + 1) % COLUMN_LENGTH;
|
|
||||||
if (findRow === row && findColumn === column) {
|
|
||||||
findNode = $node;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return $(findNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
function arrowKeyHandler(keyCode) {
|
|
||||||
// left, right, up, down key
|
|
||||||
var $nextNode;
|
|
||||||
var lastRowColumnLength = $specialCharNode.length % totalColumn;
|
|
||||||
|
|
||||||
if (KEY.LEFT === keyCode) {
|
|
||||||
if (currentColumn > 1) {
|
|
||||||
currentColumn = currentColumn - 1;
|
|
||||||
} else if (currentRow === 1 && currentColumn === 1) {
|
|
||||||
currentColumn = lastRowColumnLength;
|
|
||||||
currentRow = totalRow;
|
|
||||||
} else {
|
|
||||||
currentColumn = totalColumn;
|
|
||||||
currentRow = currentRow - 1;
|
|
||||||
}
|
|
||||||
} else if (KEY.RIGHT === keyCode) {
|
|
||||||
if (currentRow === totalRow && lastRowColumnLength === currentColumn) {
|
|
||||||
currentColumn = 1;
|
|
||||||
currentRow = 1;
|
|
||||||
} else if (currentColumn < totalColumn) {
|
|
||||||
currentColumn = currentColumn + 1;
|
|
||||||
} else {
|
|
||||||
currentColumn = 1;
|
|
||||||
currentRow = currentRow + 1;
|
|
||||||
}
|
|
||||||
} else if (KEY.UP === keyCode) {
|
|
||||||
if (currentRow === 1 && lastRowColumnLength < currentColumn) {
|
|
||||||
currentRow = totalRow - 1;
|
|
||||||
} else {
|
|
||||||
currentRow = currentRow - 1;
|
|
||||||
}
|
|
||||||
} else if (KEY.DOWN === keyCode) {
|
|
||||||
currentRow = currentRow + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (currentRow === totalRow && currentColumn > lastRowColumnLength) {
|
|
||||||
currentRow = 1;
|
|
||||||
} else if (currentRow > totalRow) {
|
|
||||||
currentRow = 1;
|
|
||||||
} else if (currentRow < 1) {
|
|
||||||
currentRow = totalRow;
|
|
||||||
}
|
|
||||||
|
|
||||||
$nextNode = findNextNode(currentRow, currentColumn);
|
|
||||||
|
|
||||||
if ($nextNode) {
|
|
||||||
removeActiveClass($selectedNode);
|
|
||||||
addActiveClass($nextNode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function enterKeyHandler() {
|
|
||||||
if (!$selectedNode) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
deferred.resolve(decodeURIComponent($selectedNode.find('button').attr('data-value')));
|
|
||||||
$specialCharDialog.modal('hide');
|
|
||||||
}
|
|
||||||
|
|
||||||
function keyDownEventHandler(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
var keyCode = event.keyCode;
|
|
||||||
if (keyCode === undefined || keyCode === null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// check arrowKeys match
|
|
||||||
if (ARROW_KEYS.indexOf(keyCode) > -1) {
|
|
||||||
if ($selectedNode === null) {
|
|
||||||
addActiveClass($specialCharNode.eq(0));
|
|
||||||
currentColumn = 1;
|
|
||||||
currentRow = 1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
arrowKeyHandler(keyCode);
|
|
||||||
} else if (keyCode === ENTER_KEY) {
|
|
||||||
enterKeyHandler();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove class
|
|
||||||
removeActiveClass($specialCharNode);
|
|
||||||
|
|
||||||
// find selected node
|
|
||||||
if (text) {
|
|
||||||
for (var i = 0; i < $specialCharNode.length; i++) {
|
|
||||||
var $checkNode = $($specialCharNode[i]);
|
|
||||||
if ($checkNode.text() === text) {
|
|
||||||
addActiveClass($checkNode);
|
|
||||||
currentRow = Math.ceil((i + 1) / COLUMN_LENGTH);
|
|
||||||
currentColumn = (i + 1) % COLUMN_LENGTH;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ui.onDialogShown(self.$dialog, function() {
|
|
||||||
$(document).on('keydown', keyDownEventHandler);
|
|
||||||
|
|
||||||
self.$dialog.find('button').tooltip();
|
|
||||||
|
|
||||||
$specialCharNode.on('click', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
deferred.resolve(decodeURIComponent($(event.currentTarget).find('button').attr('data-value')));
|
|
||||||
ui.hideDialog(self.$dialog);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
ui.onDialogHidden(self.$dialog, function() {
|
|
||||||
$specialCharNode.off('click');
|
|
||||||
|
|
||||||
self.$dialog.find('button').tooltip('destroy');
|
|
||||||
|
|
||||||
$(document).off('keydown', keyDownEventHandler);
|
|
||||||
|
|
||||||
if (deferred.state() === 'pending') {
|
|
||||||
deferred.reject();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
ui.showDialog(self.$dialog);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
@@ -1,55 +1,56 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
define('ROOT', realpath(__dir__.'/..'));
|
define('ROOT', realpath(__DIR__ . '/..'));
|
||||||
setlocale(LC_ALL, 'ko_KR.UTF-8');
|
setlocale(LC_ALL, 'ko_KR.UTF-8');
|
||||||
date_default_timezone_set('Asia/Seoul');
|
date_default_timezone_set('Asia/Seoul');
|
||||||
mb_internal_encoding("UTF-8");
|
mb_internal_encoding("UTF-8");
|
||||||
mb_http_output('UTF-8');
|
mb_http_output('UTF-8');
|
||||||
mb_regex_encoding('UTF-8');
|
mb_regex_encoding('UTF-8');
|
||||||
|
|
||||||
ini_set("session.cache_expire", 10080); // minutes
|
ini_set("session.cache_expire", '10080'); // minutes
|
||||||
ini_set("session.gc_maxlifetime", 604800); // seconds
|
ini_set("session.gc_maxlifetime", '604800'); // seconds
|
||||||
|
|
||||||
function getFriendlyErrorType($type)
|
function getFriendlyErrorType($type)
|
||||||
{
|
{
|
||||||
switch($type)
|
switch ($type) {
|
||||||
{
|
case E_ERROR: // 1 //
|
||||||
case E_ERROR: // 1 //
|
return 'E_ERROR';
|
||||||
return 'E_ERROR';
|
case E_WARNING: // 2 //
|
||||||
case E_WARNING: // 2 //
|
return 'E_WARNING';
|
||||||
return 'E_WARNING';
|
case E_PARSE: // 4 //
|
||||||
case E_PARSE: // 4 //
|
return 'E_PARSE';
|
||||||
return 'E_PARSE';
|
case E_NOTICE: // 8 //
|
||||||
case E_NOTICE: // 8 //
|
return 'E_NOTICE';
|
||||||
return 'E_NOTICE';
|
case E_CORE_ERROR: // 16 //
|
||||||
case E_CORE_ERROR: // 16 //
|
return 'E_CORE_ERROR';
|
||||||
return 'E_CORE_ERROR';
|
case E_CORE_WARNING: // 32 //
|
||||||
case E_CORE_WARNING: // 32 //
|
return 'E_CORE_WARNING';
|
||||||
return 'E_CORE_WARNING';
|
case E_COMPILE_ERROR: // 64 //
|
||||||
case E_COMPILE_ERROR: // 64 //
|
return 'E_COMPILE_ERROR';
|
||||||
return 'E_COMPILE_ERROR';
|
case E_COMPILE_WARNING: // 128 //
|
||||||
case E_COMPILE_WARNING: // 128 //
|
return 'E_COMPILE_WARNING';
|
||||||
return 'E_COMPILE_WARNING';
|
case E_USER_ERROR: // 256 //
|
||||||
case E_USER_ERROR: // 256 //
|
return 'E_USER_ERROR';
|
||||||
return 'E_USER_ERROR';
|
case E_USER_WARNING: // 512 //
|
||||||
case E_USER_WARNING: // 512 //
|
return 'E_USER_WARNING';
|
||||||
return 'E_USER_WARNING';
|
case E_USER_NOTICE: // 1024 //
|
||||||
case E_USER_NOTICE: // 1024 //
|
return 'E_USER_NOTICE';
|
||||||
return 'E_USER_NOTICE';
|
case E_STRICT: // 2048 //
|
||||||
case E_STRICT: // 2048 //
|
return 'E_STRICT';
|
||||||
return 'E_STRICT';
|
case E_RECOVERABLE_ERROR: // 4096 //
|
||||||
case E_RECOVERABLE_ERROR: // 4096 //
|
return 'E_RECOVERABLE_ERROR';
|
||||||
return 'E_RECOVERABLE_ERROR';
|
case E_DEPRECATED: // 8192 //
|
||||||
case E_DEPRECATED: // 8192 //
|
return 'E_DEPRECATED';
|
||||||
return 'E_DEPRECATED';
|
case E_USER_DEPRECATED: // 16384 //
|
||||||
case E_USER_DEPRECATED: // 16384 //
|
return 'E_USER_DEPRECATED';
|
||||||
return 'E_USER_DEPRECATED';
|
}
|
||||||
}
|
return "{$type}";
|
||||||
return "{$type}";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getExceptionTraceAsString($exception) {
|
function getExceptionTraceAsString(\Throwable $exception)
|
||||||
|
{
|
||||||
//https://gist.github.com/abtris/1437966
|
//https://gist.github.com/abtris/1437966
|
||||||
$rtn = "";
|
$rtn = "";
|
||||||
$count = 0;
|
$count = 0;
|
||||||
@@ -73,63 +74,127 @@ function getExceptionTraceAsString($exception) {
|
|||||||
$args[] = get_resource_type($arg);
|
$args[] = get_resource_type($arg);
|
||||||
} else {
|
} else {
|
||||||
$args[] = $arg;
|
$args[] = $arg;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$args = join(", ", $args);
|
$args = join(", ", $args);
|
||||||
}
|
}
|
||||||
$rtn[] = sprintf( "#%s %s:%s %s(%s)",
|
$rtn[] = sprintf(
|
||||||
$count,
|
"#%s %s:%s %s(%s)",
|
||||||
isset($frame['file']) ? $frame['file'] : 'unknown file',
|
$count,
|
||||||
isset($frame['line']) ? $frame['line'] : 'unknown line',
|
isset($frame['file']) ? $frame['file'] : 'unknown file',
|
||||||
(isset($frame['class'])) ? $frame['class'].$frame['type'].$frame['function'] : $frame['function'],
|
isset($frame['line']) ? $frame['line'] : 'unknown line',
|
||||||
$args );
|
(isset($frame['class'])) ? $frame['class'] . $frame['type'] . $frame['function'] : $frame['function'],
|
||||||
|
$args
|
||||||
|
);
|
||||||
$count++;
|
$count++;
|
||||||
}
|
}
|
||||||
return $rtn;
|
return $rtn;
|
||||||
}
|
}
|
||||||
|
|
||||||
function logError(string $err, string $errstr, array $trace){
|
function logError(string $err, string $errstr, string $errpath, array $trace)
|
||||||
$fdb = FileDB::db(ROOT.'/d_log/err_log.sqlite3', ROOT.'/f_install/sql/err_log.sql');
|
{
|
||||||
|
$fdb = FileDB::db(ROOT . '/d_log/err_log.sqlite3', ROOT . '/f_install/sql/err_log.sql');
|
||||||
$date = date("Ymd_His");
|
$date = date("Ymd_His");
|
||||||
|
|
||||||
$trace = array_map(function(string $text){
|
$err = str_replace(ROOT, '{ROOT}', $err);
|
||||||
|
$errstr = str_replace(ROOT, '{ROOT}', $errstr);
|
||||||
|
$errpath = str_replace(ROOT, '{ROOT}', $errpath);
|
||||||
|
$trace = array_map(function (string|array $text) {
|
||||||
|
if (is_array($text)) {
|
||||||
|
$text = Json::encode($text);
|
||||||
|
}
|
||||||
return str_replace(ROOT, '{ROOT}', $text);
|
return str_replace(ROOT, '{ROOT}', $text);
|
||||||
}, $trace);
|
}, $trace);
|
||||||
|
|
||||||
|
$owner = Util::get_client_ip();
|
||||||
|
$session = Session::getInstance();
|
||||||
|
if ($session->isLoggedIn(true)) {
|
||||||
|
$owner .= '(' . $session->getUserID() . ',' . $session->userName . ')';
|
||||||
|
}
|
||||||
|
|
||||||
$fdb->insert('err_log', [
|
$fdb->insert('err_log', [
|
||||||
'date'=>$date,
|
'date' => $date,
|
||||||
'err'=>$err,
|
'err' => $err,
|
||||||
'errstr'=>$errstr,
|
'errstr' => $errstr,
|
||||||
'trace'=>Json::encode($trace)
|
'errpath' => $errpath,
|
||||||
|
'trace' => Json::encode($trace),
|
||||||
|
'webuser' => $owner
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
function logErrorByCustomHandler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext){
|
function logErrorByCustomHandler(int $errno, string $errstr, string $errfile, int $errline)
|
||||||
|
{
|
||||||
if (!(error_reporting() & $errno)) {
|
if (!(error_reporting() & $errno)) {
|
||||||
// This error code is not included in error_reporting, so let it fall
|
// This error code is not included in error_reporting, so let it fall
|
||||||
// through to the standard PHP error handler
|
// through to the standard PHP error handler
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$e = new \Exception();
|
$e = new \Exception();
|
||||||
|
|
||||||
logError(
|
logError(
|
||||||
getFriendlyErrorType($errno),
|
getFriendlyErrorType($errno),
|
||||||
$errstr,
|
$errstr,
|
||||||
|
$errfile . ':' . $errline,
|
||||||
getExceptionTraceAsString($e)
|
getExceptionTraceAsString($e)
|
||||||
);
|
);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
set_error_handler("\sammo\logErrorByCustomHandler");
|
set_error_handler("\\sammo\\logErrorByCustomHandler");
|
||||||
|
|
||||||
|
|
||||||
function logExceptionByCustomHandler(\Throwable $e){
|
function logExceptionByCustomHandler(\Throwable $e, bool $withDie = true)
|
||||||
|
{
|
||||||
|
|
||||||
logError(
|
logError(
|
||||||
get_class($e),
|
get_class($e),
|
||||||
$e->getMessage(),
|
$e->getMessage(),
|
||||||
|
$e->getFile() . ':' . $e->getLine(),
|
||||||
getExceptionTraceAsString($e)
|
getExceptionTraceAsString($e)
|
||||||
);
|
);
|
||||||
|
|
||||||
echo $e->getTraceAsString();
|
if($withDie){
|
||||||
throw $e;
|
echo $e->getTraceAsString();
|
||||||
|
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set_exception_handler('\\sammo\\logExceptionByCustomHandler');
|
||||||
|
|
||||||
|
function checkForFatal()
|
||||||
|
{
|
||||||
|
$error = error_get_last();
|
||||||
|
if($error === null){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (($error["type"]??0) == E_ERROR) {
|
||||||
|
logErrorByCustomHandler($error["type"], $error["message"], $error["file"], $error["line"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
register_shutdown_function("\\sammo\\checkForFatal");
|
||||||
|
|
||||||
|
function getAPIExecutorClass($path)
|
||||||
|
{
|
||||||
|
|
||||||
|
static $basePath = __NAMESPACE__ . '\\API\\';
|
||||||
|
if (is_string($path)) {
|
||||||
|
} else if (is_array($path)) {
|
||||||
|
$path = join('\\', $path);
|
||||||
|
} else {
|
||||||
|
throw new \InvalidArgumentException("{$path}는 올바른 API 지시자가 아님");
|
||||||
|
}
|
||||||
|
|
||||||
|
$classPath = str_replace('/', '\\', $basePath . $path);
|
||||||
|
|
||||||
|
if (class_exists($classPath)) {
|
||||||
|
return $classPath;
|
||||||
|
}
|
||||||
|
throw new \InvalidArgumentException("{$path}는 올바른 API 경로가 아님");
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildAPIExecutorClass($type, string $rootPath, array $args): \sammo\BaseAPI
|
||||||
|
{
|
||||||
|
$class = getAPIExecutorClass($type);
|
||||||
|
return new $class($rootPath, $args);
|
||||||
}
|
}
|
||||||
set_exception_handler('\\sammo\\logExceptionByCustomHandler');
|
|
||||||
@@ -1,170 +1,192 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
require(__dir__.'/../vendor/autoload.php');
|
require(__DIR__ . '/../vendor/autoload.php');
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="ko">
|
<html lang="ko">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
|
<meta name="color-scheme" content="dark">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<title>설치</title>
|
<title>설치</title>
|
||||||
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
|
<?php /* NOTE: 설치 이전에는 ServConfig가 준비되어있지 않으므로 예외로 수동 지정 */ ?>
|
||||||
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
<?=WebUtil::printJS('../e_lib/jquery.validate.min.js')?>
|
<?= WebUtil::printJS('../dist_js/gateway/vendors.js') ?>
|
||||||
<?=WebUtil::printJS('../e_lib/sha512.min.js')?>
|
<?= WebUtil::printCSS('../dist_js/gateway/vendor.css') ?>
|
||||||
<?=WebUtil::printJS('../js/common.js')?>
|
<?= WebUtil::printJS('../dist_js/gateway/common_ts.js') ?>
|
||||||
<?=WebUtil::printJS('../js/install.js')?>
|
<?= WebUtil::printCSS('../dist_js/gateway/common_ts.css') ?>
|
||||||
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
|
<?= WebUtil::printJS('../dist_js/gateway/install.js') ?>
|
||||||
<?=WebUtil::printCSS('../css/install.css')?>
|
<?= WebUtil::printCSS('../dist_js/gateway/install.css') ?>
|
||||||
|
|
||||||
|
<?= WebUtil::printCSS('../css/install.css') ?>
|
||||||
|
|
||||||
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h1 class="row justify-content-md-center">삼국지 모의전투 HiDCHe 설치</h1>
|
<h1 class="row justify-content-lg-center">삼국지 모의전투 HiDCHe 설치</h1>
|
||||||
<div class="row justify-content-md-center">
|
<div class="row justify-content-lg-center">
|
||||||
|
|
||||||
<div class="col col-12 col-md-10 col-lg-7">
|
<div class="col col-12 col-lg-10 col-lg-7">
|
||||||
<div class="card" id="db_form_card" style="display:none">
|
<div class="card" id="db_form_card" style="display:none">
|
||||||
<h3 class="card-header">
|
<h3 class="card-header">
|
||||||
설치(DB 설정)
|
설치(DB 설정)
|
||||||
</h3>
|
</h3>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<form id="db_form" method="post" action="#">
|
<form id="db_form" method="post" action="#">
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label for="db_host" class="col-sm-4 col-form-label">DB호스트</label>
|
<label for="db_host" class="col-sm-4 col-form-label">DB호스트</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input type="text" class="form-control" name="db_host" id="db_host"
|
<input type="text" class="form-control" name="db_host" id="db_host" placeholder="호스트" value="localhost" />
|
||||||
placeholder="호스트" value="localhost" />
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label for="db_port" class="col-sm-4 col-form-label">DB포트</label>
|
<label for="db_port" class="col-sm-4 col-form-label">DB포트</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input type="text" class="form-control" name="db_port" id="db_port"
|
<input type="text" class="form-control" name="db_port" id="db_port" placeholder="접속 포트" value="3306" />
|
||||||
placeholder="접속 포트" value="3306" />
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group row">
|
|
||||||
<label for="db_id" class="col-sm-4 col-form-label">DB계정명</label>
|
|
||||||
<div class="col-sm-8">
|
|
||||||
<input type="text" class="form-control" name="db_id" id="db_id" placeholder="DB계정"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
<div class="form-group row">
|
||||||
<div class="form-group row">
|
<label for="db_id" class="col-sm-4 col-form-label">DB계정명</label>
|
||||||
<label for="db_pw" class="col-sm-4 col-form-label">DB비밀번호</label>
|
<div class="col-sm-8">
|
||||||
<div class="col-sm-8">
|
<input type="text" class="form-control" name="db_id" id="db_id" placeholder="DB계정" />
|
||||||
<input type="password" class="form-control" name="db_pw" id="db_pw"
|
</div>
|
||||||
placeholder="DB비밀번호"/>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group row">
|
|
||||||
<label for="db_name" class="col-sm-4 col-form-label">DB명</label>
|
|
||||||
<div class="col-sm-8">
|
|
||||||
<input type="text" class="form-control" name="db_name" id="db_name"
|
|
||||||
placeholder="DB명(예:sammo)"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label for="serv_host" class="col-sm-4 col-form-label">접속 경로</label>
|
<label for="db_pw" class="col-sm-4 col-form-label">DB비밀번호</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input type="text" class="form-control" name="serv_host" id="serv_host"
|
<input type="password" class="form-control" name="db_pw" id="db_pw" placeholder="DB비밀번호" />
|
||||||
placeholder="접속경로(예:http://www.example.com)"/>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label for="shared_icon_path" class="col-sm-4 col-form-label">공용 아이콘 주소</label>
|
<label for="db_name" class="col-sm-4 col-form-label">DB명</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input type="text" class="form-control" name="shared_icon_path" id="shared_icon_path"
|
<input type="text" class="form-control" name="db_name" id="db_name" placeholder="DB명(예:sammo)" />
|
||||||
placeholder="공용 아이콘 주소(웹 주소, 또는 접속 경로에 따른 상대 주소)"
|
</div>
|
||||||
value="../image/icons" />
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label for="game_image_path" class="col-sm-4 col-form-label">게임 이미지 주소</label>
|
<label for="serv_host" class="col-sm-4 col-form-label">접속 경로</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input type="text" class="form-control" name="game_image_path" id="game_image_path"
|
<input type="text" class="form-control" name="serv_host" id="serv_host" placeholder="접속경로(예:http://www.example.com)" />
|
||||||
placeholder="게임 이미지 주소(웹 주소, 또는 접속 경로에 따른 상대 주소)"
|
</div>
|
||||||
value="../image/game" />
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<div class="col-sm-4"></div>
|
<label for="shared_icon_path" class="col-sm-4 col-form-label">공용 아이콘 주소</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<button type="submit"
|
<input type="text" class="form-control" name="shared_icon_path" id="shared_icon_path" placeholder="공용 아이콘 주소(웹 주소, 또는 접속 경로에 따른 상대 주소)" value="../image/icons" />
|
||||||
class="btn btn-primary btn-lg btn-block login-button">설정 파일 생성</button>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="game_image_path" class="col-sm-4 col-form-label">게임 이미지 주소</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<input type="text" class="form-control" name="game_image_path" id="game_image_path" placeholder="게임 이미지 주소(웹 주소, 또는 접속 경로에 따른 상대 주소)" value="../image/game" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="image_request_key" class="col-sm-4 col-form-label">이미지 갱신 키</label>
|
||||||
|
<div class="input-group col-sm-8">
|
||||||
|
<input type="text" class="form-control" name="image_request_key" id="image_request_key" placeholder="이미지 서버의 hook/HashKey.php의 값과 동일하게" value="" />
|
||||||
|
<div class="input-group-text">
|
||||||
|
<button id="btn_random_generate_key" class="btn btn-secondary" type="button">랜덤 생성</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr style="width:100%; border-top: 1px solid lightgray;">
|
||||||
|
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="kakao_rest_key" class="col-sm-4 col-form-label">카카오 API Rest Key</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<input type="text" class="form-control" name="kakao_rest_key" id="kakao_rest_key" placeholder="카카오톡 API의 Rest Key" value="" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="kakao_admin_key" class="col-sm-4 col-form-label">카카오 API Admin Key</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<input type="text" class="form-control" name="kakao_admin_key" id="kakao_admin_key" placeholder="카카오톡 API의 Admin Key" value="" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group row">
|
||||||
|
<div class="col-sm-4"></div>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<button type="submit" class="btn btn-primary btn-lg btn-block login-button">설정 파일 생성</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</div>
|
||||||
|
<!--DB 폼 끝-->
|
||||||
|
|
||||||
|
<div class="card" id="admin_form_card" style="display:none">
|
||||||
|
<h3 class="card-header">
|
||||||
|
설치(관리자 생성)
|
||||||
|
</h3>
|
||||||
|
<div class="card-body">
|
||||||
|
<form id="admin_form" method="post" action="#">
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="username" class="col-sm-3 col-form-label">계정명</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" class="form-control" name="username" id="username" placeholder="계정명" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="password" class="col-sm-3 col-form-label">비밀번호</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="password" class="form-control" name="password" id="password" placeholder="비밀번호" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="confirm_password" class="col-sm-3 col-form-label">비밀번호 확인</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="password" class="form-control" name="confirm_password" id="confirm_password" placeholder="비밀번호 확인" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="nickname" class="col-sm-3 col-form-label">닉네임</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" class="form-control" name="nickname" id="nickname" placeholder="닉네임" value="운영자" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input type="hidden" id="global_salt" name="global_salt">
|
||||||
|
|
||||||
|
<div class="form-group row">
|
||||||
|
<div class="col-sm-3"></div>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<button type="submit" class="btn btn-primary btn-lg btn-block login-button">관리자 계정 생성</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--ADMIN 폼 끝-->
|
||||||
|
|
||||||
|
<!-- TODO: conf_kakao.php -->
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div><!--DB 폼 끝-->
|
|
||||||
|
|
||||||
<div class="card" id="admin_form_card" style="display:none">
|
|
||||||
<h3 class="card-header">
|
|
||||||
설치(관리자 생성)
|
|
||||||
</h3>
|
|
||||||
<div class="card-body">
|
|
||||||
<form id="admin_form" method="post" action="#">
|
|
||||||
<div class="form-group row">
|
|
||||||
<label for="username" class="col-sm-3 col-form-label">계정명</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<input type="text" class="form-control" name="username" id="username"
|
|
||||||
placeholder="계정명"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="form-group row">
|
|
||||||
<label for="password" class="col-sm-3 col-form-label">비밀번호</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<input type="password" class="form-control" name="password" id="password"
|
|
||||||
placeholder="비밀번호"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group row">
|
|
||||||
<label for="confirm_password" class="col-sm-3 col-form-label">비밀번호 확인</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<input type="password" class="form-control" name="confirm_password" id="confirm_password"
|
|
||||||
placeholder="비밀번호 확인"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group row">
|
|
||||||
<label for="nickname" class="col-sm-3 col-form-label">닉네임</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<input type="text" class="form-control" name="nickname" id="nickname"
|
|
||||||
placeholder="닉네임" value="운영자"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<input type="hidden" id="global_salt" name="global_salt">
|
|
||||||
|
|
||||||
<div class="form-group row">
|
|
||||||
<div class="col-sm-3"></div>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<button type="submit"
|
|
||||||
class="btn btn-primary btn-lg btn-block login-button">관리자 계정 생성</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div><!--ADMIN 폼 끝-->
|
|
||||||
|
|
||||||
<!-- TODO: conf_kakao.php -->
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
|
||||||
|
</html>
|
||||||
@@ -1,33 +1,34 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
require(__dir__.'/../vendor/autoload.php');
|
require(__DIR__ . '/../vendor/autoload.php');
|
||||||
|
|
||||||
session_start();
|
session_start();
|
||||||
session_destroy();
|
session_destroy();
|
||||||
|
|
||||||
$username = mb_strtolower(Util::getReq('username'), 'utf-8');
|
$username = mb_strtolower(Util::getPost('username'), 'utf-8');
|
||||||
$password = Util::getReq('password', 'string');
|
$password = Util::getPost('password', 'string');
|
||||||
$nickname = Util::getReq('nickname');
|
$nickname = Util::getPost('nickname');
|
||||||
|
|
||||||
if(!$username || !$password || !$nickname){
|
if (!$username || !$password || !$nickname) {
|
||||||
Json::die([
|
Json::die([
|
||||||
'result'=>false,
|
'result' => false,
|
||||||
'reason'=>'입력값이 설정되지 않았습니다.'
|
'reason' => '입력값이 설정되지 않았습니다.'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(strlen((string)$password)!=128){
|
if (strlen((string) $password) != 128) {
|
||||||
Json::die([
|
Json::die([
|
||||||
'result'=>false,
|
'result' => false,
|
||||||
'reason'=>'올바르지 않은 비밀번호 해시 포맷입니다.'
|
'reason' => '올바르지 않은 비밀번호 해시 포맷입니다.'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!class_exists('\\sammo\\RootDB')){
|
if (!class_exists('\\sammo\\RootDB')) {
|
||||||
Json::die([
|
Json::die([
|
||||||
'result'=>false,
|
'result' => false,
|
||||||
'reason'=>'DB 설정이 완료되지 않았습니다.'
|
'reason' => 'DB 설정이 완료되지 않았습니다.'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -37,42 +38,43 @@ $rootDB = RootDB::db();
|
|||||||
$rootDB->query('LOCK TABLES member WRITE, member_log WRITE');
|
$rootDB->query('LOCK TABLES member WRITE, member_log WRITE');
|
||||||
|
|
||||||
$memberCnt = $rootDB->queryFirstField('SELECT count(`NO`) from member');
|
$memberCnt = $rootDB->queryFirstField('SELECT count(`NO`) from member');
|
||||||
if($memberCnt > 0){
|
if ($memberCnt > 0) {
|
||||||
Json::die([
|
Json::die([
|
||||||
'result'=>'false',
|
'result' => 'false',
|
||||||
'reason'=>'이미 계정이 생성되어 있습니다'
|
'reason' => '이미 계정이 생성되어 있습니다'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$userSalt = bin2hex(random_bytes(8));
|
$userSalt = bin2hex(random_bytes(8));
|
||||||
$finalPassword = Util::hashPassword($userSalt, $password);
|
$finalPassword = Util::hashPassword($userSalt, $password);
|
||||||
$nowDate = TimeUtil::DatetimeNow();
|
$nowDate = TimeUtil::now();
|
||||||
|
|
||||||
$rootDB->insert('member',[
|
$rootDB->insert('member', [
|
||||||
'oauth_type' => 'NONE',
|
'oauth_type' => 'NONE',
|
||||||
'id' => $username,
|
'id' => $username,
|
||||||
'email' => null,
|
'email' => null,
|
||||||
|
'token_valid_until' => '2999-01-01 00:00:00',
|
||||||
'pw' => $finalPassword,
|
'pw' => $finalPassword,
|
||||||
'salt' => $userSalt,
|
'salt' => $userSalt,
|
||||||
'grade'=> 6,
|
'grade' => 7,
|
||||||
'name'=>$nickname,
|
'name' => $nickname,
|
||||||
'reg_date'=>$nowDate
|
'reg_date' => $nowDate
|
||||||
]);
|
]);
|
||||||
$userID = $rootDB->insertId();
|
$userID = $rootDB->insertId();
|
||||||
|
|
||||||
$rootDB->insert('member_log', [
|
$rootDB->insert('member_log', [
|
||||||
'member_no'=>$userID,
|
'member_no' => $userID,
|
||||||
'date'=>$nowDate,
|
'date' => $nowDate,
|
||||||
'action_type'=>'reg',
|
'action_type' => 'reg',
|
||||||
'action'=>Json::encode([
|
'action' => Json::encode([
|
||||||
'type'=>'none',
|
'type' => 'none',
|
||||||
'aux'=>'admin',
|
'aux' => 'admin',
|
||||||
'id'=>$username,
|
'id' => $username,
|
||||||
'name'=>$nickname
|
'name' => $nickname
|
||||||
])
|
])
|
||||||
]);
|
]);
|
||||||
|
|
||||||
Json::die([
|
Json::die([
|
||||||
'result'=>true,
|
'result' => true,
|
||||||
'reason'=>'success'
|
'reason' => 'success'
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -1,38 +1,37 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
require(__dir__.'/../vendor/autoload.php');
|
if(!file_exists(__DIR__ . '/../vendor/autoload.php')){
|
||||||
|
http_response_code(503);
|
||||||
|
die('not_ready');
|
||||||
|
}
|
||||||
|
|
||||||
if(!class_exists('\\sammo\\RootDB')){
|
require(__DIR__ . '/../vendor/autoload.php');
|
||||||
|
|
||||||
|
if (!class_exists('\\sammo\\RootDB')) {
|
||||||
Json::die([
|
Json::die([
|
||||||
'step'=>'config'
|
'step' => 'config'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$rootDB = RootDB::db();
|
$rootDB = RootDB::db();
|
||||||
|
|
||||||
$rootDB->throw_exception_on_nonsql_error = false;
|
$rootDB->addHook('run_failed', function ($params) {
|
||||||
$rootDB->nonsql_error_handler = function($params){
|
|
||||||
Json::die([
|
Json::die([
|
||||||
'step'=>'conn_fail'
|
'step' => 'sql_fail'
|
||||||
]);
|
]);
|
||||||
};
|
});
|
||||||
|
|
||||||
$rootDB->error_handler = function($params){
|
|
||||||
Json::die([
|
|
||||||
'step'=>'sql_fail'
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
|
|
||||||
$memberCnt = $rootDB->queryFirstField('SELECT count(`NO`) from member');
|
$memberCnt = $rootDB->queryFirstField('SELECT count(`NO`) from member');
|
||||||
if($memberCnt == 0){
|
if ($memberCnt == 0) {
|
||||||
Json::die([
|
Json::die([
|
||||||
'step'=>'admin',
|
'step' => 'admin',
|
||||||
'globalSalt'=>RootDB::getGlobalSalt()
|
'globalSalt' => RootDB::getGlobalSalt()
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Json::die([
|
Json::die([
|
||||||
'step'=>'done'
|
'step' => 'done'
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -1,276 +1,305 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace sammo;
|
|
||||||
|
namespace sammo;
|
||||||
require(__dir__.'/../vendor/autoload.php');
|
|
||||||
|
require(__DIR__ . '/../vendor/autoload.php');
|
||||||
$host = Util::getReq('db_host');
|
|
||||||
$port = Util::getReq('db_port', 'int');
|
$host = Util::getPost('db_host');
|
||||||
$username = Util::getReq('db_id');
|
$port = Util::getPost('db_port', 'int');
|
||||||
$password = Util::getReq('db_pw');
|
$username = Util::getPost('db_id');
|
||||||
$dbName = Util::getReq('db_name');
|
$password = Util::getPost('db_pw');
|
||||||
$servHost = Util::getReq('serv_host');
|
$dbName = Util::getPost('db_name');
|
||||||
$sharedIconPath = Util::getReq('shared_icon_path');
|
$servHost = Util::getPost('serv_host');
|
||||||
$gameImagePath = Util::getReq('game_image_path');
|
$sharedIconPath = Util::getPost('shared_icon_path');
|
||||||
|
$gameImagePath = Util::getPost('game_image_path');
|
||||||
if (!$host || !$port || !$username || !$password || !$dbName || !$servHost || !$sharedIconPath || !$gameImagePath) {
|
$imageRequestKey = Util::getPost('image_request_key');
|
||||||
Json::die([
|
|
||||||
'result'=>false,
|
$kakaoRESTKey = Util::getPost('kakao_rest_key', 'string', '');
|
||||||
'reason'=>'입력 값이 올바르지 않습니다'
|
$kakaoAdminKey = Util::getPost('kakao_admin_key', 'string', '');
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
if (!$host || !$port || !$username || !$password || !$dbName || !$servHost || !$sharedIconPath || !$gameImagePath) {
|
||||||
if (!filter_var($servHost, FILTER_VALIDATE_URL)) {
|
Json::die([
|
||||||
Json::die([
|
'result' => false,
|
||||||
'result'=>false,
|
'reason' => '입력 값이 올바르지 않습니다'
|
||||||
'reason'=>'접속 경로가 올바르지 않습니다.'
|
]);
|
||||||
]);
|
}
|
||||||
}
|
|
||||||
|
if (!filter_var($servHost, FILTER_VALIDATE_URL)) {
|
||||||
if (file_exists(ROOT.'/d_setting/RootDB.php') && is_dir(ROOT.'/d_setting/RootDB.php')) {
|
Json::die([
|
||||||
Json::die([
|
'result' => false,
|
||||||
'result'=>false,
|
'reason' => '접속 경로가 올바르지 않습니다.'
|
||||||
'reason'=>'d_setting/RootDB.php 가 디렉토리입니다'
|
]);
|
||||||
]);
|
}
|
||||||
}
|
|
||||||
|
if (file_exists(ROOT . '/d_setting/RootDB.php') && is_dir(ROOT . '/d_setting/RootDB.php')) {
|
||||||
if (class_exists('\\sammo\\RootDB')) {
|
Json::die([
|
||||||
Json::die([
|
'result' => false,
|
||||||
'result'=>false,
|
'reason' => 'd_setting/RootDB.php 가 디렉토리입니다'
|
||||||
'reason'=>'이미 RootDB.php 파일이 있습니다'
|
]);
|
||||||
]);
|
}
|
||||||
}
|
|
||||||
|
if (class_exists('\\sammo\\RootDB')) {
|
||||||
//파일 권한 검사
|
Json::die([
|
||||||
if (file_exists(AppConf::getUserIconPathFS()) && !is_dir(AppConf::getUserIconPathFS())) {
|
'result' => false,
|
||||||
Json::die([
|
'reason' => '이미 RootDB.php 파일이 있습니다'
|
||||||
'result'=>false,
|
]);
|
||||||
'reason'=>AppConf::$userIconPath.' 이 디렉토리가 아닙니다'
|
}
|
||||||
]);
|
|
||||||
}
|
//파일 권한 검사
|
||||||
|
if (file_exists(AppConf::getUserIconPathFS()) && !is_dir(AppConf::getUserIconPathFS())) {
|
||||||
if (file_exists(ROOT.'/d_log') && !is_dir(ROOT.'/d_log')) {
|
Json::die([
|
||||||
Json::die([
|
'result' => false,
|
||||||
'result'=>false,
|
'reason' => AppConf::$userIconPath . ' 이 디렉토리가 아닙니다'
|
||||||
'reason'=>'d_log 가 디렉토리가 아닙니다'
|
]);
|
||||||
]);
|
}
|
||||||
}
|
|
||||||
|
if (file_exists(ROOT . '/d_log') && !is_dir(ROOT . '/d_log')) {
|
||||||
if (file_exists(ROOT.'/d_shared') && !is_dir(ROOT.'/d_shared')) {
|
Json::die([
|
||||||
Json::die([
|
'result' => false,
|
||||||
'result'=>false,
|
'reason' => 'd_log 가 디렉토리가 아닙니다'
|
||||||
'reason'=>'d_shared 가 디렉토리가 아닙니다'
|
]);
|
||||||
]);
|
}
|
||||||
}
|
|
||||||
|
if (file_exists(ROOT . '/d_shared') && !is_dir(ROOT . '/d_shared')) {
|
||||||
if (file_exists(ROOT.'/d_setting') && !is_dir(ROOT.'/d_setting')) {
|
Json::die([
|
||||||
Json::die([
|
'result' => false,
|
||||||
'result'=>false,
|
'reason' => 'd_shared 가 디렉토리가 아닙니다'
|
||||||
'reason'=>'d_shared 가 디렉토리가 아닙니다'
|
]);
|
||||||
]);
|
}
|
||||||
}
|
|
||||||
|
if (file_exists(ROOT . '/d_setting') && !is_dir(ROOT . '/d_setting')) {
|
||||||
if (!file_exists(ROOT.'/d_log')
|
Json::die([
|
||||||
|| !file_exists(ROOT.'/d_shared')
|
'result' => false,
|
||||||
|| !file_exists(ROOT.'/d_setting')
|
'reason' => 'd_shared 가 디렉토리가 아닙니다'
|
||||||
|| !file_exists(AppConf::getUserIconPathFS())
|
]);
|
||||||
) {
|
}
|
||||||
if (!is_writable(ROOT)) {
|
|
||||||
Json::die([
|
if (
|
||||||
'result'=>false,
|
!file_exists(ROOT . '/d_log')
|
||||||
'reason'=>'하위 디렉토리 생성 권한이 없습니다'
|
|| !file_exists(ROOT . '/d_shared')
|
||||||
]);
|
|| !file_exists(ROOT . '/d_setting')
|
||||||
}
|
|| !file_exists(AppConf::getUserIconPathFS())
|
||||||
|
) {
|
||||||
//기본 파일 생성
|
if (!is_writable(ROOT)) {
|
||||||
if (!file_exists(AppConf::getUserIconPathFS())) {
|
Json::die([
|
||||||
mkdir(AppConf::getUserIconPathFS());
|
'result' => false,
|
||||||
}
|
'reason' => '하위 디렉토리 생성 권한이 없습니다'
|
||||||
|
]);
|
||||||
if (!file_exists(ROOT.'/d_log')) {
|
}
|
||||||
mkdir(ROOT.'/d_log');
|
|
||||||
}
|
//기본 파일 생성
|
||||||
|
if (!file_exists(AppConf::getUserIconPathFS())) {
|
||||||
if (!file_exists(ROOT.'/d_setting')) {
|
mkdir(AppConf::getUserIconPathFS(), 0775);
|
||||||
mkdir(ROOT.'/d_setting');
|
}
|
||||||
}
|
|
||||||
|
if (!file_exists(ROOT . '/d_log')) {
|
||||||
if (!file_exists(ROOT.'/d_shared')) {
|
mkdir(ROOT . '/d_log', 0775);
|
||||||
mkdir(ROOT.'/d_shared');
|
}
|
||||||
}
|
|
||||||
}
|
if (!file_exists(ROOT . '/d_setting')) {
|
||||||
|
mkdir(ROOT . '/d_setting', 0775);
|
||||||
|
}
|
||||||
if (!is_writable(AppConf::getUserIconPathFS())) {
|
|
||||||
Json::die([
|
if (!file_exists(ROOT . '/d_shared')) {
|
||||||
'result'=>false,
|
mkdir(ROOT . '/d_shared', 0775);
|
||||||
'reason'=>AppConf::$userIconPath.' 디렉토리의 쓰기 권한이 없습니다'
|
}
|
||||||
]);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (!is_writable(ROOT.'/d_log')) {
|
if (!is_writable(AppConf::getUserIconPathFS())) {
|
||||||
Json::die([
|
Json::die([
|
||||||
'result'=>false,
|
'result' => false,
|
||||||
'reason'=>'d_log 디렉토리의 쓰기 권한이 없습니다'
|
'reason' => AppConf::$userIconPath . ' 디렉토리의 쓰기 권한이 없습니다'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_writable(ROOT.'/d_shared')) {
|
if (!is_writable(ROOT . '/d_log')) {
|
||||||
Json::die([
|
Json::die([
|
||||||
'result'=>false,
|
'result' => false,
|
||||||
'reason'=>'d_shared 디렉토리의 쓰기 권한이 없습니다'
|
'reason' => 'd_log 디렉토리의 쓰기 권한이 없습니다'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_writable(ROOT.'/d_setting')) {
|
if (!is_writable(ROOT . '/d_shared')) {
|
||||||
Json::die([
|
Json::die([
|
||||||
'result'=>false,
|
'result' => false,
|
||||||
'reason'=>'d_setting 디렉토리의 쓰기 권한이 없습니다.'
|
'reason' => 'd_shared 디렉토리의 쓰기 권한이 없습니다'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!is_writable(ROOT . '/d_setting')) {
|
||||||
|
Json::die([
|
||||||
if (!file_exists(ROOT.'/d_log/.htaccess')) {
|
'result' => false,
|
||||||
@file_put_contents(ROOT.'/d_log/.htaccess', 'Deny from all');
|
'reason' => 'd_setting 디렉토리의 쓰기 권한이 없습니다.'
|
||||||
}
|
]);
|
||||||
|
}
|
||||||
if (!file_exists(ROOT.'/d_setting/.htaccess')) {
|
|
||||||
@file_put_contents(ROOT.'/d_setting/.htaccess', 'Deny from all');
|
|
||||||
}
|
|
||||||
|
if (!file_exists(ROOT . '/d_log/.htaccess')) {
|
||||||
//DB 접근 권한 검사
|
@file_put_contents(ROOT . '/d_log/.htaccess', 'Deny from all');
|
||||||
|
}
|
||||||
$rootDB = new \MeekroDB($host, $username, $password, $dbName, $port, 'utf8mb4');
|
|
||||||
$rootDB->connect_options[MYSQLI_OPT_INT_AND_FLOAT_NATIVE] = true;
|
if (!file_exists(ROOT . '/d_setting/.htaccess')) {
|
||||||
|
@file_put_contents(ROOT . '/d_setting/.htaccess', 'Deny from all');
|
||||||
$rootDB->throw_exception_on_nonsql_error = false;
|
}
|
||||||
$rootDB->nonsql_error_handler = function ($params) {
|
|
||||||
Json::die([
|
//DB 접근 권한 검사
|
||||||
'result'=>false,
|
|
||||||
'reason'=>'DB 접속에 실패했습니다.'
|
$rootDB = new \MeekroDB($host, $username, $password, $dbName, $port, 'utf8mb4');
|
||||||
]);
|
$rootDB->connect_options[MYSQLI_OPT_INT_AND_FLOAT_NATIVE] = true;
|
||||||
};
|
|
||||||
|
$rootDB->addHook('run_failed', function ($args) {
|
||||||
$rootDB->error_handler = function ($params) {
|
Json::die([
|
||||||
Json::die([
|
'result' => false,
|
||||||
'result'=>false,
|
'reason' => '에러.'. $args['error']
|
||||||
'reason'=>'SQL을 제대로 실행하지 못했습니다. DB상태를 확인해 주세요.'
|
]);
|
||||||
]);
|
});
|
||||||
};
|
|
||||||
|
$mysqli_obj = $rootDB->get(); //로그인에 실패할 경우 자동으로 dbConnFail()이 실행됨.
|
||||||
$mysqli_obj = $rootDB->get(); //로그인에 실패할 경우 자동으로 dbConnFail()이 실행됨.
|
|
||||||
|
if ($mysqli_obj->multi_query(file_get_contents(__DIR__ . '/sql/common_schema.sql'))) {
|
||||||
if ($mysqli_obj->multi_query(file_get_contents(__dir__.'/sql/common_schema.sql'))) {
|
while (true) {
|
||||||
while (true) {
|
if (!$mysqli_obj->more_results()) {
|
||||||
if (!$mysqli_obj->more_results()) {
|
break;
|
||||||
break;
|
}
|
||||||
}
|
if (!$mysqli_obj->next_result()) {
|
||||||
if (!$mysqli_obj->next_result()) {
|
break;
|
||||||
break;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
$rootDB->insert('system', array(
|
||||||
$rootDB->insert('system', array(
|
'REG' => 'N',
|
||||||
'REG' => 'N',
|
'LOGIN' => 'N',
|
||||||
'LOGIN' => 'N',
|
'CRT_DATE' => TimeUtil::now(),
|
||||||
'CRT_DATE' => TimeUtil::DatetimeNow(),
|
'MDF_DATE' => TimeUtil::now()
|
||||||
'MDF_DATE' => TimeUtil::DatetimeNow()
|
));
|
||||||
));
|
|
||||||
|
$globalSalt = bin2hex(random_bytes(16));
|
||||||
$globalSalt = bin2hex(random_bytes(16));
|
|
||||||
|
'@phan-var-force string $servHost';
|
||||||
'@phan-var-force string $servHost';
|
'@phan-var-force string $sharedIconPath';
|
||||||
'@phan-var-force string $sharedIconPath';
|
'@phan-var-force string $gameImagePath';
|
||||||
'@phan-var-force string $gameImagePath';
|
|
||||||
|
$sharedIconPath = WebUtil::resolveRelativePath($sharedIconPath, $servHost);
|
||||||
$sharedIconPath = WebUtil::resolveRelativePath($sharedIconPath, $servHost);
|
$gameImagePath = WebUtil::resolveRelativePath($gameImagePath, $servHost);
|
||||||
$gameImagePath = WebUtil::resolveRelativePath($gameImagePath, $servHost);
|
$imageRequestPath = WebUtil::resolveRelativePath($gameImagePath . '/../hook/git_pull.php', $servHost);
|
||||||
|
$imageKeyInstallPath = WebUtil::resolveRelativePath($gameImagePath . '/../hook/InstallKey.php', $servHost);
|
||||||
$result = Util::generateFileUsingSimpleTemplate(
|
|
||||||
__dir__.'/templates/ServConfig.orig.php',
|
$result = Util::generateFileUsingSimpleTemplate(
|
||||||
ROOT.'/d_setting/ServConfig.php',
|
__DIR__ . '/templates/ServConfig.orig.php',
|
||||||
[
|
ROOT . '/d_setting/ServConfig.php',
|
||||||
'serverBasePath'=>$servHost,
|
[
|
||||||
'sharedIconPath'=>$sharedIconPath,
|
'serverBasePath' => $servHost,
|
||||||
'gameImagePath'=>$gameImagePath
|
'sharedIconPath' => $sharedIconPath,
|
||||||
],
|
'gameImagePath' => $gameImagePath,
|
||||||
true
|
'imageRequestPath' => $imageRequestPath,
|
||||||
);
|
'imageRequestKey' => $imageRequestKey,
|
||||||
|
'serverList' => [
|
||||||
if ($result !== true) {
|
['che', '체', 'white'],
|
||||||
Json::die([
|
['kwe', '퀘', 'yellow'],
|
||||||
'result'=>false,
|
['pwe', '풰', 'orange'],
|
||||||
'reason'=>$result
|
['twe', '퉤', 'magenta'],
|
||||||
]);
|
['nya', '냐', '#e67e22'],
|
||||||
}
|
['pya', '퍄', '#9b59b6']
|
||||||
|
]
|
||||||
$result = Util::generateFileUsingSimpleTemplate(
|
],
|
||||||
__dir__.'/templates/common_path.orig.js',
|
true
|
||||||
ROOT.'/d_shared/common_path.js',
|
);
|
||||||
[
|
|
||||||
'serverBasePath'=>$servHost,
|
if ($imageRequestKey) {
|
||||||
'sharedIconPath'=>$sharedIconPath,
|
@file_get_contents($imageKeyInstallPath . '?key=' . $imageRequestKey);
|
||||||
'gameImagePath'=>$gameImagePath
|
}
|
||||||
],
|
|
||||||
true
|
if ($result !== true) {
|
||||||
);
|
Json::die([
|
||||||
|
'result' => false,
|
||||||
$result = Util::generateFileUsingSimpleTemplate(
|
'reason' => $result
|
||||||
__dir__.'/templates/menu.orig.js',
|
]);
|
||||||
ROOT.'/d_shared/menu.js',
|
}
|
||||||
[],
|
|
||||||
true
|
$result = Util::generateFileUsingSimpleTemplate(
|
||||||
);
|
__DIR__ . '/templates/common_path.orig.js',
|
||||||
|
ROOT . '/d_shared/common_path.js',
|
||||||
if ($result !== true) {
|
[
|
||||||
Json::die([
|
'serverBasePath' => $servHost,
|
||||||
'result'=>false,
|
'sharedIconPath' => $sharedIconPath,
|
||||||
'reason'=>$result
|
'gameImagePath' => $gameImagePath
|
||||||
]);
|
],
|
||||||
}
|
true
|
||||||
|
);
|
||||||
|
|
||||||
$result = Util::generateFileUsingSimpleTemplate(
|
$result = Util::generateFileUsingSimpleTemplate(
|
||||||
__dir__.'/templates/common.orig.css',
|
__DIR__ . '/templates/menu.orig.json',
|
||||||
ROOT.'/d_shared/common.css',
|
ROOT . '/d_shared/menu.json',
|
||||||
[
|
[],
|
||||||
'serverBasePath'=>$servHost,
|
true
|
||||||
'sharedIconPath'=>$sharedIconPath,
|
);
|
||||||
'gameImagePath'=>$gameImagePath
|
|
||||||
],
|
if ($result !== true) {
|
||||||
true
|
Json::die([
|
||||||
);
|
'result' => false,
|
||||||
|
'reason' => $result
|
||||||
if ($result !== true) {
|
]);
|
||||||
Json::die([
|
}
|
||||||
'result'=>false,
|
|
||||||
'reason'=>$result
|
|
||||||
]);
|
$result = Util::generateFileUsingSimpleTemplate(
|
||||||
}
|
__DIR__ . '/templates/common.orig.css',
|
||||||
|
ROOT . '/d_shared/common.css',
|
||||||
|
[
|
||||||
$result = Util::generateFileUsingSimpleTemplate(
|
'serverBasePath' => $servHost,
|
||||||
__dir__.'/templates/RootDB.orig.php',
|
'sharedIconPath' => $sharedIconPath,
|
||||||
ROOT.'/d_setting/RootDB.php',
|
'gameImagePath' => $gameImagePath
|
||||||
[
|
],
|
||||||
'host'=>$host,
|
true
|
||||||
'user'=>$username,
|
);
|
||||||
'password'=>$password,
|
|
||||||
'dbName'=>$dbName,
|
if ($result !== true) {
|
||||||
'port'=>$port,
|
Json::die([
|
||||||
'globalSalt'=>$globalSalt,
|
'result' => false,
|
||||||
]
|
'reason' => $result
|
||||||
);
|
]);
|
||||||
|
}
|
||||||
if ($result !== true) {
|
|
||||||
Json::die([
|
|
||||||
'result'=>false,
|
$result = Util::generateFileUsingSimpleTemplate(
|
||||||
'reason'=>$result
|
__DIR__ . '/templates/RootDB.orig.php',
|
||||||
]);
|
ROOT . '/d_setting/RootDB.php',
|
||||||
}
|
[
|
||||||
|
'host' => $host,
|
||||||
Json::die([
|
'user' => $username,
|
||||||
'result'=>true,
|
'password' => $password,
|
||||||
'reason'=>'success'
|
'dbName' => $dbName,
|
||||||
]);
|
'port' => $port,
|
||||||
|
'globalSalt' => $globalSalt,
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
$kakaoRedirectURI = WebUtil::resolveRelativePath('oauth_kakao/oauth.php', $servHost . '/');
|
||||||
|
|
||||||
|
Util::generateFileUsingSimpleTemplate(
|
||||||
|
__DIR__ . '/templates/KakaoKey.orig.php',
|
||||||
|
ROOT . '/d_setting/KakaoKey.php',
|
||||||
|
[
|
||||||
|
'REST_API_KEY' => $kakaoRESTKey,
|
||||||
|
'ADMIN_KEY' => $kakaoAdminKey,
|
||||||
|
'REDIRECT_URI' => $kakaoRedirectURI
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($result !== true) {
|
||||||
|
Json::die([
|
||||||
|
'result' => false,
|
||||||
|
'reason' => $result
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
Json::die([
|
||||||
|
'result' => true,
|
||||||
|
'reason' => 'success',
|
||||||
|
'globalSalt' => $globalSalt
|
||||||
|
]);
|
||||||
|
|||||||
@@ -0,0 +1,114 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace sammo;
|
||||||
|
|
||||||
|
require(__DIR__ . '/../vendor/autoload.php');
|
||||||
|
|
||||||
|
$session = Session::requireLogin([])->setReadOnly();
|
||||||
|
if ($session->userGrade < 6) {
|
||||||
|
Json::die([
|
||||||
|
'result' => false,
|
||||||
|
'reason' => '관리자 아님'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$servHost = Util::getPost('serv_host');
|
||||||
|
$sharedIconPath = Util::getPost('shared_icon_path');
|
||||||
|
$gameImagePath = Util::getPost('game_image_path');
|
||||||
|
|
||||||
|
if ($servHost) {
|
||||||
|
if (!$sharedIconPath || $gameImagePath) {
|
||||||
|
Json::die([
|
||||||
|
'result' => false,
|
||||||
|
'reason' => 'serv_host가 지정된 경우, sharedIconPath와 gameImagePath가 모두 지정되어야합니다.'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$sharedIconPath = WebUtil::resolveRelativePath($sharedIconPath, $servHost);
|
||||||
|
$gameImagePath = WebUtil::resolveRelativePath($gameImagePath, $servHost);
|
||||||
|
|
||||||
|
$result = Util::generateFileUsingSimpleTemplate(
|
||||||
|
__DIR__ . '/templates/ServConfig.orig.php',
|
||||||
|
ROOT . '/d_setting/ServConfig.php',
|
||||||
|
[
|
||||||
|
'serverBasePath' => $servHost,
|
||||||
|
'sharedIconPath' => $sharedIconPath,
|
||||||
|
'gameImagePath' => $gameImagePath
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($result !== true) {
|
||||||
|
Json::die([
|
||||||
|
'result' => false,
|
||||||
|
'reason' => $result
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
} else if ($sharedIconPath || $gameImagePath) {
|
||||||
|
$servHost = ServConfig::$serverWebPath;
|
||||||
|
if ($sharedIconPath) {
|
||||||
|
$sharedIconPath = WebUtil::resolveRelativePath($sharedIconPath, $servHost);
|
||||||
|
} else {
|
||||||
|
$sharedIconPath = ServConfig::$sharedIconPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($gameImagePath) {
|
||||||
|
$gameImagePath = WebUtil::resolveRelativePath($gameImagePath, $servHost);
|
||||||
|
} else {
|
||||||
|
$gameImagePath = ServConfig::$gameImagePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = Util::generateFileUsingSimpleTemplate(
|
||||||
|
__DIR__ . '/templates/ServConfig.orig.php',
|
||||||
|
ROOT . '/d_setting/ServConfig.php',
|
||||||
|
[
|
||||||
|
'serverBasePath' => $servHost,
|
||||||
|
'sharedIconPath' => $sharedIconPath,
|
||||||
|
'gameImagePath' => $gameImagePath
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($result !== true) {
|
||||||
|
Json::die([
|
||||||
|
'result' => false,
|
||||||
|
'reason' => $result
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$servHost = ServConfig::$serverWebPath;
|
||||||
|
$sharedIconPath = ServConfig::$sharedIconPath;
|
||||||
|
$gameImagePath = ServConfig::$gameImagePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$result = Util::generateFileUsingSimpleTemplate(
|
||||||
|
__DIR__ . '/templates/common_path.orig.js',
|
||||||
|
ROOT . '/d_shared/common_path.js',
|
||||||
|
[
|
||||||
|
'serverBasePath' => $servHost,
|
||||||
|
'sharedIconPath' => $sharedIconPath,
|
||||||
|
'gameImagePath' => $gameImagePath
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
$result = Util::generateFileUsingSimpleTemplate(
|
||||||
|
__DIR__ . '/templates/common.orig.css',
|
||||||
|
ROOT . '/d_shared/common.css',
|
||||||
|
[
|
||||||
|
'serverBasePath' => $servHost,
|
||||||
|
'sharedIconPath' => $sharedIconPath,
|
||||||
|
'gameImagePath' => $gameImagePath
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($result !== true) {
|
||||||
|
Json::die([
|
||||||
|
'result' => false,
|
||||||
|
'reason' => $result
|
||||||
|
]);
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
CREATE TABLE IF NOT EXISTS "api_log" (
|
||||||
|
"id" INTEGER NOT NULL,
|
||||||
|
"user_id" INTEGER NOT NULL,
|
||||||
|
"ip" TEXT NOT NULL,
|
||||||
|
"date" TEXT NOT NULL,
|
||||||
|
"path" TEXT NOT NULL,
|
||||||
|
"arg" TEXT,
|
||||||
|
"aux" TEXT,
|
||||||
|
PRIMARY KEY("id" AUTOINCREMENT)
|
||||||
|
);
|
||||||
|
CREATE INDEX IF NOT EXISTS "by_date" ON "api_log" (
|
||||||
|
"date" DESC
|
||||||
|
);
|
||||||
|
CREATE INDEX IF NOT EXISTS "by_user" ON "api_log" (
|
||||||
|
"user_id" ASC,
|
||||||
|
"date" DESC
|
||||||
|
);
|
||||||
@@ -14,7 +14,7 @@ CREATE TABLE `system` (
|
|||||||
`MDF_DATE` DATETIME NULL DEFAULT NULL,
|
`MDF_DATE` DATETIME NULL DEFAULT NULL,
|
||||||
PRIMARY KEY (`NO`)
|
PRIMARY KEY (`NO`)
|
||||||
)
|
)
|
||||||
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
ENGINE=Aria DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
-- 회원 테이블
|
-- 회원 테이블
|
||||||
CREATE TABLE `member` (
|
CREATE TABLE `member` (
|
||||||
@@ -31,7 +31,8 @@ CREATE TABLE `member` (
|
|||||||
`NAME` VARCHAR(64) NOT NULL,
|
`NAME` VARCHAR(64) NOT NULL,
|
||||||
`PICTURE` VARCHAR(64) NULL DEFAULT 'default.jpg',
|
`PICTURE` VARCHAR(64) NULL DEFAULT 'default.jpg',
|
||||||
`IMGSVR` INT(1) NULL DEFAULT '0',
|
`IMGSVR` INT(1) NULL DEFAULT '0',
|
||||||
`acl` TEXT NOT NULL DEFAULT '{}' COMMENT 'json',
|
`acl` TEXT NOT NULL DEFAULT '{}' COLLATE 'utf8mb4_bin',
|
||||||
|
`penalty` TEXT NOT NULL DEFAULT '{}' COLLATE 'utf8mb4_bin',
|
||||||
`GRADE` INT(1) NULL DEFAULT '1',
|
`GRADE` INT(1) NULL DEFAULT '1',
|
||||||
`REG_NUM` INT(3) NULL DEFAULT '0',
|
`REG_NUM` INT(3) NULL DEFAULT '0',
|
||||||
`REG_DATE` DATETIME NOT NULL,
|
`REG_DATE` DATETIME NOT NULL,
|
||||||
@@ -42,9 +43,12 @@ CREATE TABLE `member` (
|
|||||||
UNIQUE INDEX `ID` (`ID`),
|
UNIQUE INDEX `ID` (`ID`),
|
||||||
UNIQUE INDEX `EMAIL` (`EMAIL`),
|
UNIQUE INDEX `EMAIL` (`EMAIL`),
|
||||||
UNIQUE INDEX `kauth_id` (`oauth_id`),
|
UNIQUE INDEX `kauth_id` (`oauth_id`),
|
||||||
INDEX `delete_after` (`delete_after`)
|
INDEX `delete_after` (`delete_after`),
|
||||||
|
CONSTRAINT `json1` CHECK (json_valid(`acl`)),
|
||||||
|
CONSTRAINT `json2` CHECK (json_valid(`penalty`))
|
||||||
)
|
)
|
||||||
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
COLLATE='utf8mb4_general_ci'
|
||||||
|
ENGINE=Aria;
|
||||||
|
|
||||||
-- 로그인 로그 테이블
|
-- 로그인 로그 테이블
|
||||||
CREATE TABLE `member_log` (
|
CREATE TABLE `member_log` (
|
||||||
@@ -52,12 +56,14 @@ CREATE TABLE `member_log` (
|
|||||||
`member_no` INT(11) NOT NULL,
|
`member_no` INT(11) NOT NULL,
|
||||||
`date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
`date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
`action_type` ENUM('reg','try_login','login','logout','oauth','change_pw','make_general','access_server','delete') NOT NULL,
|
`action_type` ENUM('reg','try_login','login','logout','oauth','change_pw','make_general','access_server','delete') NOT NULL,
|
||||||
`action` TEXT NULL DEFAULT NULL COMMENT 'JSON',
|
`action` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_bin',
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
INDEX `action` (`member_no`, `action_type`, `date`),
|
INDEX `action` (`member_no`, `action_type`, `date`),
|
||||||
INDEX `member` (`member_no`, `date`)
|
INDEX `member` (`member_no`, `date`),
|
||||||
|
CONSTRAINT `json` CHECK (json_valid(`action`))
|
||||||
)
|
)
|
||||||
ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
|
COLLATE='utf8mb4_general_ci'
|
||||||
|
ENGINE=Aria;
|
||||||
|
|
||||||
###################
|
###################
|
||||||
# KV storage
|
# KV storage
|
||||||
@@ -68,7 +74,32 @@ CREATE TABLE if not exists `storage` (
|
|||||||
`key` VARCHAR(40) NOT NULL,
|
`key` VARCHAR(40) NOT NULL,
|
||||||
`value` TEXT NOT NULL,
|
`value` TEXT NOT NULL,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE INDEX `key` (`namespace`, `key`)
|
UNIQUE INDEX `key` (`namespace`, `key`),
|
||||||
|
CONSTRAINT `json` CHECK (json_valid(`value`))
|
||||||
|
)
|
||||||
|
COLLATE='utf8mb4_bin'
|
||||||
|
ENGINE=Aria;
|
||||||
|
|
||||||
|
CREATE TABLE `login_token` (
|
||||||
|
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`user_id` INT(11) NOT NULL,
|
||||||
|
`base_token` VARCHAR(20) NOT NULL COLLATE 'utf8mb4_general_ci',
|
||||||
|
`reg_ip` VARCHAR(40) NOT NULL COLLATE 'utf8mb4_general_ci',
|
||||||
|
`reg_date` DATETIME NOT NULL,
|
||||||
|
`expire_date` DATETIME NOT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
UNIQUE INDEX `by_token` (`base_token`),
|
||||||
|
INDEX `by_date` (`user_id`, `expire_date`)
|
||||||
)
|
)
|
||||||
COLLATE='utf8mb4_general_ci'
|
COLLATE='utf8mb4_general_ci'
|
||||||
ENGINE=MyISAM
|
ENGINE=Aria;
|
||||||
|
|
||||||
|
CREATE TABLE `banned_member` (
|
||||||
|
`no` INT NOT NULL AUTO_INCREMENT,
|
||||||
|
`hashed_email` VARCHAR(128) NOT NULL COLLATE 'utf8mb4_general_ci' COMMENT 'SHA512(salt | email | salt )',
|
||||||
|
`info` TEXT NULL COLLATE 'utf8mb4_general_ci' COMMENT '부가정보',
|
||||||
|
PRIMARY KEY (`no`),
|
||||||
|
UNIQUE INDEX `email` (`hashed_email`(128))
|
||||||
|
)
|
||||||
|
COLLATE='utf8mb4_general_ci'
|
||||||
|
ENGINE = Aria;
|
||||||
@@ -3,7 +3,9 @@ CREATE TABLE IF NOT EXISTS `err_log` (
|
|||||||
`date` TEXT NOT NULL,
|
`date` TEXT NOT NULL,
|
||||||
`err` TEXT NOT NULL,
|
`err` TEXT NOT NULL,
|
||||||
`errstr` TEXT NOT NULL,
|
`errstr` TEXT NOT NULL,
|
||||||
`trace` TEXT NOT NULL
|
`errpath` TEXT NOT NULL,
|
||||||
|
`trace` TEXT NOT NULL,
|
||||||
|
`webuser` TEXT NULL
|
||||||
);
|
);
|
||||||
CREATE INDEX IF NOT EXISTS `date` ON `err_log` (
|
CREATE INDEX IF NOT EXISTS `date` ON `err_log` (
|
||||||
`date` DESC
|
`date` DESC
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace kakao;
|
namespace kakao;
|
||||||
|
|
||||||
|
// @suppress PhanRedefineClass
|
||||||
class KakaoKey{
|
class KakaoKey{
|
||||||
const REST_KEY = '_tK_REST_API_KEY_';
|
const REST_KEY = '_tK_REST_API_KEY_';
|
||||||
const ADMIN_KEY = '_tK_ADMIN_KEY_';
|
const ADMIN_KEY = '_tK_ADMIN_KEY_';
|
||||||
|
|||||||
@@ -1,9 +1,16 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
|
//https://hub.packtpub.com/eloquent-without-laravel/
|
||||||
|
use Illuminate\Database\Capsule\Manager as Capsule;
|
||||||
|
use Illuminate\Events\Dispatcher;
|
||||||
|
use Illuminate\Container\Container;
|
||||||
|
|
||||||
class RootDB
|
class RootDB
|
||||||
{
|
{
|
||||||
private static $uDB = null;
|
private static $uDB = null;
|
||||||
|
private static ?Capsule $uIlluminate = null;
|
||||||
|
|
||||||
private static $host = '_tK_host_';
|
private static $host = '_tK_host_';
|
||||||
private static $user = '_tK_user_';
|
private static $user = '_tK_user_';
|
||||||
@@ -11,6 +18,8 @@ class RootDB
|
|||||||
private static $dbName = '_tK_dbName_';
|
private static $dbName = '_tK_dbName_';
|
||||||
private static $port = _tK_port_;
|
private static $port = _tK_port_;
|
||||||
private static $encoding = 'utf8mb4';
|
private static $encoding = 'utf8mb4';
|
||||||
|
private static $collation = 'utf8mb4_general_ci';
|
||||||
|
|
||||||
|
|
||||||
private static $globalSalt = '_tK_globalSalt_';
|
private static $globalSalt = '_tK_globalSalt_';
|
||||||
|
|
||||||
@@ -18,6 +27,29 @@ class RootDB
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function illuminate(): Capsule
|
||||||
|
{
|
||||||
|
if(self::$uIlluminate !== null){
|
||||||
|
return self::$uIlluminate;
|
||||||
|
}
|
||||||
|
$capsule = new Capsule;
|
||||||
|
|
||||||
|
$capsule->addConnection([
|
||||||
|
'driver' => 'mysql',
|
||||||
|
'host' => self::$host,
|
||||||
|
'database' => self::$dbName,
|
||||||
|
'username' => self::$user,
|
||||||
|
'password' => self::$password,
|
||||||
|
'charset' => self::$encoding,
|
||||||
|
'collation' => self::$collation,
|
||||||
|
], 'root');
|
||||||
|
|
||||||
|
$capsule->setEventDispatcher(new Dispatcher(new Container));
|
||||||
|
$capsule->bootEloquent();
|
||||||
|
self::$uIlluminate = $capsule;
|
||||||
|
return $capsule;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DB 객체 생성
|
* DB 객체 생성
|
||||||
*
|
*
|
||||||
@@ -29,10 +61,6 @@ class RootDB
|
|||||||
if (self::$uDB === null) {
|
if (self::$uDB === null) {
|
||||||
self::$uDB = new \MeekroDB(self::$host, self::$user, self::$password, self::$dbName, self::$port, self::$encoding);
|
self::$uDB = new \MeekroDB(self::$host, self::$user, self::$password, self::$dbName, self::$port, self::$encoding);
|
||||||
self::$uDB->connect_options[MYSQLI_OPT_INT_AND_FLOAT_NATIVE] = true;
|
self::$uDB->connect_options[MYSQLI_OPT_INT_AND_FLOAT_NATIVE] = true;
|
||||||
|
|
||||||
self::$uDB->error_handler= function(){};
|
|
||||||
self::$uDB->throw_exception_on_error = true;
|
|
||||||
self::$uDB->throw_exception_on_nonsql_error = true;
|
|
||||||
}
|
}
|
||||||
return self::$uDB;
|
return self::$uDB;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,45 +1,74 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace sammo;
|
|
||||||
|
namespace sammo;
|
||||||
class ServConfig
|
|
||||||
{
|
class ServConfig
|
||||||
private function __construct()
|
{
|
||||||
{
|
private function __construct()
|
||||||
}
|
{
|
||||||
|
}
|
||||||
public static $serverWebPath = '_tK_serverBasePath_';
|
|
||||||
public static $sharedIconPath = '_tK_sharedIconPath_';
|
public static $serverWebPath = '_tK_serverBasePath_';
|
||||||
public static $gameImagePath = "_tK_gameImagePath_";
|
public static $sharedIconPath = '_tK_sharedIconPath_';
|
||||||
|
public static $gameImagePath = "_tK_gameImagePath_";
|
||||||
public static function getSharedIconPath(string $filepath='') : string
|
public static $imageRequestPath = "_tK_imageRequestPath_";
|
||||||
{
|
public static $imageRequestKey = '_tK_imageRequestKey_';
|
||||||
if($filepath){
|
private static $serverList = null;
|
||||||
return static::$sharedIconPath."/{$filepath}";
|
|
||||||
}
|
public static function getSharedIconPath(string $filepath = ''): string
|
||||||
return static::$sharedIconPath;
|
{
|
||||||
}
|
if ($filepath) {
|
||||||
|
return static::$sharedIconPath . "/{$filepath}";
|
||||||
public static function getUserIconPath(string $filepath='') : string
|
}
|
||||||
{
|
return static::$sharedIconPath;
|
||||||
return AppConf::getUserIconPathWeb($filepath);
|
}
|
||||||
}
|
|
||||||
|
public static function getUserIconPath(string $filepath = ''): string
|
||||||
public static function getGameImagePath(string $filepath='') : string
|
{
|
||||||
{
|
return AppConf::getUserIconPathWeb($filepath);
|
||||||
if($filepath){
|
}
|
||||||
return static::$gameImagePath."/{$filepath}";
|
|
||||||
}
|
public static function getGameImagePath(string $filepath = ''): string
|
||||||
return static::$gameImagePath;
|
{
|
||||||
}
|
if ($filepath) {
|
||||||
|
return static::$gameImagePath . "/{$filepath}";
|
||||||
|
}
|
||||||
/**
|
return static::$gameImagePath;
|
||||||
* 서버 주소 반환. 서버의 경로가 하부 디렉토리인 경우에 하부 디렉토리까지 포함
|
}
|
||||||
*
|
|
||||||
* @return string
|
public static function getImagePullURI(): string
|
||||||
*/
|
{
|
||||||
public static function getServerBasepath() : string
|
$now = time();
|
||||||
{
|
$req_hash = Util::hashPassword(sprintf("%016x", $now), static::$imageRequestKey);
|
||||||
return self::$serverWebPath;
|
return static::$imageRequestPath . "?req={$req_hash}&time={$now}";
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* 서버 설정 반환
|
||||||
|
*
|
||||||
|
* @return \sammo\Setting[]
|
||||||
|
*/
|
||||||
|
public static function getServerList(): array{
|
||||||
|
$servKeyList = [/*_tK_serverList_*/];
|
||||||
|
$servKeyList[] = ['hwe', '훼', 'red'];
|
||||||
|
|
||||||
|
if (self::$serverList === null) {
|
||||||
|
self::$serverList = [];
|
||||||
|
foreach($servKeyList as [$servKey, $servNick, $servColor]){
|
||||||
|
self::$serverList[$servKey] = new Setting(ROOT.'/'.$servKey, $servNick, $servColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return self::$serverList;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 서버 주소 반환. 서버의 경로가 하부 디렉토리인 경우에 하부 디렉토리까지 포함
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getServerBasepath(): string
|
||||||
|
{
|
||||||
|
return self::$serverWebPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -6,38 +6,33 @@
|
|||||||
|
|
||||||
.img_back {background-image:url('_tK_gameImagePath_/back.jpg'); }
|
.img_back {background-image:url('_tK_gameImagePath_/back.jpg'); }
|
||||||
|
|
||||||
/* 레거시. */
|
|
||||||
#bg0 { background-image:url('_tK_gameImagePath_/back_walnut.jpg'); }
|
|
||||||
#bg1 { background-image:url('_tK_gameImagePath_/back_green.jpg'); }
|
|
||||||
#bg2 { background-image:url('_tK_gameImagePath_/back_blue.jpg'); }
|
|
||||||
|
|
||||||
.map_detail .map_title{
|
.map_detail .map_title{
|
||||||
background:
|
background:
|
||||||
url('_tK_gameImagePath_/ltitle.jpg') no-repeat left,
|
url('_tK_gameImagePath_/ltitle.jpg') no-repeat left,
|
||||||
url('_tK_gameImagePath_/rtitle.jpg') no-repeat right;
|
url('_tK_gameImagePath_/rtitle.jpg') no-repeat right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.map_detail.map_spring .map_title_text{
|
.map_detail.map_spring .map_title_text{
|
||||||
background:
|
background:
|
||||||
url('_tK_gameImagePath_/ad.gif') no-repeat left,
|
url('_tK_gameImagePath_/ad.gif') no-repeat left,
|
||||||
url('_tK_gameImagePath_/spring.gif') no-repeat right;
|
url('_tK_gameImagePath_/spring.gif') no-repeat right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.map_detail.map_summer .map_title_text{
|
.map_detail.map_summer .map_title_text{
|
||||||
background:
|
background:
|
||||||
url('_tK_gameImagePath_/ad.gif') no-repeat left,
|
url('_tK_gameImagePath_/ad.gif') no-repeat left,
|
||||||
url('_tK_gameImagePath_/summer.gif') no-repeat right;
|
url('_tK_gameImagePath_/summer.gif') no-repeat right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.map_detail.map_fall .map_title_text{
|
.map_detail.map_fall .map_title_text{
|
||||||
background:
|
background:
|
||||||
url('_tK_gameImagePath_/ad.gif') no-repeat left,
|
url('_tK_gameImagePath_/ad.gif') no-repeat left,
|
||||||
url('_tK_gameImagePath_/fall.gif') no-repeat right;
|
url('_tK_gameImagePath_/fall.gif') no-repeat right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.map_detail.map_winter .map_title_text{
|
.map_detail.map_winter .map_title_text{
|
||||||
background:
|
background:
|
||||||
url('_tK_gameImagePath_/ad.gif') no-repeat left,
|
url('_tK_gameImagePath_/ad.gif') no-repeat left,
|
||||||
url('_tK_gameImagePath_/winter.gif') no-repeat right;
|
url('_tK_gameImagePath_/winter.gif') no-repeat right;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,6 +83,59 @@
|
|||||||
background-size: 700px 500px;
|
background-size: 700px 500px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*미니체 지도*/
|
||||||
|
.map_theme_miniche_b.map_spring .map_bglayer1{
|
||||||
|
background: url('_tK_gameImagePath_/map/che/bg_spring.jpg') no-repeat;
|
||||||
|
background-size: 700px 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.map_theme_miniche_b.map_summer .map_bglayer1{
|
||||||
|
background: url('_tK_gameImagePath_/map/che/bg_summer.jpg') no-repeat;
|
||||||
|
background-size: 700px 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.map_theme_miniche_b.map_fall .map_bglayer1{
|
||||||
|
background: url('_tK_gameImagePath_/map/che/bg_fall.jpg') no-repeat;
|
||||||
|
background-size: 700px 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.map_theme_miniche_b.map_winter .map_bglayer1{
|
||||||
|
background: url('_tK_gameImagePath_/map/che/bg_winter.jpg') no-repeat;
|
||||||
|
background-size: 700px 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.map_theme_miniche_b .map_bgroad{
|
||||||
|
background: url('_tK_gameImagePath_/map/che/miniche_road.png') no-repeat;
|
||||||
|
background-size: 700px 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*미니체 지도*/
|
||||||
|
.map_theme_miniche_clean.map_spring .map_bglayer1{
|
||||||
|
background: url('_tK_gameImagePath_/map/che/bg_spring.jpg') no-repeat;
|
||||||
|
background-size: 700px 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.map_theme_miniche_clean.map_summer .map_bglayer1{
|
||||||
|
background: url('_tK_gameImagePath_/map/che/bg_summer.jpg') no-repeat;
|
||||||
|
background-size: 700px 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.map_theme_miniche_clean.map_fall .map_bglayer1{
|
||||||
|
background: url('_tK_gameImagePath_/map/che/bg_fall.jpg') no-repeat;
|
||||||
|
background-size: 700px 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.map_theme_miniche_clean.map_winter .map_bglayer1{
|
||||||
|
background: url('_tK_gameImagePath_/map/che/bg_winter.jpg') no-repeat;
|
||||||
|
background-size: 700px 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.map_theme_miniche_clean .map_bgroad{
|
||||||
|
background: url('_tK_gameImagePath_/map/che/miniche_road.png') no-repeat;
|
||||||
|
background-size: 700px 500px;
|
||||||
|
}
|
||||||
|
|
||||||
/*루드라사움 지도*/
|
/*루드라사움 지도*/
|
||||||
.map_theme_ludo_rathowm .map_bglayer1{
|
.map_theme_ludo_rathowm .map_bglayer1{
|
||||||
background: url('_tK_gameImagePath_/map/ludo_rathowm/back.jpg') no-repeat;
|
background: url('_tK_gameImagePath_/map/ludo_rathowm/back.jpg') no-repeat;
|
||||||
@@ -99,28 +147,79 @@
|
|||||||
background-size: 700px 500px;
|
background-size: 700px 500px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.map_theme_ludo_rathowm.map_detail.map_spring .map_title_text{
|
|
||||||
background:
|
|
||||||
url('_tK_gameImagePath_/spring.gif') no-repeat right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.map_theme_ludo_rathowm.map_detail.map_summer .map_title_text{
|
|
||||||
background:
|
|
||||||
url('_tK_gameImagePath_/summer.gif') no-repeat right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.map_theme_ludo_rathowm.map_detail.map_fall .map_title_text{
|
|
||||||
background:
|
|
||||||
url('_tK_gameImagePath_/fall.gif') no-repeat right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.map_theme_ludo_rathowm.map_detail.map_winter .map_title_text{
|
|
||||||
background:
|
|
||||||
url('_tK_gameImagePath_/winter.gif') no-repeat right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.world_map.map_theme_ludo_rathowm .map_title .map_title_text::before {
|
.world_map.map_theme_ludo_rathowm .map_title .map_title_text::before {
|
||||||
color:white;
|
color:white;
|
||||||
content:'LP';
|
content:'LP';
|
||||||
margin-right:1ch;
|
margin-right:1ch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*체스판 지도*/
|
||||||
|
.map_theme_chess .map_bglayer1{
|
||||||
|
background: url('_tK_gameImagePath_/map/chess/chessboard.png') no-repeat;
|
||||||
|
background-size: 700px 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*포켓몬 v1 지도*/
|
||||||
|
.map_theme_pokemon_v1 .map_bglayer1{
|
||||||
|
background: url('_tK_gameImagePath_/map/pokemon_v1/back_pal8.png') no-repeat;
|
||||||
|
background-size: 700px 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*CR 지도*/
|
||||||
|
.map_theme_cr .map_bglayer1{
|
||||||
|
background: url('_tK_gameImagePath_/map/cr/bg-fs8.png') no-repeat;
|
||||||
|
background-size: 700px 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.map_theme_cr.map_detail .city_base .city_bg {
|
||||||
|
background-image: none !important;
|
||||||
|
width: 39.5px !important;
|
||||||
|
height: 39.5px !important;
|
||||||
|
left: 1px !important;
|
||||||
|
top: -4px !important;
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.map_theme_cr.map_detail.small_width_map .city_base .city_bg {
|
||||||
|
background-image: none !important;
|
||||||
|
width: 28.5px !important;
|
||||||
|
height: 28.5px !important;
|
||||||
|
left: 6px !important;
|
||||||
|
top: 4px !important;
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.map_theme_cr.map_detail .city_bg.bFF0000 { background-color: #FF0000; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.b800000 { background-color: #800000; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.bA0522D { background-color: #A0522D; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.bFF6347 { background-color: #FF6347; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.bFFA500 { background-color: #FFA500; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.bFFDAB9 { background-color: #FFDAB9; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.bFFD700 { background-color: #FFD700; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.bFFFF00 { background-color: #FFFF00; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.b7CFC00 { background-color: #7CFC00; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.b00FF00 { background-color: #00FF00; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.b808000 { background-color: #808000; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.b008000 { background-color: #008000; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.b2E8B57 { background-color: #2E8B57; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.b008080 { background-color: #008080; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.b20B2AA { background-color: #20B2AA; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.b6495ED { background-color: #6495ED; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.b7FFFD4 { background-color: #7FFFD4; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.bAFEEEE { background-color: #AFEEEE; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.b87CEEB { background-color: #87CEEB; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.b00FFFF { background-color: #00FFFF; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.b00BFFF { background-color: #00BFFF; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.b0000FF { background-color: #0000FF; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.b000080 { background-color: #000080; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.b483D8B { background-color: #483D8B; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.b7B68EE { background-color: #7B68EE; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.bBA55D3 { background-color: #BA55D3; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.b800080 { background-color: #800080; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.bFF00FF { background-color: #FF00FF; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.bFFC0CB { background-color: #FFC0CB; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.bF5F5DC { background-color: #F5F5DC; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.bE0FFFF { background-color: #E0FFFF; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.bFFFFFF { background-color: #FFFFFF; }
|
||||||
|
.map_theme_cr.map_detail .city_bg.bA9A9A9 { background-color: #A9A9A9; }
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
window.sammo_menu = [
|
|
||||||
['/bbs/board', '삼모게시판', '_blank'],
|
|
||||||
['/bbs/tip', '팁/강좌', '_blank'],
|
|
||||||
['/bbs/news', '삼국 일보', '_blank'],
|
|
||||||
['/bbs/history2', '개인 열전', '_blank'],
|
|
||||||
['/bbs/history3', '국가 열전', '_blank'],
|
|
||||||
['/bbs/patch', '패치 내역', '_blank']
|
|
||||||
];
|
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
[
|
||||||
|
["/bbs/board", "삼모게시판", "_blank"],
|
||||||
|
["/bbs/tip", "팁/강좌", "_blank"],
|
||||||
|
["/bbs/news", "삼국 일보", "_blank"],
|
||||||
|
["/bbs/history2", "개인 열전", "_blank"],
|
||||||
|
["/bbs/history3", "국가 열전", "_blank"],
|
||||||
|
["/bbs/patch", "패치 내역", "_blank"]
|
||||||
|
]
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace sammo;
|
|
||||||
|
|
||||||
function MYDB_query($query, $connect)
|
|
||||||
{
|
|
||||||
return mysqli_query($connect, $query);
|
|
||||||
}
|
|
||||||
|
|
||||||
function MYDB_num_rows(\mysqli_result $result) : int
|
|
||||||
{
|
|
||||||
return mysqli_num_rows($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return mixed[]
|
|
||||||
*/
|
|
||||||
function MYDB_fetch_array(\mysqli_result $result)
|
|
||||||
{
|
|
||||||
return mysqli_fetch_array($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
function MYDB_fetch_row(\mysqli_result $result)
|
|
||||||
{
|
|
||||||
return mysqli_fetch_row($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
function MYDB_error($connect)
|
|
||||||
{
|
|
||||||
return mysqli_error($connect);
|
|
||||||
}
|
|
||||||
@@ -6,53 +6,34 @@ include "func.php";
|
|||||||
|
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
if($session->userGrade < 4) {
|
if($session->userGrade < 4) {
|
||||||
?>
|
die(requireAdminPermissionHTML());
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>관리메뉴</title>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=1024" />
|
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
관리자가 아닙니다.<br>
|
|
||||||
<?=banner()?>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
<?php
|
|
||||||
exit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
$connect=$db->get();
|
|
||||||
|
|
||||||
[$turntime, $tnmt_time] = $gameStor->getValuesAsArray(['turntime','tnmt_time']);
|
[$turntime, $tnmt_time] = $gameStor->getValuesAsArray(['turntime','tnmt_time']);
|
||||||
|
|
||||||
$query = "select plock from plock";
|
$plock = $db->queryFirstField('SELECT plock FROM plock WHERE `type` ="GAME"');
|
||||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
|
||||||
$plock = MYDB_fetch_array($result);
|
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>삼국지 모의전투 HiDCHe</title>
|
<title>삼국지 모의전투 HiDCHe</title>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
|
<meta name="color-scheme" content="dark">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
<?= WebUtil::printDist('ts', 'common', true) ?>
|
||||||
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<form action=_119_b.php method=post>
|
<form action=_119_b.php method=post>
|
||||||
시간조정 : <input type=text size=3 name=minute><input type=submit name=btn value='분당김'><input type=submit name=btn value='분지연'> 최종갱신 : <?=$turntime?><br>
|
시간조정 : <input type=text size=3 name=minute><input type=submit name=btn value='분당김'><input type=submit name=btn value='분지연'> 최종갱신 : <?=$turntime?><br>
|
||||||
시간조정 : <input type=text size=3 name=minute2><input type=submit name=btn value='토너분당김'><input type=submit name=btn value='토너분지연'> 토너먼트 : <?=$tnmt_time?><br>
|
시간조정 : <input type=text size=3 name=minute2><input type=submit name=btn value='토너분당김'><input type=submit name=btn value='토너분지연'> 토너먼트 : <?=$tnmt_time?><br>
|
||||||
봉급지급 : <input type=submit name=btn value='금지급'><input type=submit name=btn value='쌀지급'><br>
|
봉급지급 : <input type=submit name=btn value='금지급'><input type=submit name=btn value='쌀지급'><br>
|
||||||
락 풀 기 : <input type=submit name=btn value='락걸기'><input type=submit name=btn value='락풀기'> 현재 : <?=$plock['plock']>0?"동결중":"가동중"?><br>
|
락 풀 기 : <input type=submit name=btn value='락걸기'><input type=submit name=btn value='락풀기'> 현재 : <?=$plock>0?"동결중":"가동중"?><br>
|
||||||
</form>
|
</form>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
include "lib.php";
|
include "lib.php";
|
||||||
@@ -6,7 +7,7 @@ include "func.php";
|
|||||||
|
|
||||||
|
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
if($session->userGrade < 4){
|
if ($session->userGrade < 4) {
|
||||||
header('location:_119.php');
|
header('location:_119.php');
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
@@ -16,75 +17,102 @@ $v->rule('integer', [
|
|||||||
'minute',
|
'minute',
|
||||||
'minutes2'
|
'minutes2'
|
||||||
]);
|
]);
|
||||||
if(!$v->validate()){
|
if (!$v->validate()) {
|
||||||
Error($v->errorStr());
|
Error($v->errorStr());
|
||||||
}
|
}
|
||||||
|
|
||||||
$btn = Util::getReq('btn');
|
$btn = Util::getPost('btn');
|
||||||
$minute = Util::getReq('minute', 'int');
|
$minute = Util::getPost('minute', 'int');
|
||||||
$minute2 = Util::getReq('minute2', 'int');
|
$minute2 = Util::getPost('minute2', 'int');
|
||||||
|
|
||||||
extractMissingPostToGlobals();
|
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
switch($btn) {
|
switch ($btn) {
|
||||||
case "분당김":
|
case "분당김":
|
||||||
$gameStor->cacheValues(['turntime', 'starttime', 'tnmt_time']);
|
$locked = false;
|
||||||
$turntime = (new \DateTimeImmutable($gameStor->turntime))->sub(new \DateInterval("PT{$minute}M"));
|
for ($i = 0; $i < 10; $i++) {
|
||||||
$starttime = (new \DateTimeImmutable($gameStor->starttime))->sub(new \DateInterval("PT{$minute}M"));
|
if (tryLock()) {
|
||||||
$tnmt_time = (new \DateTimeImmutable($gameStor->tnmt_time))->sub(new \DateInterval("PT{$minute}M"));
|
$locked = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
usleep(500000);
|
||||||
|
}
|
||||||
|
|
||||||
$gameStor->turntime = $turntime->format('Y-m-d H:i:s');
|
$gameStor->cacheValues(['turntime', 'starttime', 'tnmt_time']);
|
||||||
$gameStor->starttime = $starttime->format('Y-m-d H:i:s');
|
$turntime = (new \DateTimeImmutable($gameStor->turntime))->sub(new \DateInterval("PT{$minute}M"));
|
||||||
$gameStor->tnmt_time = $tnmt_time->format('Y-m-d H:i:s');
|
$starttime = (new \DateTimeImmutable($gameStor->starttime))->sub(new \DateInterval("PT{$minute}M"));
|
||||||
|
$tnmt_time = (new \DateTimeImmutable($gameStor->tnmt_time))->sub(new \DateInterval("PT{$minute}M"));
|
||||||
|
|
||||||
$db->update('general', [
|
$gameStor->turntime = $turntime->format('Y-m-d H:i:s.u');
|
||||||
'turntime'=>$db->sqleval('DATE_ADD(turntime, INTERVAL %i MINUTE)', $minute)
|
$gameStor->starttime = $starttime->format('Y-m-d H:i:s');
|
||||||
], true);
|
$gameStor->tnmt_time = $tnmt_time->format('Y-m-d H:i:s');
|
||||||
$db->update('auction', [
|
|
||||||
'expire'=>$db->sqleval('DATE_ADD(expire, INTERVAL %i MINUTE)', $minute)
|
|
||||||
], true);
|
|
||||||
break;
|
|
||||||
case "분지연":
|
|
||||||
$gameStor->cacheValues(['turntime', 'starttime', 'tnmt_time']);
|
|
||||||
$turntime = (new \DateTimeImmutable($gameStor->turntime))->add(new \DateInterval("PT{$minute}M"));
|
|
||||||
$starttime = (new \DateTimeImmutable($gameStor->starttime))->add(new \DateInterval("PT{$minute}M"));
|
|
||||||
$tnmt_time = (new \DateTimeImmutable($gameStor->tnmt_time))->add(new \DateInterval("PT{$minute}M"));
|
|
||||||
|
|
||||||
$gameStor->turntime = $turntime->format('Y-m-d H:i:s');
|
$db->update('general', [
|
||||||
$gameStor->starttime = $starttime->format('Y-m-d H:i:s');
|
'turntime' => $db->sqleval('DATE_SUB(turntime, INTERVAL %i MINUTE)', $minute)
|
||||||
$gameStor->tnmt_time = $tnmt_time->format('Y-m-d H:i:s');
|
], true);
|
||||||
|
$db->update('ng_auction', [
|
||||||
|
'close_date' => $db->sqleval('DATE_SUB(close_date, INTERVAL %i MINUTE)', $minute)
|
||||||
|
], 'finished = 0');
|
||||||
|
if ($locked) {
|
||||||
|
unlock();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "분지연":
|
||||||
|
$locked = false;
|
||||||
|
for ($i = 0; $i < 5; $i++) {
|
||||||
|
if (tryLock()) {
|
||||||
|
$locked = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
usleep(500000);
|
||||||
|
}
|
||||||
|
$gameStor->cacheValues(['turntime', 'starttime', 'tnmt_time']);
|
||||||
|
$turntime = (new \DateTimeImmutable($gameStor->turntime))->add(new \DateInterval("PT{$minute}M"));
|
||||||
|
$starttime = (new \DateTimeImmutable($gameStor->starttime))->add(new \DateInterval("PT{$minute}M"));
|
||||||
|
$tnmt_time = (new \DateTimeImmutable($gameStor->tnmt_time))->add(new \DateInterval("PT{$minute}M"));
|
||||||
|
|
||||||
$db->update('general', [
|
$gameStor->turntime = $turntime->format('Y-m-d H:i:s.u');
|
||||||
'turntime'=>$db->sqleval('DATE_ADD(turntime, INTERVAL %i MINUTE)', $minute)
|
$gameStor->starttime = $starttime->format('Y-m-d H:i:s');
|
||||||
], true);
|
$gameStor->tnmt_time = $tnmt_time->format('Y-m-d H:i:s');
|
||||||
$db->update('auction', [
|
|
||||||
'expire'=>$db->sqleval('DATE_ADD(expire, INTERVAL %i MINUTE)', $minute)
|
$db->update('general', [
|
||||||
], true);
|
'turntime' => $db->sqleval('DATE_ADD(turntime, INTERVAL %i MINUTE)', $minute)
|
||||||
break;
|
], true);
|
||||||
case "토너분당김":
|
$db->update('ng_auction', [
|
||||||
$tnmt_time = new \DateTime($gameStor->tnmt_time);
|
'close_date' => $db->sqleval('DATE_ADD(close_date, INTERVAL %i MINUTE)', $minute)
|
||||||
$tnmt_time->sub(new \DateInterval("PT{$minute2}M"));
|
], 'finished = 0');
|
||||||
$gameStor->tnmt_time = $tnmt_time->format('Y-m-d H:i:s');
|
if ($locked) {
|
||||||
break;
|
unlock();
|
||||||
case "토너분지연":
|
}
|
||||||
$tnmt_time = new \DateTimeImmutable($gameStor->tnmt_time);
|
break;
|
||||||
$tnmt_time->add(new \DateInterval("PT{$minute2}M"));
|
case "토너분당김":
|
||||||
$gameStor->tnmt_time = $tnmt_time->format('Y-m-d H:i:s');
|
$tnmt_time = new \DateTime($gameStor->tnmt_time);
|
||||||
break;
|
$tnmt_time->sub(new \DateInterval("PT{$minute2}M"));
|
||||||
case "금지급":
|
$gameStor->tnmt_time = $tnmt_time->format('Y-m-d H:i:s');
|
||||||
processGoldIncome();
|
break;
|
||||||
break;
|
case "토너분지연":
|
||||||
case "쌀지급":
|
$tnmt_time = new \DateTimeImmutable($gameStor->tnmt_time);
|
||||||
processRiceIncome();
|
$tnmt_time->add(new \DateInterval("PT{$minute2}M"));
|
||||||
break;
|
$gameStor->tnmt_time = $tnmt_time->format('Y-m-d H:i:s');
|
||||||
case "락걸기":
|
break;
|
||||||
$db->update('plock', ['plock'=>1], true);
|
case "금지급":
|
||||||
break;
|
processGoldIncome();
|
||||||
case "락풀기":
|
break;
|
||||||
$db->update('plock', ['plock'=>0], true);
|
case "쌀지급":
|
||||||
break;
|
processRiceIncome();
|
||||||
|
break;
|
||||||
|
case "락걸기":
|
||||||
|
for ($i = 0; $i < 10; $i++) {
|
||||||
|
if (tryLock()) {
|
||||||
|
$locked = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
usleep(500000);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "락풀기":
|
||||||
|
unlock();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
header('Location:_119.php');
|
header('Location:_119.php', true, 303);
|
||||||
|
|||||||
@@ -6,29 +6,11 @@ include "func.php";
|
|||||||
//로그인 검사
|
//로그인 검사
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
|
||||||
if($session->userGrade < 5) {
|
if($session->userGrade < 6) {
|
||||||
?>
|
die(requireAdminPermissionHTML());
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>관리메뉴</title>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=1024" />
|
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
관리자가 아닙니다.<br>
|
|
||||||
<?=banner()?>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
<?php
|
|
||||||
exit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$connect=$db->get();
|
|
||||||
|
|
||||||
$admin = getAdmin();
|
$admin = getAdmin();
|
||||||
?>
|
?>
|
||||||
@@ -37,10 +19,12 @@ $admin = getAdmin();
|
|||||||
<head>
|
<head>
|
||||||
<title>게임관리</title>
|
<title>게임관리</title>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
|
<meta name="color-scheme" content="dark">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
<?= WebUtil::printDist('ts', 'common', true) ?>
|
||||||
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<table align=center width=1000 class="tb_layout bg0">
|
<table align=center width=1000 class="tb_layout bg0">
|
||||||
@@ -56,9 +40,7 @@ $admin = getAdmin();
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width=110 align=right>시작시간변경</td>
|
<td width=110 align=right>시작시간변경</td>
|
||||||
<td width=285><input type=text size=20 maxlength=20 style=color:white;background-color:black;text-align:right; name=starttime value='<?=$admin['starttime']?>'><input type=submit name=btn value=변경1></td>
|
<td width=285><input type=text size=20 maxlength=20 style=color:white;background-color:black;text-align:right; name=starttime value='<?=substr($admin['starttime'], 0, 19)?>'><input type=submit name=btn value=변경1></td>
|
||||||
<td width=110 align=right>현재도시훈사</td>
|
|
||||||
<td width=285><?=$admin['city_rate']?></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width=110 align=right>최대 장수</td>
|
<td width=110 align=right>최대 장수</td>
|
||||||
@@ -66,12 +48,6 @@ $admin = getAdmin();
|
|||||||
<td width=110 align=right>최대 국가</td>
|
<td width=110 align=right>최대 국가</td>
|
||||||
<td width=285><input type=text size=3 maxlength=2 style=color:white;background-color:black;text-align:right; name=maxnation value=<?=$admin['maxnation']?>><input type=submit name=btn value=변경3></td>
|
<td width=285><input type=text size=3 maxlength=2 style=color:white;background-color:black;text-align:right; name=maxnation value=<?=$admin['maxnation']?>><input type=submit name=btn value=변경3></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
|
||||||
<td width=110 align=right></td>
|
|
||||||
<td width=285></td>
|
|
||||||
<td width=110 align=right>현재 수입률</td>
|
|
||||||
<td width=285><?=$admin['gold_rate']?>%</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
<tr>
|
||||||
<td width=110 align=right>시작 년도</td>
|
<td width=110 align=right>시작 년도</td>
|
||||||
<td width=285><input type=text size=3 maxlength=3 style=color:white;background-color:black;text-align:right; name=startyear value='<?=$admin['startyear']?>'><input type=submit name=btn value=변경4></td>
|
<td width=285><input type=text size=3 maxlength=3 style=color:white;background-color:black;text-align:right; name=startyear value='<?=$admin['startyear']?>'><input type=submit name=btn value=변경4></td>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ include "func.php";
|
|||||||
//로그인 검사
|
//로그인 검사
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
|
||||||
if ($session->userGrade < 5) {
|
if ($session->userGrade < 6) {
|
||||||
header('location:_admin1.php');
|
header('location:_admin1.php');
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
@@ -22,19 +22,16 @@ if (!$v->validate()) {
|
|||||||
Error($v->errorStr());
|
Error($v->errorStr());
|
||||||
}
|
}
|
||||||
|
|
||||||
$msg = Util::getReq('msg');
|
$msg = Util::getPost('msg');
|
||||||
$btn = Util::getReq('btn');
|
$btn = Util::getPost('btn');
|
||||||
$log = Util::getReq('log');
|
$log = Util::getPost('log');
|
||||||
$starttime = Util::getReq('starttime', 'string', (new \DateTime())->format('Y-m-d H:i:s'));
|
$starttime = Util::getPost('starttime', 'string', (new \DateTime())->format('Y-m-d H:i:s'));
|
||||||
$maxgeneral = Util::getReq('maxgeneral', 'int', GameConst::$defaultMaxGeneral);
|
$maxgeneral = Util::getPost('maxgeneral', 'int', GameConst::$defaultMaxGeneral);
|
||||||
$maxnation = Util::getReq('maxnation', 'int', GameConst::$defaultMaxNation);
|
$maxnation = Util::getPost('maxnation', 'int', GameConst::$defaultMaxNation);
|
||||||
$startyear = Util::getReq('startyear', 'int', GameConst::$defaultStartYear);
|
$startyear = Util::getPost('startyear', 'int', GameConst::$defaultStartYear);
|
||||||
|
|
||||||
extractMissingPostToGlobals();
|
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
$connect=$db->get();
|
|
||||||
|
|
||||||
$admin = getAdmin();
|
$admin = getAdmin();
|
||||||
|
|
||||||
@@ -43,11 +40,7 @@ switch ($btn) {
|
|||||||
$gameStor->msg = $msg;
|
$gameStor->msg = $msg;
|
||||||
break;
|
break;
|
||||||
case "로그쓰기":
|
case "로그쓰기":
|
||||||
$lognum = $admin['historyindex'] + 1;
|
pushGlobalHistoryLog(["<R>★</><S>{$log}</>"]);
|
||||||
if ($lognum >= 29) {
|
|
||||||
$lognum = 0;
|
|
||||||
}
|
|
||||||
pushWorldHistory(["<R>★</><S>{$log}</>"]);
|
|
||||||
break;
|
break;
|
||||||
case "변경1":
|
case "변경1":
|
||||||
$gameStor->starttime = (new \DateTime($starttime))->format('Y-m-d H:i:s');
|
$gameStor->starttime = (new \DateTime($starttime))->format('Y-m-d H:i:s');
|
||||||
@@ -69,6 +62,7 @@ switch ($btn) {
|
|||||||
case "30분턴":
|
case "30분턴":
|
||||||
case "60분턴":
|
case "60분턴":
|
||||||
case "120분턴":
|
case "120분턴":
|
||||||
|
$admin = $gameStor->getValues(['turntime', 'turnterm', 'year', 'startyear', 'month']);
|
||||||
switch ($btn) {
|
switch ($btn) {
|
||||||
case "1분턴": $turnterm = 1; break;
|
case "1분턴": $turnterm = 1; break;
|
||||||
case "2분턴": $turnterm = 2; break;
|
case "2분턴": $turnterm = 2; break;
|
||||||
@@ -78,41 +72,9 @@ switch ($btn) {
|
|||||||
case "30분턴": $turnterm = 30; break;
|
case "30분턴": $turnterm = 30; break;
|
||||||
case "60분턴": $turnterm = 60; break;
|
case "60분턴": $turnterm = 60; break;
|
||||||
case "120분턴": $turnterm = 120; break;
|
case "120분턴": $turnterm = 120; break;
|
||||||
|
default: throw new \Exception("알 수 없는 턴 기간");
|
||||||
}
|
}
|
||||||
$unit = $turnterm * 60;
|
ServerTool::changeServerTerm($turnterm);
|
||||||
$turn = ($admin['year'] - $admin['startyear']) * 12 + $admin['month'] - 1;
|
|
||||||
$starttime = date("Y-m-d H:i:s", strtotime($admin['turntime']) - $turn * $unit);
|
|
||||||
$starttime = cutTurn($starttime, $turnterm);
|
|
||||||
$gameStor->turnterm = $turnterm;
|
|
||||||
$gameStor->starttime = $starttime;
|
|
||||||
// 턴시간이 길어지는 경우 랜덤턴 배정
|
|
||||||
if ($turnterm < $admin['turnterm']) {
|
|
||||||
$query = "select no from general";
|
|
||||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
|
||||||
$count = MYDB_num_rows($result);
|
|
||||||
for ($i=0; $i < $count; $i++) {
|
|
||||||
$gen = MYDB_fetch_array($result);
|
|
||||||
$turntime = getRandTurn($turnterm);
|
|
||||||
$query = "update general set turntime='$turntime' where no='{$gen['no']}'";
|
|
||||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
|
||||||
}
|
|
||||||
// 턴시간이 너무 멀리 떨어진 선수 제대로 보정
|
|
||||||
} else {
|
|
||||||
$query = "select no,turntime from general";
|
|
||||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
|
||||||
$count = MYDB_num_rows($result);
|
|
||||||
for ($i=0; $i < $count; $i++) {
|
|
||||||
$gen = MYDB_fetch_array($result);
|
|
||||||
$num = intdiv((strtotime($gen['turntime']) - strtotime($admin['turntime'])), $unit);
|
|
||||||
if ($num > 0) {
|
|
||||||
$gen['turntime'] = date("Y-m-d H:i:s", strtotime($gen['turntime']) - $unit * $num);
|
|
||||||
$query = "update general set turntime='{$gen['turntime']}' where no='{$gen['no']}'";
|
|
||||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pushWorldHistory(["<R>★</>턴시간이 <C>$btn</>으로 변경됩니다."]);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
include "lib.php";
|
include "lib.php";
|
||||||
@@ -6,25 +7,8 @@ include "func.php";
|
|||||||
//로그인 검사
|
//로그인 검사
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
|
||||||
if($session->userGrade < 5) {
|
if ($session->userGrade < 6) {
|
||||||
?>
|
die(requireAdminPermissionHTML());
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>관리메뉴</title>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=1024" />
|
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
관리자가 아닙니다.<br>
|
|
||||||
<?=banner()?>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
<?php
|
|
||||||
exit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
@@ -32,103 +16,97 @@ $db = DB::db();
|
|||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>회원관리</title>
|
<title>회원관리</title>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta name="color-scheme" content="dark">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
<meta name="viewport" content="width=1024" />
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
|
<?= WebUtil::printDist('ts', 'common', true) ?>
|
||||||
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
<tr><td>회 원 관 리<br><?=backButton()?></td></tr>
|
<tr>
|
||||||
</table>
|
<td>회 원 관 리<br><?= backButton() ?></td>
|
||||||
<form name=form1 method=post action=_admin2_submit.php>
|
</tr>
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
</table>
|
||||||
<tr>
|
<form name=form1 method=post action=_admin2_submit.php>
|
||||||
<td width=80 align=center>접속제한</td>
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
<td width=713 align=center><input type=submit name=btn value='전체 접속허용'><input type=submit name=btn value='전체 접속제한'></td>
|
<tr>
|
||||||
</tr>
|
<td width=80 align=center>접속제한</td>
|
||||||
</table>
|
<td width=713 align=center><input type=submit name=btn value='전체 접속허용'><input type=submit name=btn value='전체 접속제한'></td>
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
</tr>
|
||||||
<tr>
|
</table>
|
||||||
<td width=80 align=center rowspan=12>회원선택<br><br><font color=cyan>NPC</font><br><font color=skyblue>NPC유저</font><br><font color=red>접속제한</font><br><b style=background-color:red;>블럭회원</b></td>
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
<td width=105 rowspan=12>
|
<tr>
|
||||||
<?php
|
<td width=80 align=center rowspan=12>회원선택<br><br>
|
||||||
|
<font color=cyan>NPC</font><br>
|
||||||
|
<font color=skyblue>NPC유저</font><br>
|
||||||
|
<font color=red>접속제한</font><br><b style=background-color:red;>블럭회원</b>
|
||||||
|
</td>
|
||||||
|
<td width=105 rowspan=12>
|
||||||
|
<select name=genlist[] size=20 multiple style='color:white;background-color:black;font-size:14px'>
|
||||||
|
<?php
|
||||||
|
$generalList = $db->query('SELECT `no`, `name`, npc, `block` FROM general ORDER BY npc, binary(`name`)');
|
||||||
|
|
||||||
echo "
|
foreach ($generalList as $general) {
|
||||||
<select name=genlist[] size=20 multiple style='color:white;background-color:black;font-size:13px'>";
|
$style = "style=;";
|
||||||
$generalList = $db->query('SELECT `no`, `name`, npc, `block` FROM general ORDER BY npc, binary(`name`)');
|
if ($general['block'] > 0) {
|
||||||
|
$style .= "background-color:red;";
|
||||||
|
}
|
||||||
|
|
||||||
foreach($generalList as $general){
|
$npcColor = getNPCColor($general['npc']);
|
||||||
$style = "style=;";
|
if ($npcColor !== null) {
|
||||||
if($general['block'] > 0) { $style .= "background-color:red;"; }
|
$style .= "color:{$npcColor};";
|
||||||
if($general['npc'] >= 2) { $style .= "color:cyan;"; }
|
}
|
||||||
elseif($general['npc'] == 1) { $style .= "color:skyblue;"; }
|
|
||||||
|
|
||||||
echo "
|
echo "<option value={$general['no']} $style>{$general['name']}</option>";
|
||||||
<option value={$general['no']} $style>{$general['name']}</option>";
|
}
|
||||||
}
|
?>
|
||||||
|
</select>
|
||||||
echo "
|
</td>
|
||||||
</select>
|
</tr>
|
||||||
</td>
|
<tr>
|
||||||
<td width=100 align=center>아이템 지급</td>
|
<td width=100 align=center>블럭</td>
|
||||||
<td width=504>
|
<td width=504>
|
||||||
<select name=weap size=1 style='color:white;background-color:black;font-size:13px'>";
|
<input type=submit name=btn value='블럭 해제'><input type=submit name=btn value='1단계 블럭'><input type=submit name=btn value='2단계 블럭'><input type=submit name=btn value='3단계 블럭'><input type=submit name=btn value='무한삭턴'><br>
|
||||||
for($i=0; $i < 27; $i++) {
|
1단계:발언권, 2단계:턴블럭
|
||||||
echo "
|
</td>
|
||||||
<option value={$i}>{$i}</option>";
|
</tr>
|
||||||
}
|
<tr>
|
||||||
?>
|
<td align=center>강제 사망</td>
|
||||||
</select>
|
<td><input type=submit name=btn value='강제 사망'></td>
|
||||||
<input type=submit name=btn value='무기지급'>
|
</tr>
|
||||||
<input type=submit name=btn value='책지급'>
|
<tr>
|
||||||
<input type=submit name=btn value='말지급'>
|
<td align=center>이벤트2</td>
|
||||||
<input type=submit name=btn value='도구지급'>
|
<td><input type=submit name=btn value='보숙10000'><input type=submit name=btn value='궁숙10000'><input type=submit name=btn value='기숙10000'><input type=submit name=btn value='귀숙10000'><input type=submit name=btn value='차숙10000'></td>
|
||||||
</td>
|
</tr>
|
||||||
</tr>
|
<tr>
|
||||||
<tr>
|
<td align=center>접속제한</td>
|
||||||
<td width=100 align=center>블럭</td>
|
<td><input type=submit name=btn value='접속 허용'><input type=submit name=btn value='접속 제한'></td>
|
||||||
<td width=504>
|
</tr>
|
||||||
<input type=submit name=btn value='블럭 해제'><input type=submit name=btn value='1단계 블럭'><input type=submit name=btn value='2단계 블럭'><input type=submit name=btn value='3단계 블럭'><input type=submit name=btn value='무한삭턴'><br>
|
<tr>
|
||||||
1단계:발언권, 2단계:턴블럭
|
<td align=center>명령 설정</td>
|
||||||
</td>
|
<td><input type=submit name=btn value='하야입력'><input type=submit name=btn value='방랑해산'></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align=center>강제 사망</td>
|
<td align=center>메세지 전달</td>
|
||||||
<td><input type=submit name=btn value='강제 사망'></td>
|
<td><input type=textarea size=60 maxlength=255 name=msg style=background-color:black;color:white;><input type=submit name=btn value='메세지 전달'></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
</table>
|
||||||
<td align=center>이벤트</td>
|
</form>
|
||||||
<td><input type=submit name=btn value='특기 부여'><input type=submit name=btn value='공헌치1000'><input type=submit name=btn value='경험치1000'></td>
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
</tr>
|
<tr>
|
||||||
<tr>
|
<td><?= backButton() ?></td>
|
||||||
<td align=center>이벤트2</td>
|
</tr>
|
||||||
<td><input type=submit name=btn value='보숙10000'><input type=submit name=btn value='궁숙10000'><input type=submit name=btn value='기숙10000'><input type=submit name=btn value='귀숙10000'><input type=submit name=btn value='차숙10000'></td>
|
<tr>
|
||||||
</tr>
|
<td><?= banner() ?> </td>
|
||||||
<tr>
|
</tr>
|
||||||
<td align=center>접속제한</td>
|
</table>
|
||||||
<td><input type=submit name=btn value='접속 허용'><input type=submit name=btn value='접속 제한'></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align=center>턴설정</td>
|
|
||||||
<td><input type=submit name=btn value='00턴'><input type=submit name=btn value='랜덤턴'></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align=center>NPC해제</td>
|
|
||||||
<td><input type=submit name=btn value='NPC해제'><input type=submit name=btn value='하야입력'><input type=submit name=btn value='방랑해산'><input type=submit name=btn value='NPC설정'></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align=center>메세지 전달</td>
|
|
||||||
<td><input type=textarea size=60 maxlength=255 name=msg style=background-color:black;color:white;><input type=submit name=btn value='메세지 전달'></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</form>
|
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
|
||||||
<tr><td><?=backButton()?></td></tr>
|
|
||||||
<tr><td><?=banner()?> </td></tr>
|
|
||||||
</table>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
|
||||||
|
</html>
|
||||||
@@ -1,354 +1,226 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
|
use sammo\Enums\MessageType;
|
||||||
|
|
||||||
include "lib.php";
|
include "lib.php";
|
||||||
include "func.php";
|
include "func.php";
|
||||||
|
|
||||||
$btn = Util::getReq('btn');
|
$btn = Util::getPost('btn');
|
||||||
$weap = Util::getReq('weap', 'int');
|
$item = Util::getPost('item', 'string');
|
||||||
$genlist = Util::getReq('genlist', 'array_int');
|
$genlist = Util::getPost('genlist', 'array_int');
|
||||||
$msg = Util::getReq('msg', 'string');
|
$msg = Util::getPost('msg', 'string');
|
||||||
|
|
||||||
extractMissingPostToGlobals();
|
|
||||||
|
|
||||||
//로그인 검사
|
//로그인 검사
|
||||||
$session = Session::requireLogin()->loginGame()->setReadOnly();
|
$session = Session::requireLogin()->loginGame()->setReadOnly();
|
||||||
|
|
||||||
if($session->userGrade < 5) {
|
if ($session->userGrade < 6) {
|
||||||
header('location:_admin2.php');
|
header('location:_admin2.php');
|
||||||
}
|
}
|
||||||
|
|
||||||
$generalID = $session->generalID;
|
$generalID = $session->generalID;
|
||||||
if(!$generalID){
|
if (!$generalID) {
|
||||||
header('location:_admin2.php');
|
header('location:_admin2.php');
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
$connect=$db->get();
|
|
||||||
|
|
||||||
$src = MessageTarget::buildQuick($session->generalID);
|
$src = MessageTarget::buildQuick($session->generalID);
|
||||||
|
|
||||||
switch($btn) {
|
$genObjList = [];
|
||||||
|
$env = [];
|
||||||
|
if ($genlist) {
|
||||||
|
$genObjList = General::createObjListFromDB($genlist);
|
||||||
|
$env = $gameStor->cacheAll();
|
||||||
|
}
|
||||||
|
switch ($btn) {
|
||||||
case "전체 접속허용":
|
case "전체 접속허용":
|
||||||
$db->update('general', [
|
$db->update('general_access_log', [
|
||||||
'con'=>0
|
'refresh_score' => 0
|
||||||
], true);
|
], true);
|
||||||
break;
|
break;
|
||||||
case "전체 접속제한":
|
case "전체 접속제한":
|
||||||
$db->update('general', [
|
$db->update('general_access_log', [
|
||||||
'con'=>1000
|
'refresh_score' => 1000
|
||||||
], true);
|
], true);
|
||||||
break;
|
break;
|
||||||
case "블럭 해제":
|
case "블럭 해제":
|
||||||
$db->update('general', [
|
$db->update('general', [
|
||||||
'block'=>0
|
'block' => 0
|
||||||
], '`no` IN %li', $genlist);
|
], '`no` IN %li', $genlist);
|
||||||
DB::db()->query('update general set block=0 where no IN %li', $genlist);
|
DB::db()->query('update general set block=0 where no IN %li', $genlist);
|
||||||
break;
|
break;
|
||||||
case "1단계 블럭":
|
case "1단계 블럭":
|
||||||
$date = date('Y-m-d H:i:s');
|
$date = TimeUtil::now();
|
||||||
$db->update('general', [
|
$db->update('general', [
|
||||||
'block'=>1,
|
'block' => 1,
|
||||||
'killturn'=>24
|
'killturn' => 24
|
||||||
], '`no` IN %li', $genlist);
|
], '`no` IN %li', $genlist);
|
||||||
$uid = $db->queryFirstColumn('SELECT `owner` FROM general WHERE `no` IN %li', $genlist);
|
$uid = $db->queryFirstColumn('SELECT `owner` FROM general WHERE `no` IN %li', $genlist);
|
||||||
RootDB::db()->update('member',[
|
RootDB::db()->update('member', [
|
||||||
'block_num'=>$db->sqleval('block_num+1'),
|
'block_num' => $db->sqleval('block_num+1'),
|
||||||
'block_date'=>$date
|
'block_date' => $date
|
||||||
], 'id IN %li', $uid);
|
], 'id IN %li', $uid);
|
||||||
break;
|
break;
|
||||||
case "2단계 블럭":
|
case "2단계 블럭":
|
||||||
$date = date('Y-m-d H:i:s');
|
$date = TimeUtil::now();
|
||||||
$db->update('general', [
|
$db->update('general', [
|
||||||
'gold'=>0,
|
'gold' => 0,
|
||||||
'rice'=>0,
|
'rice' => 0,
|
||||||
'block'=>2,
|
'block' => 2,
|
||||||
'killturn'=>24
|
'killturn' => 24
|
||||||
], '`no` IN %li', $genlist);
|
], '`no` IN %li', $genlist);
|
||||||
$uid = $db->queryFirstColumn('select owner from general where no IN %li', $genlist);
|
$uid = $db->queryFirstColumn('select owner from general where no IN %li', $genlist);
|
||||||
RootDB::db()->update('member',[
|
RootDB::db()->update('member', [
|
||||||
'block_num'=>$db->sqleval('block_num+1'),
|
'block_num' => $db->sqleval('block_num+1'),
|
||||||
'block_date'=>$date
|
'block_date' => $date
|
||||||
], 'id IN %li', $uid);
|
], 'id IN %li', $uid);
|
||||||
break;
|
break;
|
||||||
case "3단계 블럭":
|
case "3단계 블럭":
|
||||||
$date = date('Y-m-d H:i:s');
|
$date = TimeUtil::now();
|
||||||
$db->update('general', [
|
$db->update('general', [
|
||||||
'gold'=>0,
|
'gold' => 0,
|
||||||
'rice'=>0,
|
'rice' => 0,
|
||||||
'block'=>3,
|
'block' => 3,
|
||||||
'killturn'=>24
|
'killturn' => 24
|
||||||
], '`no` IN %li', $genlist);
|
], '`no` IN %li', $genlist);
|
||||||
$uid = $db->queryFirstColumn('SELECT `owner` from general where no IN %li', $genlist);
|
$uid = $db->queryFirstColumn('SELECT `owner` from general where no IN %li', $genlist);
|
||||||
RootDB::db()->update('member',[
|
RootDB::db()->update('member', [
|
||||||
'block_num'=>$db->sqleval('block_num+1'),
|
'block_num' => $db->sqleval('block_num+1'),
|
||||||
'block_date'=>$date
|
'block_date' => $date
|
||||||
], 'id IN %li', $uid);
|
], 'id IN %li', $uid);
|
||||||
break;
|
break;
|
||||||
case "무한삭턴":
|
case "무한삭턴":
|
||||||
$db->update('general', [
|
$db->update('general', [
|
||||||
'killturn'=>8000
|
'killturn' => 8000
|
||||||
], '`no` IN %li', $genlist);
|
], '`no` IN %li', $genlist);
|
||||||
break;
|
break;
|
||||||
case "강제 사망":
|
case "강제 사망":
|
||||||
$date = date('Y-m-d H:i:s');
|
$date = TimeUtil::now(true);
|
||||||
$db->update('general', [
|
$db->update('general', [
|
||||||
'turn0'=>EncodeCommand(0, 0, 0, 0),
|
'killturn' => 0,
|
||||||
'killturn'=>0,
|
'turntime' => $date,
|
||||||
'turntime'=>$date,
|
|
||||||
], '`no` IN %li', $genlist);
|
], '`no` IN %li', $genlist);
|
||||||
break;
|
$db->update('general_turn', [
|
||||||
case "특기 부여":
|
'action' => '휴식',
|
||||||
[$year, $month] = $gameStor->getValuesAsArray(['year', 'month']);
|
'arg' => '{}',
|
||||||
$text = "특기 부여!";
|
'brief' => '휴식',
|
||||||
|
], 'general_id IN %li AND turn_idx = 0', $genlist);
|
||||||
foreach($db->query("SELECT `no`,leader,power,intel,dex0,dex10,dex20,dex30,dex40 FROM general WHERE `no` IN %li", $genlist) as $general){
|
|
||||||
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($general['no']), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
|
||||||
$msg->send(true);
|
|
||||||
|
|
||||||
$specialWar = SpecialityConst::pickSpecialWar($general);
|
|
||||||
$db->update('general', [
|
|
||||||
'specage2'=>$db->sqleval('age'),
|
|
||||||
'special2'=>$specialWar
|
|
||||||
], 'no=%i', $general['no']);
|
|
||||||
$specialWarName = SpecialityConst::WAR[$specialWar][0];
|
|
||||||
$josaUl = JosaUtil::pick($specialWarName, '을');
|
|
||||||
pushGeneralHistory($general, "<C>●</>{$year}년 {$month}월:특기 【<b><C>{$specialWarName}</></b>】{$josaUl} 습득");
|
|
||||||
pushGenLog($general, ["<C>●</>특기 【<b><L>{$specialWarName}</></b>】{$josaUl} 익혔습니다!"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "경험치1000":
|
case "경험치1000":
|
||||||
$text = $btn." 지급!";
|
$text = $btn . " 지급!";
|
||||||
foreach($genlist as $generalID){
|
foreach ($genlist as $generalID) {
|
||||||
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
$msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
$msg->send(true);
|
$msg->send(true);
|
||||||
}
|
}
|
||||||
$db->update('general',[
|
$db->update('general', [
|
||||||
'experience'=>$db->sqleval('experience+1000')
|
'experience' => $db->sqleval('experience+1000')
|
||||||
], '`no` IN %li', $genlist);
|
], '`no` IN %li', $genlist);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "공헌치1000":
|
case "공헌치1000":
|
||||||
$text = $btn." 지급!";
|
$text = $btn . " 지급!";
|
||||||
foreach($genlist as $generalID){
|
foreach ($genlist as $generalID) {
|
||||||
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
$msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
$msg->send(true);
|
$msg->send(true);
|
||||||
}
|
}
|
||||||
$db->update('general',[
|
$db->update('general', [
|
||||||
'dedication'=>$db->sqleval('dedication+1000')
|
'dedication' => $db->sqleval('dedication+1000')
|
||||||
], '`no` IN %li', $genlist);
|
], '`no` IN %li', $genlist);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "보숙10000":
|
case "보숙10000":
|
||||||
$text = "보병숙련도+10000 지급!";
|
$text = "보병숙련도+10000 지급!";
|
||||||
foreach($genlist as $generalID){
|
foreach ($genlist as $generalID) {
|
||||||
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
$msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
$msg->send(true);
|
$msg->send(true);
|
||||||
}
|
}
|
||||||
$db->update('general',[
|
$db->update('general', [
|
||||||
'dex0'=>$db->sqleval('dex0+10000')
|
'dex1' => $db->sqleval('dex1+10000')
|
||||||
], '`no` IN %li', $genlist);
|
], '`no` IN %li', $genlist);
|
||||||
break;
|
break;
|
||||||
case "궁숙10000":
|
case "궁숙10000":
|
||||||
$text = "궁병숙련도+10000 지급!";
|
$text = "궁병숙련도+10000 지급!";
|
||||||
foreach($genlist as $generalID){
|
foreach ($genlist as $generalID) {
|
||||||
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
$msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
$msg->send(true);
|
$msg->send(true);
|
||||||
}
|
}
|
||||||
$db->update('general',[
|
$db->update('general', [
|
||||||
'dex10'=>$db->sqleval('dex10+10000')
|
'dex2' => $db->sqleval('dex2+10000')
|
||||||
], '`no` IN %li', $genlist);
|
], '`no` IN %li', $genlist);
|
||||||
break;
|
break;
|
||||||
case "기숙10000":
|
case "기숙10000":
|
||||||
$src = MessageTarget::buildQuick($session->generalID);
|
$src = MessageTarget::buildQuick($session->generalID);
|
||||||
$text = "기병숙련도+10000 지급!";
|
$text = "기병숙련도+10000 지급!";
|
||||||
foreach($genlist as $generalID){
|
foreach ($genlist as $generalID) {
|
||||||
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
$msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
$msg->send(true);
|
$msg->send(true);
|
||||||
}
|
}
|
||||||
$db->update('general',[
|
$db->update('general', [
|
||||||
'dex20'=>$db->sqleval('dex20+10000')
|
'dex3' => $db->sqleval('dex3+10000')
|
||||||
], '`no` IN %li', $genlist);
|
], '`no` IN %li', $genlist);
|
||||||
break;
|
break;
|
||||||
case "귀숙10000":
|
case "귀숙10000":
|
||||||
$src = MessageTarget::buildQuick($session->generalID);
|
$src = MessageTarget::buildQuick($session->generalID);
|
||||||
$text = "귀병숙련도+10000 지급!";
|
$text = "귀병숙련도+10000 지급!";
|
||||||
foreach($genlist as $generalID){
|
foreach ($genlist as $generalID) {
|
||||||
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
$msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
$msg->send(true);
|
$msg->send(true);
|
||||||
}
|
}
|
||||||
$db->update('general',[
|
$db->update('general', [
|
||||||
'dex30'=>$db->sqleval('dex30+10000')
|
'dex4' => $db->sqleval('dex4+10000')
|
||||||
], '`no` IN %li', $genlist);
|
], '`no` IN %li', $genlist);
|
||||||
break;
|
break;
|
||||||
case "차숙10000":
|
case "차숙10000":
|
||||||
$src = MessageTarget::buildQuick($session->generalID);
|
$src = MessageTarget::buildQuick($session->generalID);
|
||||||
$text = "차병숙련도+10000 지급!";
|
$text = "차병숙련도+10000 지급!";
|
||||||
foreach($genlist as $generalID){
|
foreach ($genlist as $generalID) {
|
||||||
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
$msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
$msg->send(true);
|
$msg->send(true);
|
||||||
}
|
}
|
||||||
$db->update('general',[
|
$db->update('general', [
|
||||||
'dex40'=>$db->sqleval('dex40+10000')
|
'dex5' => $db->sqleval('dex5+10000')
|
||||||
], '`no` IN %li', $genlist);
|
], '`no` IN %li', $genlist);
|
||||||
break;
|
break;
|
||||||
case "접속 허용":
|
case "접속 허용":
|
||||||
$db->update('general',[
|
$db->update('general_access_log', [
|
||||||
'con'=>0
|
'refresh_score' => 0
|
||||||
], '`no` IN %li', $genlist);
|
], '`general_id` IN %li', $genlist);
|
||||||
break;
|
break;
|
||||||
case "접속 제한":
|
case "접속 제한":
|
||||||
$db->update('general',[
|
$db->update('general_access_log', [
|
||||||
'con'=>1000
|
'refresh_score' => 1000
|
||||||
], '`no` IN %li', $genlist);
|
], '`general_id` IN %li', $genlist);
|
||||||
break;
|
break;
|
||||||
case "메세지 전달":
|
case "메세지 전달":
|
||||||
$text = $msg;
|
$text = $msg ?? '';
|
||||||
foreach($genlist as $generalID){
|
foreach ($genlist as $generalID) {
|
||||||
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
$msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
$msg->send(true);
|
$msg->send(true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "무기지급":
|
|
||||||
|
|
||||||
if($weap == 0) {
|
|
||||||
$text = "무기 회수!";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$text = getWeapName($weap)." 지급!";
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach($genlist as $generalID){
|
|
||||||
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
|
||||||
$msg->send(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if($weap == 0){
|
|
||||||
$db->update('general', [
|
|
||||||
'weap'=>0
|
|
||||||
], '`no` IN %li', $genlist);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$db->update('general', [
|
|
||||||
'weap'=>$weap
|
|
||||||
], '`no` IN %li AND weap < %i', $genlist, $weap);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "책지급":
|
|
||||||
if($weap == 0) {
|
|
||||||
$text = "책 회수!";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$text = getBookName($weap)." 지급!";
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach($genlist as $generalID){
|
|
||||||
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
|
||||||
$msg->send(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if($weap == 0){
|
|
||||||
$db->update('general', [
|
|
||||||
'book'=>0
|
|
||||||
], '`no` IN %li', $genlist);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$db->update('general', [
|
|
||||||
'book'=>$weap
|
|
||||||
], '`no` IN %li AND book < %i', $genlist, $weap);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "말지급":
|
|
||||||
if($weap == 0) {
|
|
||||||
$text = "말 회수!";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$text = getHorseName($weap)." 지급!";
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach($genlist as $generalID){
|
|
||||||
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
|
||||||
$msg->send(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if($weap == 0){
|
|
||||||
$db->update('general', [
|
|
||||||
'horse'=>0
|
|
||||||
], '`no` IN %li', $genlist);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$db->update('general', [
|
|
||||||
'horse'=>$weap
|
|
||||||
], '`no` IN %li AND horse < %i', $genlist, $weap);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "도구지급":
|
|
||||||
if($weap == 0) {
|
|
||||||
$text = "특수도구 회수!";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$text = getItemName($weap)." 지급!";
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach($genlist as $generalID){
|
|
||||||
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
|
||||||
$msg->send(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if($weap == 0){
|
|
||||||
$db->update('general', [
|
|
||||||
'item'=>0
|
|
||||||
], '`no` IN %li', $genlist);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$db->update('general', [
|
|
||||||
'item'=>$weap
|
|
||||||
], '`no` IN %li AND item < %i', $genlist, $weap);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "NPC해제":
|
|
||||||
$db->update('general', [
|
|
||||||
'npc'=>1
|
|
||||||
], '`no` IN %li', $genlist);
|
|
||||||
break;
|
|
||||||
case "하야입력":
|
case "하야입력":
|
||||||
$db->update('general', [
|
$db->update('general_turn', [
|
||||||
'turn0'=>EncodeCommand(0, 0, 0, 45)
|
'action' => 'che_하야',
|
||||||
], '`no` IN %li', $genlist);
|
'arg' => '{}',
|
||||||
|
'brief' => '하야',
|
||||||
|
], 'general_id IN %li AND turn_idx = 0', $genlist);
|
||||||
break;
|
break;
|
||||||
case "방랑해산":
|
case "방랑해산":
|
||||||
$db->update('general', [
|
$db->update('general_turn', [
|
||||||
'turn0'=>EncodeCommand(0, 0, 0, 47),
|
'action' => 'che_방랑',
|
||||||
'turn1'=>EncodeCommand(0, 0, 0, 56)
|
'arg' => '{}',
|
||||||
], '`no` IN %li', $genlist);
|
'brief' => '방랑',
|
||||||
break;
|
], 'general_id IN %li AND turn_idx = 0', $genlist);
|
||||||
case "NPC설정":
|
$db->update('general_turn', [
|
||||||
$db->update('general', [
|
'action' => 'che_해산',
|
||||||
'npc'=>2
|
'arg' => '{}',
|
||||||
], '`no` IN %li', $genlist);
|
'brief' => '해산',
|
||||||
break;
|
], 'general_id IN %li AND turn_idx = 1', $genlist);
|
||||||
case "00턴":
|
|
||||||
$turnterm = $gameStor->turnterm;
|
|
||||||
|
|
||||||
foreach($genlist as $generalID){
|
|
||||||
$turntime = getRandTurn($turnterm);
|
|
||||||
$cutTurn = cutTurn($turntime, $turnterm);
|
|
||||||
$db->update('general', [
|
|
||||||
'turntime'=>$curTurn
|
|
||||||
], '`no` IN %li', $genlist);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "랜덤턴":
|
|
||||||
foreach($genlist as $generalID){
|
|
||||||
$turntime = getRandTurn($turnterm);
|
|
||||||
$db->update('general', [
|
|
||||||
'turntime'=>$turntime
|
|
||||||
], '`no` IN %li', $genlist);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
header('location:_admin2.php');
|
header('location:_admin2.php');
|
||||||
|
|||||||
@@ -1,142 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace sammo;
|
|
||||||
|
|
||||||
include "lib.php";
|
|
||||||
include "func.php";
|
|
||||||
//로그인 검사
|
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
|
||||||
|
|
||||||
if($session->userGrade < 5) {
|
|
||||||
?>
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>관리메뉴</title>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=1024" />
|
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
관리자가 아닙니다.<br>
|
|
||||||
<?=banner()?>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
<?php
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
$db = DB::db();
|
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
|
||||||
$connect=$db->get();
|
|
||||||
|
|
||||||
$conlimit = $gameStor->conlimit;
|
|
||||||
?>
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>멀티관리</title>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=1024" />
|
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
|
||||||
<tr><td>멀 티 관 리<br><?=backButton()?></td></tr>
|
|
||||||
</table>
|
|
||||||
<form name=form1 method=post action=_admin4_submit.php>
|
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
|
||||||
<tr>
|
|
||||||
<td width=80 align=center rowspan=3>회원선택<br><br><font color=cyan>NPC</font><br><font color=skyblue>NPC유저</font><br><font color=red>접속제한</font><br><b style=background-color:red;>블럭회원</b></td>
|
|
||||||
<td width=105 rowspan=3>
|
|
||||||
<?php
|
|
||||||
|
|
||||||
echo "
|
|
||||||
<select name=genlist[] size=20 multiple style='color:white;background-color:black;font-size:13px'>";
|
|
||||||
|
|
||||||
foreach($db->query('SELECT no,name,npc,block,con from general where ip!=\'\' order by npc,ip') as $general){
|
|
||||||
$style = "style=;";
|
|
||||||
if($general['block'] > 0) { $style .= "background-color:red;"; }
|
|
||||||
if($general['npc'] >= 2) { $style .= "color:cyan;"; }
|
|
||||||
elseif($general['npc'] == 1) { $style .= "color:skyblue;"; }
|
|
||||||
if($general['con'] > $conlimit) { $style .= "color:red;"; }
|
|
||||||
|
|
||||||
echo "
|
|
||||||
<option value={$general['no']} $style>{$general['name']}</option>";
|
|
||||||
}
|
|
||||||
|
|
||||||
echo "
|
|
||||||
</select>";
|
|
||||||
?>
|
|
||||||
</td>
|
|
||||||
<td width=100 align=center>블럭</td>
|
|
||||||
<td width=504>
|
|
||||||
<input type=submit name=btn value='블럭 해제'><input type=submit name=btn value='1단계 블럭'><input type=submit name=btn value='2단계 블럭'><input type=submit name=btn value='3단계 블럭'><input type=submit name=btn value='무한삭턴'><br>
|
|
||||||
1단계:발언권, 2단계:턴블럭
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align=center>강제 사망</td>
|
|
||||||
<td><input type=submit name=btn value='강제 사망'></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align=center>메세지 전달</td>
|
|
||||||
<td><input type=textarea size=60 maxlength=255 name=msg style=background-color:black;color:white;><input type=submit name=btn value='메세지 전달'></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
|
||||||
<tr>
|
|
||||||
<td align=center width=100>장수명</td>
|
|
||||||
<td align=center width=180>최근로그인</td>
|
|
||||||
<td align=center width=129>IP</td>
|
|
||||||
<td align=center width=100>ID</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<?php
|
|
||||||
$query = "select substring_index(ip,'.',3) as ip2 from general where ip!='' and npc<2 group by ip2 having count(*)>1";
|
|
||||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
|
||||||
$ipCount = MYDB_num_rows($result);
|
|
||||||
$genName = "";
|
|
||||||
$genDate = "";
|
|
||||||
$genIP = "";
|
|
||||||
$genID = "";
|
|
||||||
for($i=0; $i < $ipCount; $i++) {
|
|
||||||
$ip = MYDB_fetch_array($result);
|
|
||||||
|
|
||||||
$query = "select name,ip,lastconnect,owner,block from general where ip like '{$ip['ip2']}%' and npc<2 order by ip";
|
|
||||||
$genResult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
|
||||||
$genCount = MYDB_num_rows($genResult);
|
|
||||||
for($k=0; $k < $genCount; $k++) {
|
|
||||||
$gen = MYDB_fetch_array($genResult);
|
|
||||||
if($gen['block'] > 0) $genName .= "<font color=magenta>{$gen['name']}</font><br>";
|
|
||||||
else $genName .= $gen['name']."<br>";
|
|
||||||
$genDate .= $gen['lastconnect']."<br>";
|
|
||||||
$genIP .= $gen['ip']."<br>";
|
|
||||||
$genID .= $gen['owner']."<br>";
|
|
||||||
}
|
|
||||||
$genName .= "<br>";
|
|
||||||
$genDate .= "<br>";
|
|
||||||
$genIP .= "<br>";
|
|
||||||
$genID .= "<br>";
|
|
||||||
}
|
|
||||||
echo "
|
|
||||||
<td align=right>$genName</td>
|
|
||||||
<td>$genDate</td>
|
|
||||||
<td>$genIP</td>
|
|
||||||
<td>$genID</td>";
|
|
||||||
?>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<?php
|
|
||||||
//NOTE: password의 md5 해시가 같은지 확인하는 방식으로는 앞으로 잡아낼 수 없다. 폐기
|
|
||||||
?>
|
|
||||||
</form>
|
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
|
||||||
<tr><td><?=backButton()?></td></tr>
|
|
||||||
<tr><td><?=banner()?> </td></tr>
|
|
||||||
</table>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace sammo;
|
|
||||||
|
|
||||||
include "lib.php";
|
|
||||||
include "func.php";
|
|
||||||
//로그인 검사
|
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
|
||||||
|
|
||||||
if($session->userGrade < 5) {
|
|
||||||
header('location:_admin4.php');
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
|
|
||||||
$btn = Util::getReq('btn');
|
|
||||||
$genlist = Util::getReq('genlist', 'array_int');
|
|
||||||
$msg = Util::getReq('msg','string', '메시지');
|
|
||||||
|
|
||||||
extractMissingPostToGlobals();
|
|
||||||
|
|
||||||
$db = DB::db();
|
|
||||||
|
|
||||||
//NOTE: 왜 기능이 admin2와 admin4가 같이 있는가?
|
|
||||||
//NOTE: 왜 블럭 시 admin4에선 금쌀을 없애지 않는가?
|
|
||||||
switch($btn) {
|
|
||||||
case "블럭 해제":
|
|
||||||
DB::db()->query('update general set block=0 where no IN %li', $genlist);
|
|
||||||
break;
|
|
||||||
case "1단계 블럭":
|
|
||||||
$date = date('Y-m-d H:i:s');
|
|
||||||
$db = DB::db();
|
|
||||||
$db->query('update general set block=1,killturn=24 where no IN %li',$genlist);
|
|
||||||
//FIXME: subquery로 하는게 더 빠를 듯.
|
|
||||||
$uid = $db->queryFirstColumn('select owner from general where no IN %li', $genlist);
|
|
||||||
RootDB::db()->query('update member set block_num=block_num+1,block_date=%s where id IN %ls', $date, $uid);
|
|
||||||
break;
|
|
||||||
case "2단계 블럭":
|
|
||||||
$date = date('Y-m-d H:i:s');
|
|
||||||
$db = DB::db();
|
|
||||||
$db->query('update general set block=2,killturn=24 where no IN %li',$genlist);
|
|
||||||
$uid = $db->queryFirstColumn('select owner from general where no IN %li', $genlist);
|
|
||||||
RootDB::db()->query('update member set block_num=block_num+1,block_date=%s where id IN %ls', $date, $uid);
|
|
||||||
break;
|
|
||||||
case "3단계 블럭":
|
|
||||||
$date = date('Y-m-d H:i:s');
|
|
||||||
$db = DB::db();
|
|
||||||
$db->query('update general set block=3,killturn=24 where no IN %li',$genlist);
|
|
||||||
$uid = $db->queryFirstColumn('select owner from general where no IN %li', $genlist);
|
|
||||||
RootDB::db()->query('update member set block_num=block_num+1,block_date=%s where id IN %ls', $date, $uid);
|
|
||||||
break;
|
|
||||||
case "무한삭턴":
|
|
||||||
DB::db()->query('update general set killturn=8000 where no IN %li',$genlist);
|
|
||||||
break;
|
|
||||||
case "강제 사망":
|
|
||||||
$date = date('Y-m-d H:i:s');
|
|
||||||
DB::db()->query('update general set turn0=%s,killturn=0,turntime=%s where no IN %li',EncodeCommand(0, 0, 0, 0),$date, $genlist);
|
|
||||||
break;
|
|
||||||
case "메세지 전달":
|
|
||||||
//TODO:새 갠메 시스템으로 변경
|
|
||||||
$date = date('Y-m-d H:i:s');
|
|
||||||
$src = MessageTarget::buildQuick($session->generalID);
|
|
||||||
for($i=0; $i < count($genlist); $i++) {
|
|
||||||
$msgObj = new Message(
|
|
||||||
Message::MSGTYPE_PRIVATE,
|
|
||||||
$src,
|
|
||||||
MessageTarget::buildQuick($genlist[$i]),
|
|
||||||
$msg,
|
|
||||||
new DateTime(),
|
|
||||||
new \DateTime('9999-12-31'),
|
|
||||||
[]
|
|
||||||
);
|
|
||||||
if($msgObj){
|
|
||||||
$msgObj->send(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
header('location:_admin4.php');
|
|
||||||
|
|
||||||
@@ -1,47 +1,30 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
include "lib.php";
|
include "lib.php";
|
||||||
include "func.php";
|
include "func.php";
|
||||||
|
|
||||||
$type = Util::getReq('type', 'int', 0);
|
/** @var int */
|
||||||
$type2 = Util::getReq('type2', 'int', 0);
|
$type = Util::getPost('type', 'int', 0);
|
||||||
|
/** @var int */
|
||||||
|
$type2 = Util::getPost('type2', 'int', 0);
|
||||||
|
|
||||||
if($type < 0 || $type > 17){
|
if ($type < 0 || $type > 17) {
|
||||||
$type = 0;
|
$type = 0;
|
||||||
}
|
}
|
||||||
if($type2 < 0 || $type2 > 6){
|
if ($type2 < 0 || $type2 > 6) {
|
||||||
$type2 = 0;
|
$type2 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
extractMissingPostToGlobals();
|
|
||||||
|
|
||||||
//로그인 검사
|
//로그인 검사
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
|
||||||
if($session->userGrade < 5) {
|
if ($session->userGrade < 6) {
|
||||||
?>
|
die(requireAdminPermissionHTML());
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>관리메뉴</title>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=1024" />
|
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
관리자가 아닙니다.<br>
|
|
||||||
<?=banner()?>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
<?php
|
|
||||||
exit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$connect=$db->get();
|
|
||||||
|
|
||||||
$sel = [];
|
$sel = [];
|
||||||
$sel2 = [];
|
$sel2 = [];
|
||||||
@@ -51,275 +34,321 @@ $sel2[$type2] = "selected";
|
|||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>일제정보</title>
|
<title>일제정보</title>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta name="color-scheme" content="dark">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
<meta name="viewport" content="width=1024" />
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
|
<?= WebUtil::printDist('ts', 'common', true) ?>
|
||||||
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
<tr><td>일 제 정 보<br><?=closeButton()?></td></tr>
|
<tr>
|
||||||
<tr><td>
|
<td>일 제 정 보<br><?= closeButton() ?></td>
|
||||||
<form name=form1 method=post>정렬순서 :
|
</tr>
|
||||||
<select name=type size=1>
|
<tr>
|
||||||
<option <?=$sel[0]??''?> value=0>국력</option>
|
<td>
|
||||||
<option <?=$sel[1]??''?> value=1>장수</option>
|
<form name=form1 method=post>정렬순서 :
|
||||||
<option <?=$sel[2]??''?> value=2>기술</option>
|
<select name=type size=1>
|
||||||
<option <?=$sel[3]??''?> value=3>국고</option>
|
<option <?= $sel[0] ?? '' ?> value=0>국력</option>
|
||||||
<option <?=$sel[4]??''?> value=4>병량</option>
|
<option <?= $sel[1] ?? '' ?> value=1>장수</option>
|
||||||
<option <?=$sel[5]??''?> value=5>평금</option>
|
<option <?= $sel[2] ?? '' ?> value=2>기술</option>
|
||||||
<option <?=$sel[6]??''?> value=6>평쌀</option>
|
<option <?= $sel[3] ?? '' ?> value=3>국고</option>
|
||||||
<option <?=$sel[7]??''?> value=7>평통</option>
|
<option <?= $sel[4] ?? '' ?> value=4>병량</option>
|
||||||
<option <?=$sel[8]??''?> value=8>평무</option>
|
<option <?= $sel[5] ?? '' ?> value=5>평금</option>
|
||||||
<option <?=$sel[9]??''?> value=9>평지</option>
|
<option <?= $sel[6] ?? '' ?> value=6>평쌀</option>
|
||||||
<option <?=$sel[10]??''?> value=10>평Lv</option>
|
<option <?= $sel[7] ?? '' ?> value=7>평통</option>
|
||||||
<option <?=$sel[11]??''?> value=11>접속률</option>
|
<option <?= $sel[8] ?? '' ?> value=8>평무</option>
|
||||||
<option <?=$sel[12]??''?> value=12>단기접</option>
|
<option <?= $sel[9] ?? '' ?> value=9>평지</option>
|
||||||
<option <?=$sel[13]??''?> value=13>보숙</option>
|
<option <?= $sel[10] ?? '' ?> value=10>평Lv</option>
|
||||||
<option <?=$sel[14]??''?> value=14>궁숙</option>
|
<option <?= $sel[13] ?? '' ?> value=13>보숙</option>
|
||||||
<option <?=$sel[15]??''?> value=15>기숙</option>
|
<option <?= $sel[14] ?? '' ?> value=14>궁숙</option>
|
||||||
<option <?=$sel[16]??''?> value=16>귀숙</option>
|
<option <?= $sel[15] ?? '' ?> value=15>기숙</option>
|
||||||
<option <?=$sel[17]??''?> value=17>차숙</option>
|
<option <?= $sel[16] ?? '' ?> value=16>귀숙</option>
|
||||||
</select>
|
<option <?= $sel[17] ?? '' ?> value=17>차숙</option>
|
||||||
<select name=type2 size=1>
|
</select>
|
||||||
<option <?=$sel2[0]??''?> value=0>국력</option>
|
<select name=type2 size=1>
|
||||||
<option <?=$sel2[1]??''?> value=1>국가별성향</option>
|
<option <?= $sel2[0] ?? '' ?> value=0>국력</option>
|
||||||
<option <?=$sel2[2]??''?> value=2>국가성향</option>
|
<option <?= $sel2[1] ?? '' ?> value=1>국가별성향</option>
|
||||||
<option <?=$sel2[3]??''?> value=3>장수성격</option>
|
<option <?= $sel2[2] ?? '' ?> value=2>국가성향</option>
|
||||||
<option <?=$sel2[4]??''?> value=4>장수특기</option>
|
<option <?= $sel2[3] ?? '' ?> value=3>장수성격</option>
|
||||||
<option <?=$sel2[5]??''?> value=5>병종수</option>
|
<option <?= $sel2[4] ?? '' ?> value=4>장수특기</option>
|
||||||
<option <?=$sel2[6]??''?> value=6>기타</option>
|
<option <?= $sel2[5] ?? '' ?> value=5>병종수</option>
|
||||||
</select>
|
<option <?= $sel2[6] ?? '' ?> value=6>기타</option>
|
||||||
<input type=submit value='정렬하기'>
|
</select>
|
||||||
</form>
|
<input type=submit value='정렬하기'>
|
||||||
<form name=form2 method=post action=_admin5_submit.php>
|
</form>
|
||||||
<select name=nation size=1 style=color:white;background-color:black>";
|
<form name=form2 method=post action=_admin5_submit.php>
|
||||||
<option value=0>재야</option>";
|
<select name=nation size=1 style=color:white;background-color:black>";
|
||||||
<?php
|
<option value=0>재야</option>";
|
||||||
$query = "select nation,name,color,scout,scoutmsg,gennum from nation order by power";
|
<?php
|
||||||
$result = MYDB_query($query, $connect) or Error("aaa_processing.php ".MYDB_error($connect),"");
|
foreach ($db->query('SELECT nation,name,color,scout,gennum from nation order by power DESC') as $nation) {
|
||||||
$count = MYDB_num_rows($result);
|
|
||||||
for($i=1; $i <= $count; $i++) {
|
|
||||||
$nation = MYDB_fetch_array($result);
|
|
||||||
|
|
||||||
echo "
|
echo "
|
||||||
<option value={$nation['nation']}>{$nation['name']}</option>";
|
<option value={$nation['nation']}>{$nation['name']}</option>";
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</select>
|
</select>
|
||||||
<input type=submit name=btn value='국가변경'>
|
<input type=submit name=btn value='국가변경'>
|
||||||
</form>
|
</form>
|
||||||
</td></tr>
|
</td>
|
||||||
</table>
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
<table align=center width=1600 class="tb_layout bg0">
|
<table align=center width=1600 class="tb_layout bg0">
|
||||||
<tr id=bg1>
|
<tr class='bg1'>
|
||||||
<td align=center>국명</td>
|
<td align=center>국명</td>
|
||||||
<td align=center>접률</td>
|
<td align=center>국력</td>
|
||||||
<td align=center>단접</td>
|
<td align=center>장수</td>
|
||||||
<td align=center>국력</td>
|
<td align=center>속령</td>
|
||||||
<td align=center>단합</td>
|
<td align=center>기술</td>
|
||||||
<td align=center>장수</td>
|
<td align=center>전략</td>
|
||||||
<td align=center>속령</td>
|
<td align=center>국고</td>
|
||||||
<td align=center>기술</td>
|
<td align=center>병량</td>
|
||||||
<td align=center>전략</td>
|
<td align=center>평금</td>
|
||||||
<td align=center>국고</td>
|
<td align=center>평쌀</td>
|
||||||
<td align=center>병량</td>
|
<td align=center>평통</td>
|
||||||
<td align=center>평금</td>
|
<td align=center>평무</td>
|
||||||
<td align=center>평쌀</td>
|
<td align=center>평지</td>
|
||||||
<td align=center>평통</td>
|
<td align=center>평Lv</td>
|
||||||
<td align=center>평무</td>
|
<td align=center>보숙</td>
|
||||||
<td align=center>평지</td>
|
<td align=center>궁숙</td>
|
||||||
<td align=center>평Lv</td>
|
<td align=center>기숙</td>
|
||||||
<td align=center>보숙</td>
|
<td align=center>귀숙</td>
|
||||||
<td align=center>궁숙</td>
|
<td align=center>차숙</td>
|
||||||
<td align=center>기숙</td>
|
<td align=center>총병</td>
|
||||||
<td align=center>귀숙</td>
|
<td align=center>인구</td>
|
||||||
<td align=center>차숙</td>
|
<td align=center>인구율</td>
|
||||||
<td align=center>총병</td>
|
<td align=center>농업</td>
|
||||||
<td align=center>인구</td>
|
<td align=center>상업</td>
|
||||||
<td align=center>인구율</td>
|
<td align=center>치안</td>
|
||||||
<td align=center>농업</td>
|
<td align=center>성벽</td>
|
||||||
<td align=center>상업</td>
|
<td align=center>수비</td>
|
||||||
<td align=center>치안</td>
|
<td align=center>국명</td>
|
||||||
<td align=center>성벽</td>
|
</tr>
|
||||||
<td align=center>수비</td>
|
<?php
|
||||||
<td align=center>국명</td>
|
$query = "
|
||||||
</tr>
|
|
||||||
<?php
|
|
||||||
$query = "
|
|
||||||
SELECT
|
SELECT
|
||||||
A.nation,
|
A.nation,
|
||||||
A.name,
|
A.name,
|
||||||
A.power,
|
A.power,
|
||||||
A.chemi,
|
|
||||||
A.color,
|
A.color,
|
||||||
A.tech,
|
A.tech,
|
||||||
A.sabotagelimit,
|
A.strategic_cmd_limit,
|
||||||
A.gold,
|
A.gold,
|
||||||
A.rice,
|
A.rice,
|
||||||
COUNT(B.nation) AS gennum,
|
COUNT(B.nation) AS gennum,
|
||||||
ROUND(AVG(B.connect), 1) AS connect,
|
ROUND(AVG(B.dex1)) AS dex1,
|
||||||
ROUND(AVG(B.con), 1) AS con,
|
ROUND(AVG(B.dex2)) AS dex2,
|
||||||
ROUND(AVG(B.dex0)) AS dex0,
|
ROUND(AVG(B.dex3)) AS dex3,
|
||||||
ROUND(AVG(B.dex10)) AS dex10,
|
ROUND(AVG(B.dex4)) AS dex4,
|
||||||
ROUND(AVG(B.dex20)) AS dex20,
|
ROUND(AVG(B.dex5)) AS dex5
|
||||||
ROUND(AVG(B.dex30)) AS dex30,
|
|
||||||
ROUND(AVG(B.dex40)) AS dex40
|
|
||||||
FROM nation A, general B
|
FROM nation A, general B
|
||||||
WHERE A.nation=B.nation
|
WHERE A.nation=B.nation
|
||||||
GROUP BY B.nation
|
GROUP BY B.nation
|
||||||
";
|
";
|
||||||
|
|
||||||
switch($type) {
|
switch ($type) {
|
||||||
case 0: $query .= " order by power desc"; break;
|
case 0:
|
||||||
case 1: $query .= " order by gennum desc"; break;
|
$query .= " order by power desc";
|
||||||
case 2: $query .= " order by A.tech desc"; break;
|
break;
|
||||||
case 3: $query .= " order by A.gold desc"; break;
|
case 1:
|
||||||
case 4: $query .= " order by A.rice desc"; break;
|
$query .= " order by gennum desc";
|
||||||
case 5: $query .= " order by avg(B.gold) desc"; break;
|
break;
|
||||||
case 6: $query .= " order by avg(B.rice) desc"; break;
|
case 2:
|
||||||
case 7: $query .= " order by avg(B.leader) desc"; break;
|
$query .= " order by A.tech desc";
|
||||||
case 8: $query .= " order by avg(B.power) desc"; break;
|
break;
|
||||||
case 9: $query .= " order by avg(B.intel) desc"; break;
|
case 3:
|
||||||
case 10: $query .= " order by avg(B.explevel) desc"; break;
|
$query .= " order by A.gold desc";
|
||||||
case 11: $query .= " order by avg(B.connect) desc"; break;
|
break;
|
||||||
case 12: $query .= " order by avg(B.con) desc"; break;
|
case 4:
|
||||||
case 13: $query .= " order by avg(B.dex0) desc"; break;
|
$query .= " order by A.rice desc";
|
||||||
case 14: $query .= " order by avg(B.dex10) desc"; break;
|
break;
|
||||||
case 15: $query .= " order by avg(B.dex20) desc"; break;
|
case 5:
|
||||||
case 16: $query .= " order by avg(B.dex30) desc"; break;
|
$query .= " order by avg(B.gold) desc";
|
||||||
case 17: $query .= " order by avg(B.dex40) desc"; break;
|
break;
|
||||||
}
|
case 6:
|
||||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
$query .= " order by avg(B.rice) desc";
|
||||||
$nationCount = MYDB_num_rows($result);
|
break;
|
||||||
for($i=0; $i < $nationCount; $i++) {
|
case 7:
|
||||||
$nation = MYDB_fetch_array($result);
|
$query .= " order by avg(B.leadership) desc";
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
$query .= " order by avg(B.strength) desc";
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
$query .= " order by avg(B.intel) desc";
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
$query .= " order by avg(B.explevel) desc";
|
||||||
|
break;
|
||||||
|
case 13:
|
||||||
|
$query .= " order by avg(B.dex1) desc";
|
||||||
|
break;
|
||||||
|
case 14:
|
||||||
|
$query .= " order by avg(B.dex2) desc";
|
||||||
|
break;
|
||||||
|
case 15:
|
||||||
|
$query .= " order by avg(B.dex3) desc";
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
$query .= " order by avg(B.dex4) desc";
|
||||||
|
break;
|
||||||
|
case 17:
|
||||||
|
$query .= " order by avg(B.dex5) desc";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
foreach ($db->query($query) as $nation) {
|
||||||
|
$gen = $db->queryFirstRow('SELECT COUNT(*) as cnt,
|
||||||
|
ROUND(AVG(gold)) as avgg,
|
||||||
|
ROUND(AVG(rice)) as avgr,
|
||||||
|
SUM(leadership) as leadership, ROUND(AVG(leadership), 1) as avgl,
|
||||||
|
ROUND(AVG(strength), 1) as avgs,
|
||||||
|
ROUND(AVG(intel), 1) as avgi,
|
||||||
|
ROUND(AVG(explevel), 1) as avge,
|
||||||
|
SUM(crew) as crew
|
||||||
|
from general where nation=%i', $nation['nation']);
|
||||||
|
|
||||||
$query = "select COUNT(*) as cnt,
|
$city = $db->queryFirstRow('SELECT COUNT(*) as cnt,
|
||||||
ROUND(AVG(gold)) as avgg,
|
SUM(pop) as pop, SUM(pop_max) as pop_max,
|
||||||
ROUND(AVG(rice)) as avgr,
|
ROUND(SUM(pop)/SUM(pop_max)*100, 2) as rate,
|
||||||
SUM(leader) as leader, ROUND(AVG(leader), 1) as avgl,
|
trust,
|
||||||
ROUND(AVG(power), 1) as avgp,
|
ROUND(SUM(agri)/SUM(agri_max)*100, 2) as agri,
|
||||||
ROUND(AVG(intel), 1) as avgi,
|
ROUND(SUM(comm)/SUM(comm_max)*100, 2) as comm,
|
||||||
ROUND(AVG(explevel), 1) as avge,
|
ROUND(SUM(secu)/SUM(secu_max)*100, 2) as secu,
|
||||||
SUM(crew) as crew
|
ROUND(SUM(wall)/SUM(wall_max)*100, 2) as wall,
|
||||||
from general where nation='{$nation['nation']}'";
|
ROUND(SUM(def)/SUM(def_max)*100, 2) as def
|
||||||
$genResult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
from city where nation=%i', $nation['nation']);
|
||||||
$gen = MYDB_fetch_array($genResult);
|
|
||||||
|
|
||||||
$query = "select COUNT(*) as cnt,
|
echo "
|
||||||
SUM(pop) as pop, SUM(pop2) as pop2,
|
|
||||||
ROUND(SUM(pop)/SUM(pop2)*100, 2) as rate,
|
|
||||||
ROUND(SUM(agri)/SUM(agri2)*100, 2) as agri,
|
|
||||||
ROUND(SUM(comm)/SUM(comm2)*100, 2) as comm,
|
|
||||||
ROUND(SUM(secu)/SUM(secu2)*100, 2) as secu,
|
|
||||||
ROUND(SUM(wall)/SUM(wall2)*100, 2) as wall,
|
|
||||||
ROUND(SUM(def)/SUM(def2)*100, 2) as def
|
|
||||||
from city where nation='{$nation['nation']}'";
|
|
||||||
$cityResult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
|
||||||
$city = MYDB_fetch_array($cityResult);
|
|
||||||
|
|
||||||
echo "
|
|
||||||
<tr>
|
<tr>
|
||||||
<td align=center style=background-color:{$nation['color']};color:".newColor($nation['color']).";>{$nation['name']}</td>
|
<td align=center style=background-color:{$nation['color']};color:" . newColor($nation['color']) . ";>{$nation['name']}</td>
|
||||||
<td align=center> {$nation['connect']} </td>
|
|
||||||
<td align=center> {$nation['con']} </td>
|
|
||||||
<td align=center> {$nation['power']} </td>
|
<td align=center> {$nation['power']} </td>
|
||||||
<td align=center> {$nation['chemi']} </td>
|
|
||||||
<td align=center> {$gen['cnt']} </td>
|
<td align=center> {$gen['cnt']} </td>
|
||||||
<td align=center> {$city['cnt']} </td>
|
<td align=center> {$city['cnt']} </td>
|
||||||
<td align=center> {$nation['tech']} </td>
|
<td align=right> " . sprintf('%.1f', $nation['tech']) . " </td>
|
||||||
<td align=center> {$nation['sabotagelimit']} </td>
|
<td align=center> {$nation['strategic_cmd_limit']} </td>
|
||||||
<td align=center> {$nation['gold']} </td>
|
<td align=center> {$nation['gold']} </td>
|
||||||
<td align=center> {$nation['rice']} </td>
|
<td align=center> {$nation['rice']} </td>
|
||||||
<td align=center> {$gen['avgg']} </td>
|
<td align=right> {$gen['avgg']} </td>
|
||||||
<td align=center> {$gen['avgr']} </td>
|
<td align=right> {$gen['avgr']} </td>
|
||||||
<td align=center> {$gen['avgl']} </td>
|
<td align=right> {$gen['avgl']} </td>
|
||||||
<td align=center> {$gen['avgp']} </td>
|
<td align=right> {$gen['avgs']} </td>
|
||||||
<td align=center> {$gen['avgi']} </td>
|
<td align=right> {$gen['avgi']} </td>
|
||||||
<td align=center> {$gen['avge']} </td>
|
<td align=right> {$gen['avge']} </td>
|
||||||
<td align=center> {$nation['dex0']} </td>
|
<td align=right> {$nation['dex1']} </td>
|
||||||
<td align=center> {$nation['dex10']} </td>
|
<td align=right> {$nation['dex2']} </td>
|
||||||
<td align=center> {$nation['dex20']} </td>
|
<td align=right> {$nation['dex3']} </td>
|
||||||
<td align=center> {$nation['dex30']} </td>
|
<td align=right> {$nation['dex4']} </td>
|
||||||
<td align=center> {$nation['dex40']} </td>
|
<td align=right> {$nation['dex5']} </td>
|
||||||
<td align=center> {$gen['crew']}/{$gen['leader']}00 </td>
|
<td align=right> {$gen['crew']}/{$gen['leadership']}00 </td>
|
||||||
<td align=center> {$city['pop']}/{$city['pop2']} </td>
|
<td align=center> {$city['pop']}/{$city['pop_max']} </td>
|
||||||
<td align=center> {$city['rate']}% </td>
|
<td align=center> " . sprintf('%.1f', $city['pop'] / Util::valueFit($city['pop_max'], 1) * 100) . "% </td>
|
||||||
<td align=center> {$city['agri']}% </td>
|
<td align=center> {$city['agri']}% </td>
|
||||||
<td align=center> {$city['comm']}% </td>
|
<td align=center> {$city['comm']}% </td>
|
||||||
<td align=center> {$city['secu']}% </td>
|
<td align=center> {$city['secu']}% </td>
|
||||||
<td align=center> {$city['wall']}% </td>
|
<td align=center> {$city['wall']}% </td>
|
||||||
<td align=center> {$city['def']}% </td>
|
<td align=center> {$city['def']}% </td>
|
||||||
<td align=center style=background-color:{$nation['color']};color:".newColor($nation['color']).";>{$nation['name']}</td>
|
<td align=center style=background-color:{$nation['color']};color:" . newColor($nation['color']) . ";>{$nation['name']}</td>
|
||||||
</tr>
|
</tr>
|
||||||
";
|
";
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
</table>
|
</table>
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
<tr><td><?=getSabotageLogRecent(20)?></td></tr>
|
<tr>
|
||||||
</table>
|
<td><?= getSabotageLogRecent(20) ?></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
<table align=center width=1760 class="tb_layout bg0">
|
<table align=center width=1760 class="tb_layout bg0">
|
||||||
<tr id=bg1>
|
<tr class='bg1'>
|
||||||
<td width=30 align=center>년</td>
|
<td width=30 align=center>년</td>
|
||||||
<td width=30 align=center>월</td>
|
<td width=30 align=center>월</td>
|
||||||
<td width=50 align=center>국가수</td>
|
<td width=50 align=center>국가수</td>
|
||||||
<td width=50 align=center>장수수</td>
|
<td width=50 align=center>장수수</td>
|
||||||
<?php
|
<?php
|
||||||
switch($type2) {
|
switch ($type2) {
|
||||||
default:
|
default:
|
||||||
case 0: echo "<td width=1600>국력(국력,장수수,도시수,인구/100,최대인구/100,국가자원/100,장수자원/100,능력치,숙련/1000,경험공헌/100)</td>"; break;
|
case 0:
|
||||||
case 1: echo "<td width=1600>국가별성향</td>"; break;
|
echo "<td width=1600>국력(국력,장수수,도시수,인구/100,최대인구/100,국가자원/100,장수자원/100,능력치,숙련/1000,경험공헌/100)</td>";
|
||||||
case 2: echo "<td width=1600>국가성향</td>"; break;
|
break;
|
||||||
case 3: echo "<td width=1600>장수성격</td>"; break;
|
case 1:
|
||||||
case 4: echo "<td width=1600>장수특기</td>"; break;
|
echo "<td width=1600>국가별성향</td>";
|
||||||
case 5: echo "<td width=1600>병종수</td>"; break;
|
break;
|
||||||
case 6: echo "<td width=1600>기타</td>"; break;
|
case 2:
|
||||||
}
|
echo "<td width=1600>국가성향</td>";
|
||||||
?>
|
break;
|
||||||
</tr>
|
case 3:
|
||||||
<?php
|
echo "<td width=1600>장수성격</td>";
|
||||||
$query = "select * from statistic where month=1 or no=1";
|
break;
|
||||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
case 4:
|
||||||
$count = MYDB_num_rows($result);
|
echo "<td width=1600>장수특기</td>";
|
||||||
for($i=0; $i < $count; $i++) {
|
break;
|
||||||
$stat = MYDB_fetch_array($result);
|
case 5:
|
||||||
|
echo "<td width=1600>병종수</td>";
|
||||||
echo "
|
break;
|
||||||
|
case 6:
|
||||||
|
echo "<td width=1600>기타</td>";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tr>
|
||||||
|
<?php
|
||||||
|
foreach ($db->query('SELECT * from statistic where month=1 or no=1') as $stat) {
|
||||||
|
echo "
|
||||||
<tr>
|
<tr>
|
||||||
<td align=center>{$stat['year']}</td>
|
<td align=center>{$stat['year']}</td>
|
||||||
<td align=center>{$stat['month']}</td>
|
<td align=center>{$stat['month']}</td>
|
||||||
<td align=center>{$stat['nation_count']}</td>
|
<td align=center>{$stat['nation_count']}</td>
|
||||||
<td align=center>{$stat['gen_count']}</td>
|
<td align=center>{$stat['gen_count']}</td>
|
||||||
";
|
";
|
||||||
switch($type2) {
|
switch ($type2) {
|
||||||
default:
|
default:
|
||||||
case 0: echo "<td>{$stat['power_hist']}</td>"; break;
|
case 0:
|
||||||
case 1: echo "<td>{$stat['nation_name']}</td>"; break;
|
echo "<td>{$stat['power_hist']}</td>";
|
||||||
case 2: echo "<td>{$stat['nation_hist']}</td>"; break;
|
break;
|
||||||
case 3: echo "<td>{$stat['personal_hist']}</td>"; break;
|
case 1:
|
||||||
case 4: echo "<td>{$stat['special_hist']}</td>"; break;
|
echo "<td>{$stat['nation_name']}</td>";
|
||||||
case 5: echo "<td>{$stat['crewtype']}</td>"; break;
|
break;
|
||||||
case 6: echo "<td>{$stat['etc']}</td>"; break;
|
case 2:
|
||||||
}
|
echo "<td>{$stat['nation_hist']}</td>";
|
||||||
|
break;
|
||||||
echo "
|
case 3:
|
||||||
|
echo "<td>{$stat['personal_hist']}</td>";
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
echo "<td>{$stat['special_hist']}</td>";
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
echo "<td>{$stat['crewtype']}</td>";
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
echo "<td>{$stat['etc']}</td>";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "
|
||||||
</tr>
|
</tr>
|
||||||
";
|
";
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
<tr><td><?=closeButton()?></td></tr>
|
<tr>
|
||||||
<tr><td><?=banner()?> </td></tr>
|
<td><?= closeButton() ?></td>
|
||||||
</table>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><?= banner() ?> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
|
||||||
|
</html>
|
||||||
@@ -1,42 +1,49 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
include "lib.php";
|
include "lib.php";
|
||||||
include "func.php";
|
include "func.php";
|
||||||
|
|
||||||
$btn = Util::getReq('btn');
|
$btn = Util::getPost('btn');
|
||||||
$nation = Util::getReq('nation', 'int');
|
$nation = Util::getPost('nation', 'int');
|
||||||
|
|
||||||
extractMissingPostToGlobals();
|
|
||||||
|
|
||||||
//로그인 검사
|
//로그인 검사
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
$userID = Session::getUserID();
|
$userID = Session::getUserID();
|
||||||
|
|
||||||
if($session->userGrade < 5) {
|
if ($session->userGrade < 6) {
|
||||||
header('location:_admin5.php');
|
header('location:_admin5.php');
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$connect=$db->get();
|
|
||||||
|
|
||||||
switch($btn) {
|
switch ($btn) {
|
||||||
case "국가변경":
|
case "국가변경":
|
||||||
if($nation == 0) {
|
$oldNation = $db->queryFirstField('SELECT nation FROM general WHERE owner=%i', $userID);
|
||||||
|
if ($nation == 0) {
|
||||||
$db->update('general', [
|
$db->update('general', [
|
||||||
'nation'=>0,
|
'nation' => 0,
|
||||||
'level'=>0,
|
'officer_level' => 0,
|
||||||
|
'officer_city' => 0
|
||||||
], 'owner=%i', $userID);
|
], 'owner=%i', $userID);
|
||||||
} else {
|
} else {
|
||||||
$db->update('general', [
|
$db->update('general', [
|
||||||
'nation'=>$nation,
|
'nation' => $nation,
|
||||||
'level'=>1,
|
'officer_level' => 1,
|
||||||
|
'officer_city' => 0
|
||||||
], 'owner=%i', $userID);
|
], 'owner=%i', $userID);
|
||||||
|
$db->update('nation', [
|
||||||
|
'gennum' => $db->sqleval('gennum + 1')
|
||||||
|
], 'nation=%i', $oldNation);
|
||||||
|
}
|
||||||
|
if ($oldNation != 0) {
|
||||||
|
$db->update('nation', [
|
||||||
|
'gennum' => $db->sqleval('gennum - 1')
|
||||||
|
], 'nation=%i', $oldNation);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
header('location:_admin5.php');
|
header('location:_admin5.php');
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,111 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace sammo;
|
|
||||||
|
|
||||||
include "lib.php";
|
|
||||||
include "func.php";
|
|
||||||
|
|
||||||
$type = Util::getReq('type', 'int', 0);
|
|
||||||
if($type < 0 || $type > 4){
|
|
||||||
$type = 0;
|
|
||||||
}
|
|
||||||
extractMissingPostToGlobals();
|
|
||||||
|
|
||||||
//로그인 검사
|
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
|
||||||
|
|
||||||
if($session->userGrade < 5) {
|
|
||||||
?>
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>관리메뉴</title>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=1024" />
|
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
관리자가 아닙니다.<br>
|
|
||||||
<?=banner()?>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
<?php
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
$db = DB::db();
|
|
||||||
$connect=$db->get();
|
|
||||||
|
|
||||||
$sel[$type] = "selected";
|
|
||||||
|
|
||||||
?>
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>접속정보</title>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=1024" />
|
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
|
||||||
<tr><td>접 속 정 보<br><?=closeButton()?></td></tr>
|
|
||||||
<tr><td><form name=form1 method=post>정렬순서 :
|
|
||||||
<select name=type size=1>
|
|
||||||
<option <?=$sel[0]??''?> value=0>접속률</option>
|
|
||||||
<option <?=$sel[1]??''?> value=1>총갱신</option>
|
|
||||||
<option <?=$sel[2]??''?> value=2>갱신/턴</option>
|
|
||||||
<option <?=$sel[3]??''?> value=3>총로그인</option>
|
|
||||||
<option <?=$sel[4]??''?> value=4>갱신/로그인</option>
|
|
||||||
</select>
|
|
||||||
<input type=submit value='정렬하기'></form>
|
|
||||||
</td></tr>
|
|
||||||
</table>
|
|
||||||
<table align=center class='tb_layout bg0'>
|
|
||||||
<tr id=bg1>
|
|
||||||
<td align=center width=120>장수명</td>
|
|
||||||
<td align=center width=50>접속률</td>
|
|
||||||
<td align=center width=40>시작연령</td>
|
|
||||||
<td align=center width=40>연령</td>
|
|
||||||
<td align=center width=80>총갱신</td>
|
|
||||||
<td align=center width=80>갱신/턴</td>
|
|
||||||
<td align=center width=80>총로그인</td>
|
|
||||||
<td align=center width=100>갱신/로그인</td>
|
|
||||||
</tr>
|
|
||||||
<?php
|
|
||||||
switch($type) {
|
|
||||||
case 0: $query = "select name,connect,startage,age,refcnt,logcnt,refcnt/(age-startage+1)/12 as ref,refcnt/logcnt as log from general order by connect desc limit 0,30"; break;
|
|
||||||
case 1: $query = "select name,connect,startage,age,refcnt,logcnt,refcnt/(age-startage+1)/12 as ref,refcnt/logcnt as log from general order by refcnt desc limit 0,30"; break;
|
|
||||||
case 2: $query = "select name,connect,startage,age,refcnt,logcnt,refcnt/(age-startage+1)/12 as ref,refcnt/logcnt as log from general order by ref desc limit 0,30"; break;
|
|
||||||
case 3: $query = "select name,connect,startage,age,refcnt,logcnt,refcnt/(age-startage+1)/12 as ref,refcnt/logcnt as log from general order by logcnt desc limit 0,30"; break;
|
|
||||||
case 4: $query = "select name,connect,startage,age,refcnt,logcnt,refcnt/(age-startage+1)/12 as ref,refcnt/logcnt as log from general order by log desc limit 0,30"; break;
|
|
||||||
}
|
|
||||||
$genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
|
||||||
$gencount = MYDB_num_rows($genresult);
|
|
||||||
|
|
||||||
for($i=0; $i < $gencount; $i++) {
|
|
||||||
$gen = MYDB_fetch_array($genresult);
|
|
||||||
echo "
|
|
||||||
<tr>
|
|
||||||
<td align=center>{$gen['name']}</td>
|
|
||||||
<td align=center>{$gen['connect']}</td>
|
|
||||||
<td align=center>{$gen['startage']}</td>
|
|
||||||
<td align=center>{$gen['age']}</td>
|
|
||||||
<td align=center>".round($gen['refcnt']/2, 1)."</td>
|
|
||||||
<td align=center>".round($gen['ref']/2,1)."</td>
|
|
||||||
<td align=center>{$gen['logcnt']}</td>
|
|
||||||
<td align=center>".round($gen['log']/2,1)."</td>
|
|
||||||
</tr>";
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
||||||
</table>
|
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
|
||||||
<tr><td><?=closeButton()?></td></tr>
|
|
||||||
<tr><td><?=banner()?> </td></tr>
|
|
||||||
</table>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,147 +1,182 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
|
use sammo\Enums\GeneralQueryMode;
|
||||||
|
|
||||||
include "lib.php";
|
include "lib.php";
|
||||||
include "func.php";
|
include "func.php";
|
||||||
|
|
||||||
$btn = Util::getReq('btn');
|
$btn = Util::getPost('btn');
|
||||||
$gen = Util::getReq('gen', 'int', 0);
|
$gen = Util::getPost('gen', 'int', 0);
|
||||||
$type = Util::getReq('type', 'int', 0);
|
$reqQueryType = Util::getPost('query_type', 'string', null);
|
||||||
|
|
||||||
if($type < 0 || $type > 3){
|
// $queryTypeText, $reqArgType(0=>None, 1=>AdditionalColumn, 2=>rankVal, 3=>aux), $comp
|
||||||
$type = 0;
|
$queryMap = [
|
||||||
|
'turntime' => ['최근턴', 0, function ($lhs, $rhs) {
|
||||||
|
return - ($lhs['turntime'] <=> $rhs['turntime']);
|
||||||
|
}],
|
||||||
|
'recent_war' => ['최근전투', 1, function ($lhs, $rhs) {
|
||||||
|
return - ($lhs['recent_war'] <=> $rhs['recent_war']);
|
||||||
|
}],
|
||||||
|
'name' => ['장수명', 0, function ($lhs, $rhs) {
|
||||||
|
if ($lhs['npc'] !== $rhs['npc']) {
|
||||||
|
return $lhs['npc'] <=> $rhs['npc'];
|
||||||
|
}
|
||||||
|
return $lhs['name'] <=> $rhs['name'];
|
||||||
|
}],
|
||||||
|
'warnum' => ['전투수', 2, function ($lhs, $rhs) {
|
||||||
|
return - ($lhs['warnum'] <=> $rhs['warnum']);
|
||||||
|
}]
|
||||||
|
];
|
||||||
|
|
||||||
|
if ($reqQueryType === null || !key_exists($reqQueryType, $queryMap)) {
|
||||||
|
$reqQueryType = array_key_first($queryMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
extractMissingPostToGlobals();
|
|
||||||
|
|
||||||
//로그인 검사
|
//로그인 검사
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
|
||||||
if($session->userGrade < 5) {
|
if ($session->userGrade < 6) {
|
||||||
?>
|
die(requireAdminPermissionHTML());
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>관리메뉴</title>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=1024" />
|
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
관리자가 아닙니다.<br>
|
|
||||||
<?=banner()?>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
<?php
|
|
||||||
exit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$connect=$db->get();
|
|
||||||
|
|
||||||
if($btn == '정렬하기') {
|
if ($btn == '정렬하기') {
|
||||||
$gen = 0;
|
$gen = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
$sel[$type] = "selected";
|
[$queryTypeText, $reqArgType, $comp] = $queryMap[$reqQueryType];
|
||||||
|
if ($reqArgType === 0) {
|
||||||
|
$generalBasicList = $db->query('SELECT no, name, nation, npc, turntime FROM general');
|
||||||
|
} else if ($reqArgType === 1) {
|
||||||
|
$generalBasicList = $db->query('SELECT no, name, nation, npc, turntime, %b FROM general', $reqQueryType);
|
||||||
|
} else if ($reqArgType === 2) {
|
||||||
|
$generalBasicList = $db->query(
|
||||||
|
'SELECT no, name, nation, npc, turntime, value as %b
|
||||||
|
FROM general LEFT JOIN rank_data
|
||||||
|
ON general.no = rank_data.general_id
|
||||||
|
WHERE rank_data.type = %s',
|
||||||
|
$reqQueryType,
|
||||||
|
$reqQueryType
|
||||||
|
);
|
||||||
|
} else if ($reqArgType === 3) {
|
||||||
|
$generalBasicList = array_map(function ($arr) {
|
||||||
|
$arr['aux'] = Json::decode($arr['aux']);
|
||||||
|
return $arr;
|
||||||
|
}, $db->query('SELECT no, name, nation, npc, turntime, aux FROM general'));
|
||||||
|
} else {
|
||||||
|
throw new \sammo\MustNotBeReachedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
usort($generalBasicList, $comp);
|
||||||
|
|
||||||
|
if (!$gen) {
|
||||||
|
$gen = $generalBasicList[0]['no'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$generalObj = General::createObjFromDB($gen, null, GeneralQueryMode::FullWithAccessLog);
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
|
||||||
<title>로그정보</title>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=1024" />
|
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
|
||||||
<tr><td>로 그 정 보<br><?=closeButton()?></td></tr>
|
|
||||||
<tr><td>
|
|
||||||
<form name=form1 method=post>
|
|
||||||
정렬순서 :
|
|
||||||
<select name=type size=1>
|
|
||||||
<option <?=$sel[0]??''?> value=0>최근턴</option>
|
|
||||||
<option <?=$sel[1]??''?> value=1>최근전투</option>
|
|
||||||
<option <?=$sel[2]??''?> value=2>장수명</option>
|
|
||||||
<option <?=$sel[3]??''?> value=3>전투수</option>
|
|
||||||
</select>
|
|
||||||
<input type=submit name=btn value='정렬하기'>
|
|
||||||
대상장수 :
|
|
||||||
<select name=gen size=1>
|
|
||||||
<?php
|
|
||||||
switch($type) {
|
|
||||||
case 0: $query = "select no,name from general order by turntime desc"; break;
|
|
||||||
case 1: $query = "select no,name from general order by recwar desc"; break;
|
|
||||||
case 2: $query = "select no,name from general order by npc,binary(name)"; break;
|
|
||||||
case 3: $query = "select no,name from general order by warnum desc"; break;
|
|
||||||
}
|
|
||||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
|
||||||
$gencount = MYDB_num_rows($result);
|
|
||||||
|
|
||||||
for($i=0; $i < $gencount; $i++) {
|
<head>
|
||||||
$general = MYDB_fetch_array($result);
|
<title>로그정보</title>
|
||||||
// 선택 없으면 맨 처음 장수
|
<meta charset="UTF-8">
|
||||||
if($gen == 0) {
|
<meta name="color-scheme" content="dark">
|
||||||
$gen = $general['no'];
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
}
|
<meta name="viewport" content="width=1024" />
|
||||||
if($gen == $general['no']) {
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
echo "
|
<?= WebUtil::printDist('ts', 'common', true) ?>
|
||||||
<option selected value={$general['no']}>{$general['name']}</option>";
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
} else {
|
</head>
|
||||||
echo "
|
|
||||||
<option value={$general['no']}>{$general['name']}</option>";
|
<body>
|
||||||
}
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
}
|
<tr>
|
||||||
?>
|
<td>로 그 정 보<br><?= closeButton() ?></td>
|
||||||
</select>
|
</tr>
|
||||||
<input type=submit name=btn value='조회하기'>
|
<tr>
|
||||||
</form>
|
<td>
|
||||||
</td></tr>
|
<form name=form1 method=post>
|
||||||
</table>
|
정렬순서 :
|
||||||
<table width=1000 align=center class='tb_layout bg0'>
|
<select name='query_type' size=1>
|
||||||
<tr>
|
<?php foreach ($queryMap as $queryType => [$queryTypeText,]) : ?>
|
||||||
<td width=50% align=center id=bg1><font color=skyblue size=3>장 수 정 보</font></td>
|
<option <?= $queryType == $reqQueryType ? 'selected' : '' ?> value='<?= $queryType ?>'><?= $queryTypeText ?></option>
|
||||||
<td width=50% align=center id=bg1><font color=orange size=3>-</font></td>
|
<?php endforeach; ?>
|
||||||
</tr>
|
</select>
|
||||||
<tr>
|
<input type=submit name=btn value='정렬하기'>
|
||||||
<td valign=top>
|
대상장수 :
|
||||||
<?php generalInfo($gen); generalInfo2($gen); ?>
|
<select name=gen size=1>
|
||||||
</td>
|
<?php foreach ($generalBasicList as $general) : ?>
|
||||||
<td valign=top>
|
<option <?= $gen == $general['no'] ? 'selected' : '' ?> value='<?= $general['no'] ?>'><?= $general['name'] ?> (<?= substr($general['turntime'], 14, 5) ?>)</option>
|
||||||
</td>
|
<?php endforeach; ?>
|
||||||
</tr>
|
</select>
|
||||||
<tr>
|
<input type=submit name=btn value='조회하기'>
|
||||||
<td align=center id=bg1><font color=skyblue size=3>개인 기록</font></td>
|
</form>
|
||||||
<td align=center id=bg1><font color=orange size=3>전투 기록</font></td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
</table>
|
||||||
<td valign=top>
|
<table width=1000 align=center class='tb_layout bg0'>
|
||||||
<?=getGenLogRecent($gen, 24)?>
|
<tr>
|
||||||
</td>
|
<td width=50% align=center class='bg1'>
|
||||||
<td valign=top>
|
<font color=skyblue size=3>장 수 정 보</font>
|
||||||
<?=getBatLogRecent($gen, 24)?>
|
</td>
|
||||||
</td>
|
<td width=50% align=center class='bg1'>
|
||||||
</tr>
|
<font color=orange size=3>-</font>
|
||||||
<tr>
|
</td>
|
||||||
<td align=center id=bg1><font color=skyblue size=3>장수 열전</font></td>
|
</tr>
|
||||||
<td align=center id=bg1><font color=orange size=3>전투 결과</font></td>
|
<tr>
|
||||||
</tr>
|
<td valign=top>
|
||||||
<tr>
|
<?php generalInfo($generalObj);
|
||||||
<td valign=top>
|
generalInfo2($generalObj); ?>
|
||||||
<?=getGeneralHistoryAll($gen)?>
|
</td>
|
||||||
</td>
|
<td valign=top>
|
||||||
<td valign=top>
|
</td>
|
||||||
<?=getBatResRecent($gen, 24)?>
|
</tr>
|
||||||
</td>
|
<tr>
|
||||||
</tr>
|
<td align=center class='bg1'>
|
||||||
</table>
|
<font color=skyblue size=3>개인 기록</font>
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
</td>
|
||||||
<tr><td><?=closeButton()?></td></tr>
|
<td align=center class='bg1'>
|
||||||
<tr><td><?=banner()?> </td></tr>
|
<font color=orange size=3>전투 기록</font>
|
||||||
</table>
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td valign=top>
|
||||||
|
<?= formatHistoryToHTML(getGeneralActionLogRecent($gen, 24)) ?>
|
||||||
|
</td>
|
||||||
|
<td valign=top>
|
||||||
|
<?= formatHistoryToHTML(getBattleDetailLogRecent($gen, 24)) ?>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align=center class='bg1'>
|
||||||
|
<font color=skyblue size=3>장수 열전</font>
|
||||||
|
</td>
|
||||||
|
<td align=center class='bg1'>
|
||||||
|
<font color=orange size=3>전투 결과</font>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td valign=top>
|
||||||
|
<?= formatHistoryToHTML(getGeneralHistoryLogAll($gen)) ?>
|
||||||
|
</td>
|
||||||
|
<td valign=top>
|
||||||
|
<?= formatHistoryToHTML(getBattleResultRecent($gen, 24)) ?>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td><?= closeButton() ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><?= banner() ?> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
|
||||||
|
</html>
|
||||||
@@ -1,41 +1,22 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
include "lib.php";
|
include "lib.php";
|
||||||
include "func.php";
|
include "func.php";
|
||||||
|
|
||||||
$btn = Util::getReq('btn');
|
$btn = Util::getPost('btn');
|
||||||
$gen = Util::getReq('gen', 'int', 0);
|
$gen = Util::getPost('gen', 'int', 0);
|
||||||
$type = 0;
|
$type = 0;
|
||||||
|
|
||||||
extractMissingPostToGlobals();
|
|
||||||
|
|
||||||
//로그인 검사
|
//로그인 검사
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
|
||||||
if ($session->userGrade < 5) {
|
if ($session->userGrade < 6) {
|
||||||
?>
|
die(requireAdminPermissionHTML());
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>관리메뉴</title>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=1024" />
|
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
관리자가 아닙니다.<br>
|
|
||||||
<?=banner()?>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
<?php
|
|
||||||
exit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$connect=$db->get();
|
|
||||||
|
|
||||||
if ($btn == '정렬하기') {
|
if ($btn == '정렬하기') {
|
||||||
$gen = 0;
|
$gen = 0;
|
||||||
@@ -45,122 +26,100 @@ $sel[$type] = "selected";
|
|||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>외교정보</title>
|
<title>외교정보</title>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta name="color-scheme" content="dark">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
<meta name="viewport" content="width=1024" />
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
|
<?= WebUtil::printDist('ts', 'common', true) ?>
|
||||||
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
<tr><td>외 교 정 보<br><?=closeButton()?></td></tr>
|
<tr>
|
||||||
<tr><td>
|
<td>외 교 정 보<br><?= closeButton() ?></td>
|
||||||
<form name=form1 method=post>
|
</tr>
|
||||||
정렬순서 :
|
<tr>
|
||||||
<select name=type size=1>
|
<td>
|
||||||
<option <?=$sel[0]??''?> value=0>상태</option>
|
<form name=form1 method=post>
|
||||||
</select>
|
정렬순서 :
|
||||||
<input type=submit name=btn value='정렬하기'>
|
<select name=type size=1>
|
||||||
</form>
|
<option <?= $sel[0] ?? '' ?> value=0>상태</option>
|
||||||
</td></tr>
|
</select>
|
||||||
</table>
|
<input type=submit name=btn value='정렬하기'>
|
||||||
<table width=1000 align=center class='tb_layout bg0'>
|
</form>
|
||||||
<tr><td colspan=9 align=center bgcolor=blue>외 교 관 계</td></tr>
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<table width=1000 align=center class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td colspan=9 align=center bgcolor=blue>외 교 관 계</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width=130 align=center class='bg1'>국 가 명</td>
|
||||||
|
<td width=130 align=center class='bg1'>국 가 명</td>
|
||||||
|
<td width=80 align=center class='bg1'>상 태</td>
|
||||||
|
<td width=60 align=center class='bg1'>기 간</td>
|
||||||
|
</tr>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$nationName = [];
|
||||||
|
$nationColor = [];
|
||||||
|
foreach (getAllNationStaticInfo() as $nation) {
|
||||||
|
$nationName[$nation['nation']] = $nation['name'];
|
||||||
|
$nationColor[$nation['nation']] = $nation['color'];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
foreach ($db->query('SELECT * from diplomacy where me < you order by state desc') as $dip) {
|
||||||
|
$me = $dip['me'];
|
||||||
|
$you = $dip['you'];
|
||||||
|
|
||||||
|
if ($dip['state'] == 2) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ($dip['state']) {
|
||||||
|
case 0:
|
||||||
|
$state = "<font color=red>교 전</font>";
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
$state = "<font color=magenta>선포중</font>";
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
$state = "통 상";
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
$state = "<font color=green>불가침</font>";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new \Exception("알 수 없는 외교 상태: {$dip['state']}");
|
||||||
|
}
|
||||||
|
|
||||||
|
$date = TimeUtil::now();
|
||||||
|
|
||||||
|
echo "
|
||||||
<tr>
|
<tr>
|
||||||
<td width=130 align=center id=bg1>국 가 명</td>
|
<td align=center style=color:" . newColor($nationColor[$me]) . ";background-color:{$nationColor[$me]};>$nationName[$me]</td>
|
||||||
<td width=130 align=center id=bg1>국 가 명</td>
|
<td align=center style=color:" . newColor($nationColor[$you]) . ";background-color:{$nationColor[$you]};>$nationName[$you]</td>
|
||||||
<td width=80 align=center id=bg1>상 태</td>
|
|
||||||
<td width=60 align=center id=bg1>기 간</td>
|
|
||||||
<td align=center id=bg1>비 고</td>
|
|
||||||
</tr>
|
|
||||||
<?php
|
|
||||||
|
|
||||||
$nationName = [];
|
|
||||||
$nationColor = [];
|
|
||||||
foreach (getAllNationStaticInfo() as $nation) {
|
|
||||||
$nationName[$nation['nation']] = $nation['name'];
|
|
||||||
$nationColor[$nation['nation']] = $nation['color'];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$query = "select * from diplomacy where me < you order by state desc";
|
|
||||||
|
|
||||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
|
||||||
$dipcount = MYDB_num_rows($result);
|
|
||||||
for ($i=0; $i < $dipcount; $i++) {
|
|
||||||
$dip = MYDB_fetch_array($result);
|
|
||||||
|
|
||||||
$me = $dip['me'];
|
|
||||||
$you = $dip['you'];
|
|
||||||
|
|
||||||
$query = "select reserved,showing from diplomacy where you='$me' and me='$you'";
|
|
||||||
$result2 = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
|
||||||
$dip2 = MYDB_fetch_array($result2);
|
|
||||||
|
|
||||||
if ($dip['state'] == 2 && $dip['fixed'] == "" && $dip['reserved'] == "" && $dip2['reserved'] == "") {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch ($dip['state']) {
|
|
||||||
case 0: $state = "<font color=red>교 전</font>"; break;
|
|
||||||
case 1: $state = "<font color=magenta>선포중</font>"; break;
|
|
||||||
case 2: $state = "통 상"; break;
|
|
||||||
case 3: $state = "<font color=cyan>통합수락중</font>"; break;
|
|
||||||
case 4: $state = "<font color=cyan>통합제의중</font>"; break;
|
|
||||||
case 5: $state = "<font color=cyan>합병수락중</font>"; break;
|
|
||||||
case 6: $state = "<font color=cyan>합병제의중</font>"; break;
|
|
||||||
case 7: $state = "<font color=green>불가침</font>"; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
$date = date('Y-m-d H:i:s');
|
|
||||||
$note = "";
|
|
||||||
if ($dip['fixed'] != "") {
|
|
||||||
if ($dip['state'] == 7) {
|
|
||||||
$note .= $dip['fixed'];
|
|
||||||
} else {
|
|
||||||
$note .= "<font color=gray>{$dip['fixed']}</font>";
|
|
||||||
}
|
|
||||||
if ($dip['reserved'] != "" || $dip2['reserved'] != "") {
|
|
||||||
$note .= "<br>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($dip['reserved'] != "") {
|
|
||||||
if ($dip['showing'] >= $date) {
|
|
||||||
$note .= "<font color=skyblue>아국측 제의</font>: {$dip['reserved']}";
|
|
||||||
} else {
|
|
||||||
$note .= "<font color=gray>아국측 제의: {$dip['reserved']}</font>";
|
|
||||||
}
|
|
||||||
if ($dip2['reserved'] != "") {
|
|
||||||
$note .= "<br>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($dip2['reserved'] != "") {
|
|
||||||
if ($dip2['showing'] >= $date) {
|
|
||||||
$note .= "<font color=limegreen>상대측 제의</font>: {$dip2['reserved']}";
|
|
||||||
} else {
|
|
||||||
$note .= "<font color=gray>상대측 제의: {$dip2['reserved']}</font>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($note == "") {
|
|
||||||
$note = " ";
|
|
||||||
}
|
|
||||||
|
|
||||||
echo "
|
|
||||||
<tr>
|
|
||||||
<td align=center style=color:".newColor($nationColor[$me]).";background-color:{$nationColor[$me]};>$nationName[$me]</td>
|
|
||||||
<td align=center style=color:".newColor($nationColor[$you]).";background-color:{$nationColor[$you]};>$nationName[$you]</td>
|
|
||||||
<td align=center>$state</td>
|
<td align=center>$state</td>
|
||||||
<td align=center>{$dip['term']} 개월</td>
|
<td align=center>{$dip['term']} 개월</td>
|
||||||
<td align=left style=font-size:7px;>{$note}</td>
|
|
||||||
</tr>";
|
</tr>";
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</table>
|
</table>
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
<tr><td><?=closeButton()?></td></tr>
|
<tr>
|
||||||
<tr><td><?=banner()?> </td></tr>
|
<td><?= closeButton() ?></td>
|
||||||
</table>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><?= banner() ?> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace sammo;
|
||||||
|
|
||||||
|
include "lib.php";
|
||||||
|
include "func.php";
|
||||||
|
//로그인 검사
|
||||||
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
|
||||||
|
if ($session->userGrade < 6) {
|
||||||
|
die('권한 부족');
|
||||||
|
}
|
||||||
|
|
||||||
|
$db = DB::db();
|
||||||
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
|
|
||||||
|
if (!$gameStor->isunited) {
|
||||||
|
die('아직 천통하지 않았습니다');
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($db->queryFirstColumn(
|
||||||
|
'SELECT no FROM general WHERE npc < 2 and age >= %i',
|
||||||
|
40
|
||||||
|
) as $generalNo) {
|
||||||
|
CheckHall($generalNo);
|
||||||
|
}
|
||||||
|
|
||||||
|
$inheritPointManager = InheritancePointManager::getInstance();
|
||||||
|
foreach(General::createObjListFromDB($db->queryFirstColumn('SELECT `no` FROM general WHERE npc = 0')) as $genObj){
|
||||||
|
$inheritPointManager->mergeTotalInheritancePoint($genObj);
|
||||||
|
$inheritPointManager->applyInheritanceUser($genObj->getVar('owner'));
|
||||||
|
}
|
||||||
@@ -1,13 +1,16 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
|
use Ds\Set;
|
||||||
|
use sammo\Enums\RankColumn;
|
||||||
|
use sammo\Enums\AuctionType;
|
||||||
|
|
||||||
include "lib.php";
|
include "lib.php";
|
||||||
include "func.php";
|
include "func.php";
|
||||||
|
|
||||||
$btn = Util::getReq('btn');
|
$btn = Util::getReq('btn');
|
||||||
|
|
||||||
extractMissingPostToGlobals();
|
|
||||||
|
|
||||||
//로그인 검사
|
//로그인 검사
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
$userID = Session::getUserID();
|
$userID = Session::getUserID();
|
||||||
@@ -16,258 +19,412 @@ $db = DB::db();
|
|||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
|
|
||||||
increaseRefresh("명장일람", 1);
|
increaseRefresh("명장일람", 1);
|
||||||
|
$templates = new \League\Plates\Engine(__DIR__ . '/templates');
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta name="color-scheme" content="dark">
|
||||||
<meta name="viewport" content="width=1136" />
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<title><?=UniqueConst::$serverName?>: 명장일람</title>
|
<meta name="viewport" content="width=500" />
|
||||||
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
|
<title><?= UniqueConst::$serverName ?>: 명장일람</title>
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
<?=WebUtil::printCSS('css/hallOfFame.css')?>
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
|
<?= WebUtil::printDist('vue', [], true) ?>
|
||||||
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
|
<?= WebUtil::printDist('ts', ['common', 'bestGeneral']) ?>
|
||||||
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
|
|
||||||
<?=WebUtil::printJS('js/common.js')?>
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<table align=center width=1100 class='tb_layout bg0'>
|
<div id="container" class="bg0">
|
||||||
<tr><td>명 장 일 람<br><?=closeButton()?></td></tr>
|
<div class="row gx-0">
|
||||||
</table>
|
<div class="col">명 장 일 람<br><?= closeButton() ?></div>
|
||||||
<table align=center width=1100 class='tb_layout bg0'>
|
</div>
|
||||||
<form name=form1 action=a_bestGeneral.php method=post>
|
<div class="row gx-0">
|
||||||
<tr><td align=center>
|
<div class="col center">
|
||||||
<input type=submit name=btn value='유저 보기'>
|
<form name=form1 action=a_bestGeneral.php method=get><input type=submit name=btn value='유저 보기'>
|
||||||
<input type=submit name=btn value='NPC 보기'>
|
<input type=submit name=btn value='NPC 보기'>
|
||||||
</td></tr>
|
</form>
|
||||||
</form>
|
</div>
|
||||||
</table>
|
</div>
|
||||||
<div style="margin:auto;width=1000px;">
|
<?php
|
||||||
<?php
|
|
||||||
|
|
||||||
|
$ownerNameList = [];
|
||||||
$nationName = [0=>'재야'];
|
if ($gameStor->isunited) {
|
||||||
$nationColor = [0=>'#000000'];
|
foreach (RootDB::db()->queryAllLists('SELECT no, name FROM member') as [$ownerID, $ownerName]) {
|
||||||
foreach (getAllNationStaticInfo() as $nation) {
|
$ownerNameList[$ownerID] = $ownerName;
|
||||||
$nationName[$nation['nation']] = $nation['name'];
|
}
|
||||||
$nationColor[$nation['nation']] = $nation['color'];
|
|
||||||
}
|
|
||||||
|
|
||||||
$types = [
|
|
||||||
["명 성", "int", function($v){$v['value'] = $v['experience']; return $v; }],
|
|
||||||
["계 급", "int", function($v){$v['value'] = $v['dedication']; return $v; }],
|
|
||||||
["계 략 성 공", "int", function($v){
|
|
||||||
$v['value'] = $v['firenum'];
|
|
||||||
$v['nationName'] = '???';
|
|
||||||
$v['pictureFullPath'] = GetImageURL(0)."/default.jpg";
|
|
||||||
$v['name'] = '???';
|
|
||||||
$v['owner_name'] = null;
|
|
||||||
$v['bgColor'] = GameConst::$basecolor4;
|
|
||||||
$v['fgColor'] = newColor($v['bgColor']);
|
|
||||||
return $v;
|
|
||||||
}],
|
|
||||||
["전 투 횟 수", "int", function($v){$v['value'] = $v['warnum']; return $v; }],
|
|
||||||
["승 리", "int", function($v){$v['value'] = $v['killnum']; return $v; }],
|
|
||||||
["승 률", "percent", function($v){
|
|
||||||
if($v['warnum'] < 10){
|
|
||||||
$v['value'] = 0;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$v['value'] = $v['killnum'] / max(1, $v['warnum']);
|
|
||||||
}
|
|
||||||
return $v;
|
|
||||||
}],
|
|
||||||
["사 살", "int", function($v){$v['value'] = $v['killcrew']; return $v; }],
|
|
||||||
["살 상 률", "percent", function($v){
|
|
||||||
if($v['warnum'] < 10){
|
|
||||||
$v['value'] = 0;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$v['value'] = $v['killcrew'] / max(1, $v['deathcrew']);
|
|
||||||
}
|
|
||||||
return $v;
|
|
||||||
}],
|
|
||||||
["보 병 숙 련 도", "int", function($v){$v['value'] = $v['dex0']; return $v; }],
|
|
||||||
["궁 병 숙 련 도", "int", function($v){$v['value'] = $v['dex10']; return $v; }],
|
|
||||||
["기 병 숙 련 도", "int", function($v){$v['value'] = $v['dex20']; return $v; }],
|
|
||||||
["귀 병 숙 련 도", "int", function($v){$v['value'] = $v['dex30']; return $v; }],
|
|
||||||
["차 병 숙 련 도", "int", function($v){$v['value'] = $v['dex40']; return $v; }],
|
|
||||||
["전 력 전 승 률", "percent", function($v){
|
|
||||||
$totalCnt = $v['ttw']+$v['ttd']+$v['ttl'];
|
|
||||||
if($totalCnt < 50){
|
|
||||||
$v['value'] = 0;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$v['value'] = $v['ttw']/max(1, $totalCnt);
|
|
||||||
}
|
|
||||||
return $v;
|
|
||||||
}],
|
|
||||||
["통 솔 전 승 률", "percent", function($v){
|
|
||||||
$totalCnt = $v['tlw']+$v['tld']+$v['tll'];
|
|
||||||
if($totalCnt < 50){
|
|
||||||
$v['value'] = 0;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$v['value'] = $v['tlw']/max(1, $totalCnt);
|
|
||||||
}
|
|
||||||
return $v;
|
|
||||||
}],
|
|
||||||
["일 기 토 승 률", "percent", function($v){
|
|
||||||
$totalCnt = $v['tpw']+$v['tpd']+$v['tpl'];
|
|
||||||
if($totalCnt < 50){
|
|
||||||
$v['value'] = 0;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$v['value'] = $v['tpw']/max(1, $totalCnt);
|
|
||||||
}
|
|
||||||
return $v;
|
|
||||||
}],
|
|
||||||
["설 전 승 률", "percent", function($v){
|
|
||||||
$totalCnt = $v['tiw']+$v['tid']+$v['til'];
|
|
||||||
if($totalCnt < 50){
|
|
||||||
$v['value'] = 0;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$v['value'] = $v['tiw']/max(1, $totalCnt);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $v;
|
|
||||||
}],
|
|
||||||
["베 팅 투 자 액", "int", function($v){$v['value'] = $v['betgold']; return $v; }],
|
|
||||||
["베 팅 당 첨", "int", function($v){$v['value'] = $v['betwin']; return $v; }],
|
|
||||||
["베 팅 수 익 금", "int", function($v){$v['value'] = $v['betwingold']; return $v; }],
|
|
||||||
["베 팅 수 익 률", "percent", function($v){
|
|
||||||
if($v['betgold'] < 1000){
|
|
||||||
$v['value'] = 0;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$v['value'] = $v['betwingold']/max(1, $v['betgold']);
|
|
||||||
}
|
|
||||||
return $v;
|
|
||||||
}],
|
|
||||||
];
|
|
||||||
|
|
||||||
$generals = array_map(function($general) use($nationColor, $nationName) {
|
|
||||||
$general['bgColor'] = $nationColor[$general['nation']]??GameConst::$basecolor4;
|
|
||||||
$general['fgColor'] = newColor($general['bgColor']);
|
|
||||||
$general['nationName'] = $nationName[$general['nation']];
|
|
||||||
|
|
||||||
if(key_exists('picture', $general)){
|
|
||||||
$imageTemp = GetImageURL($general['imgsvr']);
|
|
||||||
$general['pictureFullPath'] = "$imageTemp/{$general['picture']}";
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$general['pictureFullPath'] = GetImageURL(0)."/default.jpg";
|
|
||||||
}
|
|
||||||
|
|
||||||
return $general;
|
|
||||||
}, $db->query(
|
|
||||||
"SELECT nation,no,name,name2 as owner_name, picture, imgsvr,
|
|
||||||
experience, dedication, firenum, warnum, killnum, killcrew, deathcrew,
|
|
||||||
dex0, dex10, dex20, dex30, dex40,
|
|
||||||
ttw, ttd, ttl, tlw, tld, tll, tpw, tpd, tpl, tiw, tid, til,
|
|
||||||
betgold, betwin, betwingold,
|
|
||||||
horse, weap, book, item
|
|
||||||
FROM general WHERE %l", $btn == "NPC 보기"?"npc>=2":"npc<2"));
|
|
||||||
|
|
||||||
|
|
||||||
$templates = new \League\Plates\Engine('templates');
|
|
||||||
|
|
||||||
foreach($types as $idx=>[$typeName, $typeValue, $typeFunc]){
|
|
||||||
$validCnt = 0;
|
|
||||||
$typeGenerals = array_map(function($general) use($typeValue, $typeFunc, &$validCnt){
|
|
||||||
$general = ($typeFunc)($general);
|
|
||||||
$value = $general['value'];
|
|
||||||
|
|
||||||
if($value > 0){
|
|
||||||
$validCnt+=1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if($typeValue == 'percent'){
|
$nationName = [0 => '재야'];
|
||||||
$general['printValue'] = number_format($value*100, 2).'%';
|
$nationColor = [0 => '#000000'];
|
||||||
}
|
foreach (getAllNationStaticInfo() as $nation) {
|
||||||
else {
|
$nationName[$nation['nation']] = $nation['name'];
|
||||||
$general['printValue'] = number_format($value);
|
$nationColor[$nation['nation']] = $nation['color'];
|
||||||
}
|
|
||||||
return $general;
|
|
||||||
}, $generals);
|
|
||||||
|
|
||||||
usort($typeGenerals, function($lhs, $rhs){
|
|
||||||
//내림차순
|
|
||||||
return -($lhs['value'] <=> $rhs['value']);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
echo $templates->render('hallOfFrame', [
|
|
||||||
'typeName'=>$typeName,
|
|
||||||
'generals'=>array_slice($typeGenerals, 0, min(10, $validCnt))
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
</div>
|
|
||||||
<div style="margin:auto;width=1000px;margin-top:5px;">
|
|
||||||
<?php
|
|
||||||
//유니크 아이템 소유자
|
|
||||||
$itemTypes = [
|
|
||||||
["명 마", 'horse', function($v){return getHorseName($v);}, 7, 26, []],
|
|
||||||
["명 검", 'weap', function($v){return getWeapName($v);}, 7, 26, []],
|
|
||||||
["명 서", 'book', function($v){return getBookName($v);}, 7, 26, []],
|
|
||||||
["도 구", 'item', function($v){return displayItemInfo($v);}, 7, 26, []],
|
|
||||||
];
|
|
||||||
|
|
||||||
$simpleItemTypes = array_map(function($itemType){return $itemType[1];}, $itemTypes);
|
|
||||||
|
|
||||||
foreach($generals as $general){
|
|
||||||
foreach($itemTypes as $itemIdx=>[,$itemType, $itemFunc,,,]){
|
|
||||||
$itemCode = $general[$itemType];
|
|
||||||
if($itemCode <= 6){
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$itemName = ($itemFunc)($itemCode);
|
$types = [
|
||||||
$general['rankName'] = $itemName;
|
["명 성", "int", function ($v) {
|
||||||
$general['value'] = $itemCode;
|
$v['value'] = $v['experience'];
|
||||||
$itemTypes[$itemIdx][5][$itemCode] = $general;
|
return $v;
|
||||||
}
|
}],
|
||||||
}
|
["계 급", "int", function ($v) {
|
||||||
|
$v['value'] = $v['dedication'];
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["계 략 성 공", "int", function ($v) use ($gameStor) {
|
||||||
|
$v['value'] = $v['firenum'];
|
||||||
|
if ($gameStor->isunited) {
|
||||||
|
return $v;
|
||||||
|
}
|
||||||
|
$v['nationName'] = '???';
|
||||||
|
$v['pictureFullPath'] = GetImageURL(0) . "/default.jpg";
|
||||||
|
$v['name'] = '???';
|
||||||
|
$v['ownerName'] = null;
|
||||||
|
$v['bgColor'] = GameConst::$basecolor4;
|
||||||
|
$v['fgColor'] = newColor($v['bgColor']);
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["전 투 횟 수", "int", function ($v) {
|
||||||
|
$v['value'] = $v['warnum'];
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["승 리", "int", function ($v) {
|
||||||
|
$v['value'] = $v['killnum'];
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["승 률", "percent", function ($v) {
|
||||||
|
if ($v['warnum'] < 10) {
|
||||||
|
$v['value'] = 0;
|
||||||
|
} else {
|
||||||
|
$v['value'] = $v['killnum'] / max(1, $v['warnum']);
|
||||||
|
}
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["점 령", "int", function ($v) {
|
||||||
|
$v['value'] = $v['occupied'];
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["사 살", "int", function ($v) {
|
||||||
|
$v['value'] = $v['killcrew'];
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["살 상 률", "percent", function ($v) {
|
||||||
|
if ($v['warnum'] < 10) {
|
||||||
|
$v['value'] = 0;
|
||||||
|
} else {
|
||||||
|
$v['value'] = $v['killcrew'] / max(1, $v['deathcrew']);
|
||||||
|
}
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["대 인 사 살", "int", function ($v) {
|
||||||
|
$v['value'] = $v['killcrew_person'];
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["대 인 살 상 률", "percent", function ($v) {
|
||||||
|
if ($v['warnum'] < 10) {
|
||||||
|
$v['value'] = 0;
|
||||||
|
} else {
|
||||||
|
$v['value'] = $v['killcrew_person'] / max(1, $v['deathcrew_person']);
|
||||||
|
}
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["보 병 숙 련 도", "int", function ($v) {
|
||||||
|
$v['value'] = $v['dex1'];
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["궁 병 숙 련 도", "int", function ($v) {
|
||||||
|
$v['value'] = $v['dex2'];
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["기 병 숙 련 도", "int", function ($v) {
|
||||||
|
$v['value'] = $v['dex3'];
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["귀 병 숙 련 도", "int", function ($v) {
|
||||||
|
$v['value'] = $v['dex4'];
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["차 병 숙 련 도", "int", function ($v) {
|
||||||
|
$v['value'] = $v['dex5'];
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["전 력 전 승 률", "percent", function ($v) {
|
||||||
|
$totalCnt = $v['ttw'] + $v['ttd'] + $v['ttl'];
|
||||||
|
if ($totalCnt < 50) {
|
||||||
|
$v['value'] = 0;
|
||||||
|
} else {
|
||||||
|
$v['value'] = $v['ttw'] / max(1, $totalCnt);
|
||||||
|
}
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["통 솔 전 승 률", "percent", function ($v) {
|
||||||
|
$totalCnt = $v['tlw'] + $v['tld'] + $v['tll'];
|
||||||
|
if ($totalCnt < 50) {
|
||||||
|
$v['value'] = 0;
|
||||||
|
} else {
|
||||||
|
$v['value'] = $v['tlw'] / max(1, $totalCnt);
|
||||||
|
}
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["일 기 토 승 률", "percent", function ($v) {
|
||||||
|
$totalCnt = $v['tsw'] + $v['tsd'] + $v['tsl'];
|
||||||
|
if ($totalCnt < 50) {
|
||||||
|
$v['value'] = 0;
|
||||||
|
} else {
|
||||||
|
$v['value'] = $v['tsw'] / max(1, $totalCnt);
|
||||||
|
}
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["설 전 승 률", "percent", function ($v) {
|
||||||
|
$totalCnt = $v['tiw'] + $v['tid'] + $v['til'];
|
||||||
|
if ($totalCnt < 50) {
|
||||||
|
$v['value'] = 0;
|
||||||
|
} else {
|
||||||
|
$v['value'] = $v['tiw'] / max(1, $totalCnt);
|
||||||
|
}
|
||||||
|
|
||||||
foreach($itemTypes as [$itemNameType, $itemType, $itemFunc, $itemMinCode, $itemMaxCode, $itemOwners]){
|
return $v;
|
||||||
$itemRanker = [];
|
}],
|
||||||
for($itemCode = $itemMaxCode; $itemCode >= $itemMinCode; $itemCode--){
|
["베 팅 투 자 액", "int", function ($v) {
|
||||||
if(!key_exists($itemCode, $itemOwners)){
|
$v['value'] = $v['betgold'];
|
||||||
$emptyCard = [
|
return $v;
|
||||||
'rankName' => ($itemFunc)($itemCode),
|
}],
|
||||||
'pictureFullPath' => GetImageURL(0)."/default.jpg",
|
["베 팅 당 첨", "int", function ($v) {
|
||||||
'value'=>$itemCode,
|
$v['value'] = $v['betwin'];
|
||||||
'name'=>'미발견',
|
return $v;
|
||||||
'bgColor'=>GameConst::$basecolor4,
|
}],
|
||||||
'fgColor'=>newColor(GameConst::$basecolor4),
|
["베 팅 수 익 금", "int", function ($v) {
|
||||||
];
|
$v['value'] = $v['betwingold'];
|
||||||
$itemRanker[$itemCode] = $emptyCard;
|
return $v;
|
||||||
continue;
|
}],
|
||||||
|
["베 팅 수 익 률", "percent", function ($v) {
|
||||||
|
if ($v['betgold'] < GameConst::$defaultGold) {
|
||||||
|
$v['value'] = 0;
|
||||||
|
} else {
|
||||||
|
$v['value'] = $v['betwingold'] / max(1, $v['betgold']);
|
||||||
|
}
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["유 산 소 모 량", "int", function ($v) use ($gameStor) {
|
||||||
|
$v['value'] = $v[RankColumn::inherit_point_spent->value];
|
||||||
|
if ($gameStor->isunited) {
|
||||||
|
return $v;
|
||||||
|
}
|
||||||
|
$v['nationName'] = '???';
|
||||||
|
$v['pictureFullPath'] = GetImageURL(0) . "/default.jpg";
|
||||||
|
$v['name'] = '???';
|
||||||
|
$v['ownerName'] = null;
|
||||||
|
$v['bgColor'] = GameConst::$basecolor4;
|
||||||
|
$v['fgColor'] = newColor($v['bgColor']);
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
["유 산 획 득 량", "int", function ($v) use ($gameStor) {
|
||||||
|
$v['value'] = $v[RankColumn::inherit_point_earned->value];
|
||||||
|
if ($gameStor->isunited) {
|
||||||
|
return $v;
|
||||||
|
}
|
||||||
|
$v['nationName'] = '???';
|
||||||
|
$v['pictureFullPath'] = GetImageURL(0) . "/default.jpg";
|
||||||
|
$v['name'] = '???';
|
||||||
|
$v['ownerName'] = null;
|
||||||
|
$v['bgColor'] = GameConst::$basecolor4;
|
||||||
|
$v['fgColor'] = newColor($v['bgColor']);
|
||||||
|
return $v;
|
||||||
|
}],
|
||||||
|
];
|
||||||
|
|
||||||
|
$generals = [];
|
||||||
|
foreach ($db->query(
|
||||||
|
"SELECT nation,no,name,owner_name as ownerName, owner, picture, imgsvr,
|
||||||
|
experience, dedication,
|
||||||
|
dex1, dex2, dex3, dex4, dex5,
|
||||||
|
horse, weapon, book, item
|
||||||
|
FROM general WHERE %l",
|
||||||
|
$btn == "NPC 보기" ? "npc>=2" : "npc<2"
|
||||||
|
) as $general) {
|
||||||
|
$generalID = $general['no'];
|
||||||
|
$general['bgColor'] = $nationColor[$general['nation']] ?? GameConst::$basecolor4;
|
||||||
|
$general['fgColor'] = newColor($general['bgColor']);
|
||||||
|
$general['nationName'] = $nationName[$general['nation']];
|
||||||
|
|
||||||
|
if (key_exists('picture', $general)) {
|
||||||
|
$imageTemp = GetImageURL($general['imgsvr']);
|
||||||
|
$general['pictureFullPath'] = "$imageTemp/{$general['picture']}";
|
||||||
|
} else {
|
||||||
|
$general['pictureFullPath'] = GetImageURL(0) . "/default.jpg";
|
||||||
|
}
|
||||||
|
|
||||||
|
$generals[$generalID] = $general;
|
||||||
}
|
}
|
||||||
|
|
||||||
$general = $itemOwners[$itemCode];
|
foreach ($db->queryAllLists('SELECT general_id, `type`, `value` FROM rank_data') as [$generalID, $typeKey, $value]) {
|
||||||
$itemRanker[$itemCode] = $general;
|
if (!key_exists($generalID, $generals)) {
|
||||||
}
|
continue;
|
||||||
|
}
|
||||||
|
$generals[$generalID][$typeKey] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
echo $templates->render('hallOfFrame', [
|
$templates = new \League\Plates\Engine('templates');
|
||||||
'typeName'=>$itemNameType,
|
|
||||||
'generals'=>$itemRanker
|
foreach ($types as $idx => [$typeName, $typeValue, $typeFunc]) {
|
||||||
]);
|
$validCnt = 0;
|
||||||
}
|
$typeGenerals = array_map(function ($general) use ($typeValue, $typeFunc, &$validCnt, $ownerNameList) {
|
||||||
?>
|
$general['ownerName'] = $ownerNameList[$general['owner']] ?? null;
|
||||||
</div>
|
$general = ($typeFunc)($general);
|
||||||
<table align=center width=1100 class='tb_layout bg0'>
|
$value = $general['value'];
|
||||||
<tr><td><?=closeButton()?></td></tr>
|
|
||||||
<tr><td><?=banner()?> </td></tr>
|
if ($value > 0) {
|
||||||
</table>
|
$validCnt += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($typeValue == 'percent') {
|
||||||
|
$general['printValue'] = number_format($value * 100, 2) . '%';
|
||||||
|
} else {
|
||||||
|
$general['printValue'] = number_format($value);
|
||||||
|
}
|
||||||
|
return $general;
|
||||||
|
}, $generals);
|
||||||
|
|
||||||
|
usort($typeGenerals, function ($lhs, $rhs) {
|
||||||
|
//내림차순
|
||||||
|
return - ($lhs['value'] <=> $rhs['value']);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
echo $templates->render('hallOfFrame', [
|
||||||
|
'typeName' => $typeName,
|
||||||
|
'generals' => array_slice($typeGenerals, 0, min(10, $validCnt))
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
//유니크 아이템 소유자
|
||||||
|
$itemTypes = [
|
||||||
|
'horse' => '명 마',
|
||||||
|
'weapon' => '명 검',
|
||||||
|
'book' => '명 서',
|
||||||
|
'item' => '도 구'
|
||||||
|
];
|
||||||
|
|
||||||
|
$simpleItemTypes = array_keys($itemTypes);
|
||||||
|
array_map(function ($itemType) {
|
||||||
|
return $itemType[1];
|
||||||
|
}, $itemTypes);
|
||||||
|
$itemOwners = [];
|
||||||
|
|
||||||
|
foreach ($generals as $general) {
|
||||||
|
foreach ($itemTypes as $itemType => $itemTypeName) {
|
||||||
|
$itemClassName = $general[$itemType];
|
||||||
|
$itemClass = buildItemClass($itemClassName);
|
||||||
|
if ($itemClass->isBuyable()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key_exists($itemClassName, $itemOwners)) {
|
||||||
|
$itemOwners[$itemClassName][] = $general;
|
||||||
|
} else {
|
||||||
|
$itemOwners[$itemClassName] = [$general];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$dummyAuctionGeneral = [
|
||||||
|
'nation' => 0,
|
||||||
|
'no' => 0,
|
||||||
|
'ownerName' => '',
|
||||||
|
'pictureFullPath' => GetImageURL(0) . "/default.jpg",
|
||||||
|
'name' => '경매중',
|
||||||
|
'bgColor' => '#00582c',
|
||||||
|
'fgColor' => 'white',
|
||||||
|
'nationName' => '-',
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($db->queryFirstColumn(
|
||||||
|
'SELECT `target` FROM ng_auction WHERE `finished` = 0 AND `type` = %s',
|
||||||
|
AuctionType::UniqueItem->value
|
||||||
|
) as $itemClassName) {
|
||||||
|
if(key_exists($itemClassName, $itemOwners)) {
|
||||||
|
$itemOwners[$itemClassName][] = $dummyAuctionGeneral;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$itemOwners[$itemClassName] = [$dummyAuctionGeneral];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
foreach (GameConst::$allItems as $itemType => $itemList) {
|
||||||
|
$itemNameType = $itemTypes[$itemType];
|
||||||
|
$itemList = array_reverse($itemList, true);
|
||||||
|
|
||||||
|
|
||||||
|
$itemRanker = [];
|
||||||
|
foreach ($itemList as $itemClassName => $itemCnt) {
|
||||||
|
if ($itemCnt == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$itemClass = buildItemClass($itemClassName);
|
||||||
|
|
||||||
|
if ($itemClass->isBuyable()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$info = $itemClass->getInfo();
|
||||||
|
$name = $itemClass->getName();
|
||||||
|
|
||||||
|
|
||||||
|
if ($info) {
|
||||||
|
$name = $templates->render('tooltip', [
|
||||||
|
'text' => $name,
|
||||||
|
'info' => $info,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
foreach (Util::range($itemCnt) as $itemIdx) {
|
||||||
|
if (($itemOwners[$itemClassName][$itemIdx] ?? null) === null) {
|
||||||
|
$emptyCard = [
|
||||||
|
'rankName' => $name,
|
||||||
|
'pictureFullPath' => GetImageURL(0) . "/default.jpg",
|
||||||
|
'value' => $itemClassName,
|
||||||
|
'name' => '미발견',
|
||||||
|
'bgColor' => GameConst::$basecolor4,
|
||||||
|
'fgColor' => newColor(GameConst::$basecolor4),
|
||||||
|
];
|
||||||
|
$itemRanker[] = $emptyCard;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$general = $itemOwners[$itemClassName][$itemIdx];
|
||||||
|
|
||||||
|
$card = [
|
||||||
|
'rankName' => $name,
|
||||||
|
'pictureFullPath' => $general['pictureFullPath'],
|
||||||
|
'value' => $itemClassName,
|
||||||
|
'nationName' => $general['nationName'],
|
||||||
|
'name' => $general['name'],
|
||||||
|
'bgColor' => $general['bgColor'],
|
||||||
|
'fgColor' => $general['fgColor'],
|
||||||
|
];
|
||||||
|
$itemRanker[] = $card;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo $templates->render('hallOfFrame', [
|
||||||
|
'typeName' => $itemNameType,
|
||||||
|
'generals' => $itemRanker
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<div class="row gx-0">
|
||||||
|
<div class="col"><?= closeButton() ?></div>
|
||||||
|
</div>
|
||||||
|
<div class="row bg0 gx-0">
|
||||||
|
<div class="col bg0"><?= banner() ?></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
include "lib.php";
|
include "lib.php";
|
||||||
@@ -12,108 +13,125 @@ increaseRefresh("왕조일람", 1);
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta name="color-scheme" content="dark">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<title><?=UniqueConst::$serverName?>: 왕조일람</title>
|
<meta name="viewport" content="width=1024" />
|
||||||
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
|
<title><?= UniqueConst::$serverName ?>: 왕조일람</title>
|
||||||
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
<?=WebUtil::printJS('js/common.js')?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
<?= WebUtil::printDist('vue', [], true) ?>
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
<?= WebUtil::printDist('ts', 'common') ?>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<table align=center width=1000 class="tb_layout bg0">
|
<table align=center width=1000 class="tb_layout bg0">
|
||||||
<tr><td>역 대 왕 조<br>
|
<tr>
|
||||||
<button onclick=window.close()>창 닫기</button><br>
|
<td>역 대 왕 조<br>
|
||||||
</td></tr>
|
<button onclick=window.close()>창 닫기</button><br>
|
||||||
</table>
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
$showCurrentNation = true;
|
$showCurrentNation = true;
|
||||||
|
|
||||||
$emperiors = $db->query('SELECT * FROM emperior ORDER BY `no` DESC');
|
$emperiors = $db->query('SELECT * FROM emperior ORDER BY `no` DESC');
|
||||||
|
|
||||||
if($emperiors){
|
if ($emperiors) {
|
||||||
$serverID = $emperior[0]['server_id']??($emperior[0]['serverID']??null);
|
$serverID = $emperior[0]['server_id'] ?? ($emperior[0]['serverID'] ?? null);
|
||||||
if($serverID == UniqueConst::$serverID){
|
if ($serverID == UniqueConst::$serverID) {
|
||||||
$showCurrentNation = false;
|
$showCurrentNation = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ($showCurrentNation) {
|
if ($showCurrentNation) {
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
[$year, $month] = $gameStor->getValuesAsArray(['year', 'month']);
|
[$year, $month] = $gameStor->getValuesAsArray(['year', 'month']);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<table align=center width=1000 style="margin-top:10px;" class='tb_layout bg0'>
|
<table align=center width=1000 style="margin-top:10px;" class='tb_layout bg0'>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="background-color:#333333;" align=center colspan=8>
|
<td style="background-color:#333333;" align=center colspan=8>
|
||||||
<font size=5>현재 (<?=$year?>年 <?=$month?>月)</font>
|
<font size=5>현재 (<?= $year ?>年 <?= $month ?>月)</font>
|
||||||
<a href="a_history.php"><button>역사 보기</button></a>
|
<a href="v_history.php"><button type='button'>역사 보기</button></a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach($emperiors as $emperior){
|
foreach ($emperiors as $emperior) {
|
||||||
$serverID = $emperior['server_id']??($emperior['serverID']??null);
|
$serverID = $emperior['server_id'] ?? ($emperior['serverID'] ?? null);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<table align=center width=1000 style="margin-top:10px;" class='tb_layout bg0'>
|
<table align=center width=1000 style="margin-top:10px;" class='tb_layout bg0'>
|
||||||
<tr>
|
<tr>
|
||||||
<td bgcolor=skyblue align=center colspan=8>
|
<td bgcolor=skyblue align=center colspan=8>
|
||||||
<font size=5><?=$emperior['phase']?></font>
|
<font size=5><?= $emperior['phase'] ?></font>
|
||||||
|
|
||||||
<a href="a_emperior_detail.php?select=<?=$emperior['no']?>"><button>자세히</button></a>
|
<a href="a_emperior_detail.php?select=<?= $emperior['no'] ?>"><button type='button'>자세히</button></a>
|
||||||
|
|
||||||
<?php if($emperior['server_id']): ?>
|
<?php if ($emperior['server_id']) : ?>
|
||||||
<a href="a_history.php?serverID=<?=$emperior['server_id']?>"><button>역사 보기</button></a>
|
<a href="v_history.php?serverID=<?= $emperior['server_id'] ?>"><button type='button'>역사 보기</button></a>
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align=center style=color:".newColor($emperior['color'])."; bgcolor=<?=$emperior['color']?> colspan=8>
|
<td align=center style='color:<?= newColor($emperior['color']) ?>;background-color:<?= $emperior['color'] ?>' colspan=8>
|
||||||
<font size=5><?=$emperior['name']?> (<?=$emperior['year']?>年 <?=$emperior['month']?>月)</font>
|
<font size=5><?= $emperior['name'] ?> (<?= $emperior['year'] ?>年 <?= $emperior['month'] ?>月)</font>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td id=bg1 align=center width=80>국 력</td>
|
<td class='bg1' align=center width=80>국 력</td>
|
||||||
<td align=center width=170><?=$emperior['power']?></td>
|
<td align=center width=170><?= $emperior['power'] ?></td>
|
||||||
<td id=bg1 align=center width=80>장 수</td>
|
<td class='bg1' align=center width=80>장 수</td>
|
||||||
<td align=center width=170><?=$emperior['gennum']?></td>
|
<td align=center width=170><?= $emperior['gennum'] ?></td>
|
||||||
<td id=bg1 align=center width=80>속 령</td>
|
<td class='bg1' align=center width=80>속 령</td>
|
||||||
<td align=center width=170><?=$emperior['citynum']?></td>
|
<td align=center width=170><?= $emperior['citynum'] ?></td>
|
||||||
<td id=bg1 align=center width=80>성 향</td>
|
<td class='bg1' align=center width=80>성 향</td>
|
||||||
<td align=center width=170><?=$emperior['type']?></td>
|
<td align=center width=170><?= $emperior['type'] ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td id=bg1 align=center>황 제</td>
|
<td class='bg1' align=center>황 제</td>
|
||||||
<td align=center><?=$emperior['l12name']?></td>
|
<td align=center><?= $emperior['l12name'] ?></td>
|
||||||
<td id=bg1 align=center>승 상</td>
|
<td class='bg1' align=center>승 상</td>
|
||||||
<td align=center><?=$emperior['l11name']?></td>
|
<td align=center><?= $emperior['l11name'] ?></td>
|
||||||
<td id=bg1 align=center>위 장 군</td>
|
<td class='bg1' align=center>표 기 장 군</td>
|
||||||
<td align=center><?=$emperior['l10name']?></td>
|
<td align=center><?= $emperior['l10name'] ?></td>
|
||||||
<td id=bg1 align=center>사 공</td>
|
<td class='bg1' align=center>사 공</td>
|
||||||
<td align=center><?=$emperior['l9name']?></td>
|
<td align=center><?= $emperior['l9name'] ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
<tr>
|
||||||
|
<td class='bg1' align=center>거 기 장 군</td>
|
||||||
|
<td align=center><?= $emperior['l8name'] ?></td>
|
||||||
|
<td class='bg1' align=center>태 위</td>
|
||||||
|
<td align=center><?= $emperior['l7name'] ?></td>
|
||||||
|
<td class='bg1' align=center>위 장 군</td>
|
||||||
|
<td align=center><?= $emperior['l6name'] ?></td>
|
||||||
|
<td class='bg1' align=center>사 도</td>
|
||||||
|
<td align=center><?= $emperior['l5name'] ?></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<table style="margin-top:10px;" align=center width=1000 class='tb_layout bg0'>
|
<table style="margin-top:10px;" align=center width=1000 class='tb_layout bg0'>
|
||||||
<tr><td><?=closeButton()?></td></tr>
|
<tr>
|
||||||
<tr><td><?=banner()?></td></tr>
|
<td><?= closeButton() ?></td>
|
||||||
</table>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><?= banner() ?></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@@ -1,213 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace sammo;
|
|
||||||
|
|
||||||
include "lib.php";
|
|
||||||
include "func.php";
|
|
||||||
|
|
||||||
$select = Util::getReq('select', 'int', 0);
|
|
||||||
|
|
||||||
extractMissingPostToGlobals();
|
|
||||||
|
|
||||||
$db = DB::db();
|
|
||||||
$connect=$db->get();
|
|
||||||
|
|
||||||
increaseRefresh("왕조일람", 2);
|
|
||||||
?>
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=1024" />
|
|
||||||
<title><?=UniqueConst::$serverName?>: 왕조일람</title>
|
|
||||||
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
|
|
||||||
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
|
|
||||||
<?=WebUtil::printJS('js/common.js')?>
|
|
||||||
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
|
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
|
||||||
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
|
||||||
<tr><td>역 대 왕 조<br>
|
|
||||||
<input type=button value='창 닫기' onclick=window.close()><br>
|
|
||||||
</td></tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<?php
|
|
||||||
|
|
||||||
if ($select == 0) {
|
|
||||||
$query = "select * from emperior_table order by no desc";
|
|
||||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
|
||||||
$empcount = MYDB_num_rows($result);
|
|
||||||
|
|
||||||
for ($i=0; $i < $empcount; $i++) {
|
|
||||||
$emperior = MYDB_fetch_array($result);
|
|
||||||
|
|
||||||
echo "
|
|
||||||
<form action=a_emperior2.php method=post>
|
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
|
||||||
<tr>
|
|
||||||
<td bgcolor=skyblue align=center colspan=8>
|
|
||||||
<font size=5>{$emperior['phase']}</font>
|
|
||||||
<input type=submit value='자세히'>
|
|
||||||
<input type=hidden name=select value='{$emperior['no']}'>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align=center style=color:".newColor($emperior['color'])."; bgcolor={$emperior['color']} colspan=8>
|
|
||||||
<font size=5>{$emperior['name']} ({$emperior['year']}年 {$emperior['month']}月)</font>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id=bg1 align=center width=80>국 력</td>
|
|
||||||
<td align=center width=170>{$emperior['power']}</td>
|
|
||||||
<td id=bg1 align=center width=80>장 수</td>
|
|
||||||
<td align=center width=170>{$emperior['gennum']}</td>
|
|
||||||
<td id=bg1 align=center width=80>속 령</td>
|
|
||||||
<td align=center width=170>{$emperior['citynum']}</td>
|
|
||||||
<td id=bg1 align=center width=80>성 향</td>
|
|
||||||
<td align=center width=170>{$emperior['type']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id=bg1 align=center>황 제</td>
|
|
||||||
<td align=center>{$emperior['l12name']}</td>
|
|
||||||
<td id=bg1 align=center>승 상</td>
|
|
||||||
<td align=center>{$emperior['l11name']}</td>
|
|
||||||
<td id=bg1 align=center>위 장 군</td>
|
|
||||||
<td align=center>{$emperior['l10name']}</td>
|
|
||||||
<td id=bg1 align=center>사 공</td>
|
|
||||||
<td align=center>{$emperior['l9name']}</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</form>";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$query = "select * from emperior_table where no='$select'";
|
|
||||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
|
||||||
$emperior = MYDB_fetch_array($result);
|
|
||||||
|
|
||||||
echo "
|
|
||||||
<form action=a_emperior2.php method=post>
|
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
|
||||||
<tr>
|
|
||||||
<td bgcolor=skyblue align=center colspan=6>
|
|
||||||
<font size=5>{$emperior['phase']}</font>
|
|
||||||
<input type=submit value='전체보기'>
|
|
||||||
<input type=hidden name=select value='0'>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id=bg1 width=98 align=center>국 가 수<br>(최종 / 최대)</td>
|
|
||||||
<td align=center width=398 colspan=2>{$emperior['nation_count']}</td>
|
|
||||||
<td id=bg1 width=98 align=center>장 수 수<br>(최종 / 최대)</td>
|
|
||||||
<td align=center width=398 colspan=2>{$emperior['gen_count']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id=bg1 align=center>등 장 국 가</td>
|
|
||||||
<td colspan=5>{$emperior['nation_name']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id=bg1 align=center>국가별 성향</td>
|
|
||||||
<td colspan=5>{$emperior['nation_hist']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id=bg1 align=center>장 수 성 격</td>
|
|
||||||
<td colspan=5>{$emperior['personal_hist']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id=bg1 align=center>장 수 특 기</td>
|
|
||||||
<td colspan=5>{$emperior['special_hist']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align=center style=color:".newColor($emperior['color'])."; bgcolor={$emperior['color']} colspan=6>
|
|
||||||
<font size=5>{$emperior['name']} ({$emperior['year']}年 {$emperior['month']}月)</font>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id=bg1 width=98 align=center>국 력</td>
|
|
||||||
<td align=center width=398 colspan=2>{$emperior['power']}</td>
|
|
||||||
<td id=bg1 width=98 align=center>성 향</td>
|
|
||||||
<td align=center width=398 colspan=2>{$emperior['type']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id=bg1 width=98 align=center>장 수</td>
|
|
||||||
<td align=center width=398 colspan=2>{$emperior['gennum']}</td>
|
|
||||||
<td id=bg1 width=98 align=center>속 령</td>
|
|
||||||
<td align=center width=398 colspan=2>{$emperior['citynum']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id=bg1 align=center>총 인 구</td>
|
|
||||||
<td align=center colspan=2>{$emperior['pop']}</td>
|
|
||||||
<td id=bg1 align=center>인 구 율</td>
|
|
||||||
<td align=center colspan=2>{$emperior['poprate']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id=bg1 align=center>국 고</td>
|
|
||||||
<td align=center colspan=2>{$emperior['gold']}</td>
|
|
||||||
<td id=bg1 align=center>병 량</td>
|
|
||||||
<td align=center colspan=2>{$emperior['rice']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id=bg1 align=center>황 제</td>
|
|
||||||
<td width=64> </td>
|
|
||||||
<td width=332>{$emperior['l12name']}</td>
|
|
||||||
<td id=bg1 align=center>승 상</td>
|
|
||||||
<td width=64> </td>
|
|
||||||
<td width=332>{$emperior['l11name']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id=bg1 align=center>위 장 군</td>
|
|
||||||
<td width=64> </td>
|
|
||||||
<td width=332>{$emperior['l10name']}</td>
|
|
||||||
<td id=bg1 align=center>사 공</td>
|
|
||||||
<td width=64> </td>
|
|
||||||
<td width=332>{$emperior['l9name']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id=bg1 align=center>표 기 장 군</td>
|
|
||||||
<td width=64> </td>
|
|
||||||
<td width=332>{$emperior['l8name']}</td>
|
|
||||||
<td id=bg1 align=center>태 위</td>
|
|
||||||
<td width=64> </td>
|
|
||||||
<td width=332>{$emperior['l7name']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id=bg1 align=center>거 기 장 군</td>
|
|
||||||
<td width=64> </td>
|
|
||||||
<td width=332>{$emperior['l6name']}</td>
|
|
||||||
<td id=bg1 align=center>사 도</td>
|
|
||||||
<td width=64> </td>
|
|
||||||
<td width=332>{$emperior['l5name']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id=bg1 align=center>오 호 장 군</td>
|
|
||||||
<td colspan=5>{$emperior['tiger']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id=bg1 align=center>건 안 칠 자</td>
|
|
||||||
<td colspan=5>{$emperior['eagle']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id=bg1 align=center>장 수 들<br>(공헌도 순서)</td>
|
|
||||||
<td colspan=5>{$emperior['gen']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id=bg1 align=center>역 사 기 록</td>
|
|
||||||
<td colspan=5>".ConvertLog($emperior['history'], 1)."</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</form>";
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
|
||||||
<tr><td><?=closeButton()?></td></tr>
|
|
||||||
<tr><td><?=banner()?></td></tr>
|
|
||||||
</table>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
include "lib.php";
|
include "lib.php";
|
||||||
@@ -13,8 +14,8 @@ $templates->registerFunction('ConvertLog', '\sammo\ConvertLog');
|
|||||||
$templates->registerFunction('newColor', '\sammo\newColor');
|
$templates->registerFunction('newColor', '\sammo\newColor');
|
||||||
increaseRefresh("왕조일람", 1);
|
increaseRefresh("왕조일람", 1);
|
||||||
|
|
||||||
$emperior = $db->queryFirstRow('SELECT * FROM emperior WHERE `no`=%i',$select);
|
$emperior = $db->queryFirstRow('SELECT * FROM emperior WHERE `no`=%i', $select);
|
||||||
$serverID = $emperior['server_id']??($emperior['serverID']??null);
|
$serverID = $emperior['server_id'] ?? ($emperior['serverID'] ?? null);
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
@@ -22,193 +23,202 @@ $serverID = $emperior['server_id']??($emperior['serverID']??null);
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta name="color-scheme" content="dark">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<title><?=UniqueConst::$serverName?>: 왕조일람</title>
|
<meta name="viewport" content="width=1024" />
|
||||||
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
|
<title><?= UniqueConst::$serverName ?>: 왕조일람</title>
|
||||||
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
<?=WebUtil::printJS('js/common.js')?>
|
<?= WebUtil::printDist('vue', [], true) ?>
|
||||||
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
|
<?= WebUtil::printDist('ts', 'common', true) ?>
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
<?=WebUtil::printCSS('css/common.css')?>
|
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<table align=center width=1000 class="tb_layout bg0">
|
<table align=center width=1000 class="tb_layout bg0">
|
||||||
<tr><td>역 대 왕 조<br>
|
<tr>
|
||||||
<button onclick=window.close()>창 닫기</button>
|
<td>역 대 왕 조<br>
|
||||||
<div style="float:right;"><a href="a_emperior.php"><button>전체보기</button></a><div>
|
<button onclick=window.close()>창 닫기</button>
|
||||||
</td></tr>
|
<div style="float:right;"><a href="a_emperior.php"><button type='button'>전체보기</button></a>
|
||||||
|
<div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
if($emperior):
|
if ($emperior) :
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
<tr>
|
<tr>
|
||||||
<td bgcolor=skyblue align=center colspan=6>
|
<td bgcolor=skyblue align=center colspan=6>
|
||||||
<font size=5><?=$emperior['phase']?></font>
|
<font size=5><?= $emperior['phase'] ?></font>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td id=bg1 width=98 align=center>국 가 수<br>(최종 / 최대)</td>
|
<td class='bg1' width=98 align=center>국 가 수<br>(최종 / 최대)</td>
|
||||||
<td align=center width=398 colspan=2><?=$emperior['nation_count']?></td>
|
<td align=center width=398 colspan=2><?= $emperior['nation_count'] ?></td>
|
||||||
<td id=bg1 width=98 align=center>장 수 수<br>(최종 / 최대)</td>
|
<td class='bg1' width=98 align=center>장 수 수<br>(최종 / 최대)</td>
|
||||||
<td align=center width=398 colspan=2><?=$emperior['gen_count']?></td>
|
<td align=center width=398 colspan=2><?= $emperior['gen_count'] ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td id=bg1 align=center>등 장 국 가</td>
|
<td class='bg1' align=center>등 장 국 가</td>
|
||||||
<td colspan=5><?=$emperior['nation_name']?></td>
|
<td colspan=5><?= $emperior['nation_name'] ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td id=bg1 align=center>국가별 성향</td>
|
<td class='bg1' align=center>국가별 성향</td>
|
||||||
<td colspan=5><?=$emperior['nation_hist']?></td>
|
<td colspan=5><?= $emperior['nation_hist'] ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td id=bg1 align=center>장 수 성 격</td>
|
<td class='bg1' align=center>장 수 성 격</td>
|
||||||
<td colspan=5><?=$emperior['personal_hist']?></td>
|
<td colspan=5><?= $emperior['personal_hist'] ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td id=bg1 align=center>장 수 특 기</td>
|
<td class='bg1' align=center>장 수 특 기</td>
|
||||||
<td colspan=5><?=$emperior['special_hist']?></td>
|
<td colspan=5><?= $emperior['special_hist'] ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align=center style=color:<?=newColor($emperior['color'])?>; bgcolor=<?=$emperior['color']?> colspan=6>
|
<td align=center style=color:<?= newColor($emperior['color']) ?>; bgcolor=<?= $emperior['color'] ?> colspan=6>
|
||||||
<font size=5><?=$emperior['name']?> (<?=$emperior['year']?>年 <?=$emperior['month']?>月)</font>
|
<font size=5><?= $emperior['name'] ?> (<?= $emperior['year'] ?>年 <?= $emperior['month'] ?>月)</font>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td id=bg1 width=98 align=center>국 력</td>
|
<td class='bg1' width=98 align=center>국 력</td>
|
||||||
<td align=center width=398 colspan=2><?=$emperior['power']?></td>
|
<td align=center width=398 colspan=2><?= $emperior['power'] ?></td>
|
||||||
<td id=bg1 width=98 align=center>성 향</td>
|
<td class='bg1' width=98 align=center>성 향</td>
|
||||||
<td align=center width=398 colspan=2><?=$emperior['type']?></td>
|
<td align=center width=398 colspan=2><?= $emperior['type'] ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td id=bg1 width=98 align=center>장 수</td>
|
<td class='bg1' width=98 align=center>장 수</td>
|
||||||
<td align=center width=398 colspan=2><?=$emperior['gennum']?></td>
|
<td align=center width=398 colspan=2><?= $emperior['gennum'] ?></td>
|
||||||
<td id=bg1 width=98 align=center>속 령</td>
|
<td class='bg1' width=98 align=center>속 령</td>
|
||||||
<td align=center width=398 colspan=2><?=$emperior['citynum']?></td>
|
<td align=center width=398 colspan=2><?= $emperior['citynum'] ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td id=bg1 align=center>총 인 구</td>
|
<td class='bg1' align=center>총 인 구</td>
|
||||||
<td align=center colspan=2><?=$emperior['pop']?></td>
|
<td align=center colspan=2><?= $emperior['pop'] ?></td>
|
||||||
<td id=bg1 align=center>인 구 율</td>
|
<td class='bg1' align=center>인 구 율</td>
|
||||||
<td align=center colspan=2><?=$emperior['poprate']?></td>
|
<td align=center colspan=2><?= $emperior['poprate'] ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td id=bg1 align=center>국 고</td>
|
<td class='bg1' align=center>국 고</td>
|
||||||
<td align=center colspan=2><?=$emperior['gold']?></td>
|
<td align=center colspan=2><?= $emperior['gold'] ?></td>
|
||||||
<td id=bg1 align=center>병 량</td>
|
<td class='bg1' align=center>병 량</td>
|
||||||
<td align=center colspan=2><?=$emperior['rice']?></td>
|
<td align=center colspan=2><?= $emperior['rice'] ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td id=bg1 align=center>황 제</td>
|
<td class='bg1' align=center>황 제</td>
|
||||||
<td width=64> </td>
|
<td width=64> </td>
|
||||||
<td width=332><?=$emperior['l12name']?></td>
|
<td width=332><?= $emperior['l12name'] ?></td>
|
||||||
<td id=bg1 align=center>승 상</td>
|
<td class='bg1' align=center>승 상</td>
|
||||||
<td width=64> </td>
|
<td width=64> </td>
|
||||||
<td width=332><?=$emperior['l11name']?></td>
|
<td width=332><?= $emperior['l11name'] ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td id=bg1 align=center>위 장 군</td>
|
<td class='bg1' align=center>위 장 군</td>
|
||||||
<td width=64> </td>
|
<td width=64> </td>
|
||||||
<td width=332><?=$emperior['l10name']?></td>
|
<td width=332><?= $emperior['l10name'] ?></td>
|
||||||
<td id=bg1 align=center>사 공</td>
|
<td class='bg1' align=center>사 공</td>
|
||||||
<td width=64> </td>
|
<td width=64> </td>
|
||||||
<td width=332><?=$emperior['l9name']?></td>
|
<td width=332><?= $emperior['l9name'] ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td id=bg1 align=center>표 기 장 군</td>
|
<td class='bg1' align=center>표 기 장 군</td>
|
||||||
<td width=64> </td>
|
<td width=64> </td>
|
||||||
<td width=332><?=$emperior['l8name']?></td>
|
<td width=332><?= $emperior['l8name'] ?></td>
|
||||||
<td id=bg1 align=center>태 위</td>
|
<td class='bg1' align=center>태 위</td>
|
||||||
<td width=64> </td>
|
<td width=64> </td>
|
||||||
<td width=332><?=$emperior['l7name']?></td>
|
<td width=332><?= $emperior['l7name'] ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td id=bg1 align=center>거 기 장 군</td>
|
<td class='bg1' align=center>거 기 장 군</td>
|
||||||
<td width=64> </td>
|
<td width=64> </td>
|
||||||
<td width=332><?=$emperior['l6name']?></td>
|
<td width=332><?= $emperior['l6name'] ?></td>
|
||||||
<td id=bg1 align=center>사 도</td>
|
<td class='bg1' align=center>사 도</td>
|
||||||
<td width=64> </td>
|
<td width=64> </td>
|
||||||
<td width=332><?=$emperior['l5name']?></td>
|
<td width=332><?= $emperior['l5name'] ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td id=bg1 align=center>오 호 장 군</td>
|
<td class='bg1' align=center>오 호 장 군</td>
|
||||||
<td colspan=5><?=$emperior['tiger']?></td>
|
<td colspan=5><?= $emperior['tiger'] ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td id=bg1 align=center>건 안 칠 자</td>
|
<td class='bg1' align=center>건 안 칠 자</td>
|
||||||
<td colspan=5><?=$emperior['eagle']?></td>
|
<td colspan=5><?= $emperior['eagle'] ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td id=bg1 align=center>장 수 들<br>(공헌도 순서)</td>
|
<td class='bg1' align=center>장 수 들<br>(공헌도 순서)</td>
|
||||||
<td colspan=5><?=$emperior['gen']?></td>
|
<td colspan=5><?= $emperior['gen'] ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td id=bg1 align=center>역 사 기 록</td>
|
<td class='bg1' align=center>역 사 기 록</td>
|
||||||
<td colspan=5><?=ConvertLog($emperior['history'], 1)?></td>
|
<td colspan=5><?= formatHistoryToHTML(Json::decode($emperior['history'])) ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
endif;
|
endif;
|
||||||
|
|
||||||
$showServers = $emperior;
|
$showServers = $emperior;
|
||||||
|
|
||||||
if(!$serverID){
|
if (!$serverID) {
|
||||||
$serverID = UniqueConst::$serverID;
|
$serverID = UniqueConst::$serverID;
|
||||||
}
|
|
||||||
|
|
||||||
if($showServers){
|
|
||||||
$nations = $db->query('SELECT * FROM ng_old_nations WHERE server_id=%s ORDER BY date DESC', $serverID);
|
|
||||||
foreach($nations as $nation){
|
|
||||||
if(!$nation['nation']??null){
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$nation += Json::decode($nation['data']);
|
|
||||||
|
|
||||||
$nation['typeName'] = getNationType($nation['type']);
|
|
||||||
$nation['levelName'] = getNationLevel($nation['level']);
|
|
||||||
if($nation['generals']){
|
|
||||||
$generals = $db->query('SELECT `general_no`, `name`, `last_yearmonth` FROM ng_old_generals WHERE server_id=%s AND general_no IN %li', $serverID, $nation['generals']);
|
|
||||||
|
|
||||||
if(count($generals) != $nation['generals'] && $serverID == UniqueConst::$serverID){
|
|
||||||
$liveGenerals = $nation['generals'];
|
|
||||||
foreach($generals as $general){
|
|
||||||
if(in_array($general['general_no'], $nation['generals'])){
|
|
||||||
unset($nation['generals'][$general['general_no']]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$liveGenerals = $db->query('SELECT `no`as`general_no`, `name` FROM general WHERE no IN %li', $liveGenerals);
|
|
||||||
$nation['generalsFull'] = array_merge($liveGenerals, $generals);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$nation['generalsFull'] = $generals;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$nation['generalsFull'] = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
if(key_exists('aux', $nation) && !is_array($nation['aux'])){
|
|
||||||
$nation += Json::decode($nation['aux']);
|
|
||||||
}
|
|
||||||
|
|
||||||
echo $templates->render('oldNation', $nation);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
if ($showServers) {
|
||||||
<tr><td><?=closeButton()?></td></tr>
|
$nations = $db->query('SELECT * FROM ng_old_nations WHERE server_id=%s ORDER BY date DESC', $serverID);
|
||||||
<tr><td><?=banner()?></td></tr>
|
foreach ($nations as $nation) {
|
||||||
</table>
|
if (!$nation['nation'] ?? null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$nation = array_merge(Json::decode($nation['data']), $nation);
|
||||||
|
|
||||||
|
/** @var array $nation */
|
||||||
|
$nation['typeName'] = getNationType($nation['type']);
|
||||||
|
$nation['levelName'] = getNationLevel($nation['level']);
|
||||||
|
/** @var int[]|null $nationGenerals */
|
||||||
|
$nationGenerals = $nation['generals'];
|
||||||
|
|
||||||
|
if ($nationGenerals) {
|
||||||
|
$generals = $db->query('SELECT `general_no`, `name`, `last_yearmonth` FROM ng_old_generals WHERE server_id=%s AND general_no IN %li', $serverID, $nationGenerals);
|
||||||
|
|
||||||
|
if (count($generals) != count($nationGenerals) && $serverID == UniqueConst::$serverID) {
|
||||||
|
$liveGenerals = $nationGenerals;
|
||||||
|
foreach ($generals as $general) {
|
||||||
|
if (in_array($general['general_no'], $nationGenerals)) {
|
||||||
|
unset($nationGenerals[$general['general_no']]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$liveGenerals = $db->query('SELECT `no`as`general_no`, `name` FROM general WHERE no IN %li', $liveGenerals);
|
||||||
|
$nation['generalsFull'] = array_merge($liveGenerals, $generals);
|
||||||
|
} else {
|
||||||
|
$nation['generalsFull'] = $generals;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$nation['generalsFull'] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key_exists('aux', $nation) && !is_array($nation['aux'])) {
|
||||||
|
$nation = array_merge(Json::decode($nation['aux']), $nation);
|
||||||
|
}
|
||||||
|
|
||||||
|
echo $templates->render('oldNation', $nation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td><?= closeButton() ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><?= banner() ?></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||