mirror of
https://github.com/getgrav/grav.git
synced 2025-12-07 16:29:58 +01:00
Compare commits
2235 Commits
1.7.0-rc.1
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
58002f4903 | ||
|
|
19a9fafe37 | ||
|
|
8ad4c006a2 | ||
|
|
52fd9a6e7b | ||
|
|
45e6ed941f | ||
|
|
2c2b2fc2e4 | ||
|
|
b0301beee3 | ||
|
|
ce6a1b3bcb | ||
|
|
d42adcd593 | ||
|
|
bcd93c321b | ||
|
|
8bd711f6b1 | ||
|
|
fa707eb7eb | ||
|
|
18d285ec36 | ||
|
|
04c6bdf287 | ||
|
|
3ddc548d51 | ||
|
|
48343d7714 | ||
|
|
9c27496cc1 | ||
|
|
fd51d33d3f | ||
|
|
7304612d3a | ||
|
|
e6025670ea | ||
|
|
92b3d5b1f8 | ||
|
|
2ee3ff074c | ||
|
|
4fab5f99bb | ||
|
|
1d5d1357b8 | ||
|
|
eb649c35a3 | ||
|
|
9b75d96bbf | ||
|
|
41d771da7c | ||
|
|
7e3fccce54 | ||
|
|
48c6d2eb93 | ||
|
|
e86820d438 | ||
|
|
4c324ef4b8 | ||
|
|
a07a1b332a | ||
|
|
c8204f442a | ||
|
|
ba479007ac | ||
|
|
38494b2c1c | ||
|
|
ba3e0686a6 | ||
|
|
f0ed8e0ea0 | ||
|
|
02fbe27efd | ||
|
|
cfa18a8fd1 | ||
|
|
89f44631bd | ||
|
|
2f2f1e518d | ||
|
|
682109bf3b | ||
|
|
f420db0eea | ||
|
|
c6764f9815 | ||
|
|
a2f944e6c7 | ||
|
|
68ff6ae342 | ||
|
|
505fc208bb | ||
|
|
cd50bd6d63 | ||
|
|
0278eb17cb | ||
|
|
14fba5170e | ||
|
|
5af47f0634 | ||
|
|
6263a34c09 | ||
|
|
5a6c00f68c | ||
|
|
52a8854f6b | ||
|
|
945cd6aa8f | ||
|
|
070b53180d | ||
|
|
042b845b8d | ||
|
|
84b3a9e68e | ||
|
|
70a2e668ec | ||
|
|
e04391484e | ||
|
|
6d72867bef | ||
|
|
7e8c0e3f6f | ||
|
|
4adc7672ac | ||
|
|
dd89d7e25b | ||
|
|
ce817c1bd1 | ||
|
|
918bfc6f2b | ||
|
|
0afbce518d | ||
|
|
ff0de91bab | ||
|
|
2a18c07a64 | ||
|
|
16b0b562fb | ||
|
|
ef48476c88 | ||
|
|
f73df193ad | ||
|
|
8c1e4252f2 | ||
|
|
de260489ee | ||
|
|
1c5c2ac08d | ||
|
|
841259ca2a | ||
|
|
20809f3fea | ||
|
|
1b75df73ef | ||
|
|
a620556e4c | ||
|
|
975a2a8dd3 | ||
|
|
915991ac6a | ||
|
|
3fad2a8173 | ||
|
|
06471eb8cf | ||
|
|
71eb774a39 | ||
|
|
65689101ab | ||
|
|
23d92e6a41 | ||
|
|
1982717272 | ||
|
|
e82a0ce8bd | ||
|
|
38840ff080 | ||
|
|
3cf616e609 | ||
|
|
ea5ba5dda3 | ||
|
|
f437235eb9 | ||
|
|
80b8389432 | ||
|
|
5815c8cae5 | ||
|
|
0ac77271cc | ||
|
|
269bf78084 | ||
|
|
cd5f3842ed | ||
|
|
997bdfff07 | ||
|
|
da0fbf9dd6 | ||
|
|
6a4ab16529 | ||
|
|
c9640d7258 | ||
|
|
7325eb2cfe | ||
|
|
f30cd26956 | ||
|
|
17706d5647 | ||
|
|
a0b64b6d88 | ||
|
|
4650bd073e | ||
|
|
4cab0a7ba1 | ||
|
|
44fd1172b8 | ||
|
|
920642411c | ||
|
|
2999c06a3a | ||
|
|
d97b2d70bd | ||
|
|
5e7b482972 | ||
|
|
9230a5a40f | ||
|
|
286b5a5179 | ||
|
|
70d6aec1a7 | ||
|
|
9dd507b717 | ||
|
|
b6a37cfff3 | ||
|
|
09aa2fb8fd | ||
|
|
3f0b204728 | ||
|
|
f10894fe47 | ||
|
|
b68872e3fd | ||
|
|
43126b09e4 | ||
|
|
2c4b69f9ec | ||
|
|
d6cbc263e7 | ||
|
|
c56d24c0d7 | ||
|
|
7192cfe549 | ||
|
|
a5c6f1dbe9 | ||
|
|
c8227b38fc | ||
|
|
77114ecdd0 | ||
|
|
23da92d0ff | ||
|
|
f88c09adca | ||
|
|
7dd5c8a0ba | ||
|
|
cf2ac28be2 | ||
|
|
43ddf45057 | ||
|
|
57212ec9a5 | ||
|
|
b55e86a8ba | ||
|
|
2b1a7d3fb6 | ||
|
|
250568bae5 | ||
|
|
75d8356f1b | ||
|
|
c82645a42a | ||
|
|
3664096550 | ||
|
|
03849923d4 | ||
|
|
6664d98de8 | ||
|
|
17323ec76c | ||
|
|
9b9079bdd7 | ||
|
|
db3df738e8 | ||
|
|
38075f9c86 | ||
|
|
b0dac5f4b4 | ||
|
|
f7c77d1173 | ||
|
|
0fd734c8df | ||
|
|
b642b2c999 | ||
|
|
ae147fa53b | ||
|
|
9e6df39bff | ||
|
|
8ac6076f88 | ||
|
|
cef7812472 | ||
|
|
6f461395a7 | ||
|
|
162fe1acc2 | ||
|
|
332748a1f9 | ||
|
|
1a9a60115d | ||
|
|
a55052b8b0 | ||
|
|
dc7354e7e1 | ||
|
|
afc1513aad | ||
|
|
466b2a16e8 | ||
|
|
a21640ace6 | ||
|
|
09920deabc | ||
|
|
0bd72f4bb9 | ||
|
|
ec55a80183 | ||
|
|
d07ac5b6ea | ||
|
|
fa29f6672a | ||
|
|
006d8c85a0 | ||
|
|
c608ed10cf | ||
|
|
9d71de8e54 | ||
|
|
89764a51fb | ||
|
|
b851d9bf9d | ||
|
|
a0679fc050 | ||
|
|
e497a93da6 | ||
|
|
56cc894c1d | ||
|
|
d07f3770bc | ||
|
|
3baaf19c31 | ||
|
|
7236862a15 | ||
|
|
8811b7aad0 | ||
|
|
4a22f3dc8d | ||
|
|
fa56984dc3 | ||
|
|
90fd68d4a5 | ||
|
|
7613e38b6d | ||
|
|
830a442faa | ||
|
|
8d7b658aa6 | ||
|
|
83d098b891 | ||
|
|
d798859acd | ||
|
|
08d74df6e3 | ||
|
|
2620e836d4 | ||
|
|
7e723eb7f5 | ||
|
|
1d1d8da431 | ||
|
|
4097d85daa | ||
|
|
2e975dfa90 | ||
|
|
a1e583f657 | ||
|
|
5cf7ef864b | ||
|
|
199cdd4364 | ||
|
|
2896aea30a | ||
|
|
3952491ce9 | ||
|
|
6b07088189 | ||
|
|
a0614dc3eb | ||
|
|
346d194125 | ||
|
|
964e37c6f0 | ||
|
|
c55f2bed4a | ||
|
|
ecf664c8e6 | ||
|
|
e2257a9783 | ||
|
|
6fa63197a0 | ||
|
|
f686e0ac64 | ||
|
|
5a741d9b10 | ||
|
|
16a50767dd | ||
|
|
d72fca121f | ||
|
|
e0ff168cf3 | ||
|
|
bbfc3b5658 | ||
|
|
106dc58329 | ||
|
|
ca1e5ebb8a | ||
|
|
6a585857b0 | ||
|
|
f81a4ca008 | ||
|
|
8c1b4448e9 | ||
|
|
f73813103d | ||
|
|
9c697f178d | ||
|
|
20ca44fd53 | ||
|
|
24cd0e133f | ||
|
|
9f4a86317b | ||
|
|
25ace6458b | ||
|
|
856a478bd6 | ||
|
|
faa8ee5fe1 | ||
|
|
785f641ea5 | ||
|
|
013ff7ee1b | ||
|
|
c97a0ffb16 | ||
|
|
51623ee0da | ||
|
|
8c941cc6d3 | ||
|
|
b6bba9eb99 | ||
|
|
77adfcb831 | ||
|
|
ee8d783d05 | ||
|
|
d184e25f05 | ||
|
|
04f9385aa8 | ||
|
|
afb5b02e57 | ||
|
|
4187a04235 | ||
|
|
26a6cb75ad | ||
|
|
37d0498e1b | ||
|
|
dd8d610ae0 | ||
|
|
b9529d0010 | ||
|
|
4149c81339 | ||
|
|
2da91d9c8b | ||
|
|
d69adcf347 | ||
|
|
45e2c27c66 | ||
|
|
f77df43d7a | ||
|
|
de1ccfa12d | ||
|
|
5928411b86 | ||
|
|
15dc7568a5 | ||
|
|
b435d2b884 | ||
|
|
dbedb60634 | ||
|
|
f9f5781af8 | ||
|
|
ad8b1b79bd | ||
|
|
cd2a7d8d98 | ||
|
|
1dc6866eab | ||
|
|
0b16401a91 | ||
|
|
78b8125eae | ||
|
|
0d7cd64d0d | ||
|
|
3ea86e1794 | ||
|
|
6df03063c8 | ||
|
|
e5990f431d | ||
|
|
b3d55ca81a | ||
|
|
a0e728b540 | ||
|
|
171a5c074c | ||
|
|
f33e89fa45 | ||
|
|
e33d71e4b9 | ||
|
|
ddbb1362dc | ||
|
|
a71403f158 | ||
|
|
88eb9f915a | ||
|
|
70e5262512 | ||
|
|
a1c116dd82 | ||
|
|
cc08da0c74 | ||
|
|
f7eab6b163 | ||
|
|
f59fa9a291 | ||
|
|
458c64086e | ||
|
|
345086538c | ||
|
|
c62e173955 | ||
|
|
1b8e267d0a | ||
|
|
eb72cb32bb | ||
|
|
4e01398545 | ||
|
|
b0dd2358f4 | ||
|
|
0c9333e60d | ||
|
|
0b53609fa0 | ||
|
|
cfa510e7f7 | ||
|
|
6d5f0ff9ba | ||
|
|
71939e18be | ||
|
|
45f8fe4d0b | ||
|
|
2179ef33a7 | ||
|
|
d0ae677e61 | ||
|
|
6a9b1f2214 | ||
|
|
b1117e45c9 | ||
|
|
382a836d80 | ||
|
|
db3e39f0cb | ||
|
|
80ce87e4a9 | ||
|
|
f0f29891d6 | ||
|
|
c66da5bedb | ||
|
|
1f21d259ea | ||
|
|
21b218e464 | ||
|
|
3b2fb023b8 | ||
|
|
92babda742 | ||
|
|
3cdbc5890a | ||
|
|
a8042a666c | ||
|
|
79f9640b12 | ||
|
|
65aeb82e21 | ||
|
|
e3b0aa0c50 | ||
|
|
7e617a632e | ||
|
|
fb5dd14875 | ||
|
|
490bdd6ce7 | ||
|
|
893b1dd1db | ||
|
|
1146959806 | ||
|
|
45103f81b4 | ||
|
|
c426f4a9cc | ||
|
|
0d27f2d77e | ||
|
|
b4c62101a4 | ||
|
|
950cd0854f | ||
|
|
4cd137830b | ||
|
|
aa19bcdcbe | ||
|
|
cf6bf7d1ec | ||
|
|
47665dbddb | ||
|
|
dc209453d0 | ||
|
|
5b89091f13 | ||
|
|
50ee844759 | ||
|
|
244758d438 | ||
|
|
71bbed12f9 | ||
|
|
8c2c1cb726 | ||
|
|
9d01140a63 | ||
|
|
259e775db8 | ||
|
|
d4c617ff19 | ||
|
|
c7680bb50a | ||
|
|
722ce55ccb | ||
|
|
5b950ce73f | ||
|
|
8dfa2110bf | ||
|
|
31aeaf6309 | ||
|
|
d96b023d72 | ||
|
|
4de3cab522 | ||
|
|
b34f70f91d | ||
|
|
9da8cad7fe | ||
|
|
e4a30f5966 | ||
|
|
814a050858 | ||
|
|
b6179bd2de | ||
|
|
e5ac37e3cf | ||
|
|
66463ddff3 | ||
|
|
956c2993ae | ||
|
|
3cf67cb2fd | ||
|
|
36afa9d848 | ||
|
|
694ab76d1e | ||
|
|
369c2e9ffa | ||
|
|
95ae35216a | ||
|
|
9c0477fa52 | ||
|
|
e1ab15e323 | ||
|
|
ff77d58acb | ||
|
|
adfbd5730b | ||
|
|
bf175983ec | ||
|
|
470b69c775 | ||
|
|
60648c43db | ||
|
|
75cd4f4306 | ||
|
|
2412115f41 | ||
|
|
598836d656 | ||
|
|
e1019c4420 | ||
|
|
a8a6c0c520 | ||
|
|
685d76231a | ||
|
|
0f9b9f780f | ||
|
|
1e2792874d | ||
|
|
0a061ce95e | ||
|
|
d82ee029e1 | ||
|
|
3b83c8204d | ||
|
|
9ab7a4759a | ||
|
|
c261d0d3f7 | ||
|
|
940415dddb | ||
|
|
60506e6f34 | ||
|
|
bd7a74d79e | ||
|
|
5fcf690918 | ||
|
|
904ec46a9f | ||
|
|
259c148edb | ||
|
|
0ae980062f | ||
|
|
a888f19ad1 | ||
|
|
479b89134d | ||
|
|
d0d083d985 | ||
|
|
396b412dda | ||
|
|
8be02e44c6 | ||
|
|
ec115a6a64 | ||
|
|
3b92c1aca4 | ||
|
|
2d9df03766 | ||
|
|
f086f84ff2 | ||
|
|
a2b23ad80e | ||
|
|
88350d9090 | ||
|
|
b2f27fbdf2 | ||
|
|
72b769aa63 | ||
|
|
8a7e38751a | ||
|
|
3e6c719441 | ||
|
|
8efb000801 | ||
|
|
6d6e92048e | ||
|
|
8c365d45a4 | ||
|
|
ee6448c307 | ||
|
|
f8c9e9ada4 | ||
|
|
87ab3ae4a7 | ||
|
|
68dc461bc0 | ||
|
|
4dd98610a4 | ||
|
|
0358e55aed | ||
|
|
9e5ed10925 | ||
|
|
3b7eb198cf | ||
|
|
81ed7379a9 | ||
|
|
e1950e985b | ||
|
|
84c61af807 | ||
|
|
93755c7329 | ||
|
|
5329918e2f | ||
|
|
efd7726646 | ||
|
|
4c762c0ac3 | ||
|
|
81a911572c | ||
|
|
c56bb86b61 | ||
|
|
ea010f19f0 | ||
|
|
1fae4504a2 | ||
|
|
d99c84d9f8 | ||
|
|
c732bfaeef | ||
|
|
4f0fee684a | ||
|
|
884faa91bb | ||
|
|
8c261a05cc | ||
|
|
95aa57ca50 | ||
|
|
0bc0e58707 | ||
|
|
a86e0d4b96 | ||
|
|
44c819b021 | ||
|
|
3f13d81c6f | ||
|
|
720a965c7e | ||
|
|
f0e263a404 | ||
|
|
ad33a63ad2 | ||
|
|
f7b7f3337d | ||
|
|
983fcc5e40 | ||
|
|
9c5b8b6496 | ||
|
|
71fc4eb16b | ||
|
|
ea2858ea2b | ||
|
|
d080578e83 | ||
|
|
8427eb6d3e | ||
|
|
e3a342dabd | ||
|
|
00b13d1093 | ||
|
|
7e5ff71623 | ||
|
|
72ba7ccab6 | ||
|
|
ea9c9fdca8 | ||
|
|
5e379bfa39 | ||
|
|
fb1e31d0e4 | ||
|
|
8e6b823833 | ||
|
|
6fcc4ec5d0 | ||
|
|
3e9866920b | ||
|
|
3a00ca0457 | ||
|
|
2f6e4b1ad8 | ||
|
|
01d627e8f7 | ||
|
|
51a386e252 | ||
|
|
30502e8042 | ||
|
|
01264ef70d | ||
|
|
de642df06e | ||
|
|
dd8945124e | ||
|
|
0b6428ec29 | ||
|
|
840862c26d | ||
|
|
f799a71001 | ||
|
|
3f10c05840 | ||
|
|
dbca0b451c | ||
|
|
6882037b85 | ||
|
|
5d2dc6c329 | ||
|
|
e9f28ab824 | ||
|
|
186eb8ae6c | ||
|
|
2258adcb05 | ||
|
|
20c4cdefe8 | ||
|
|
aba6382f2e | ||
|
|
32dd550178 | ||
|
|
ec3175fc89 | ||
|
|
dac1614306 | ||
|
|
37e92e4f55 | ||
|
|
1b0c3d1fce | ||
|
|
00cb9c3540 | ||
|
|
b9800b7c35 | ||
|
|
b5ab00639b | ||
|
|
cf38cccda1 | ||
|
|
024964eafb | ||
|
|
f8d736b24a | ||
|
|
62c4f3c768 | ||
|
|
31920bb153 | ||
|
|
b18b49a239 | ||
|
|
9d6a2dba09 | ||
|
|
de4af5dbcc | ||
|
|
f31541250f | ||
|
|
f570cea3bd | ||
|
|
0b54a7b4bc | ||
|
|
f464492582 | ||
|
|
81aa4601e4 | ||
|
|
6b57f29511 | ||
|
|
74296a80d0 | ||
|
|
8dbc394ae7 | ||
|
|
89709a7190 | ||
|
|
e6320fa327 | ||
|
|
3bf979bd0f | ||
|
|
6fa96ca554 | ||
|
|
60ce105fa5 | ||
|
|
ec16b5184e | ||
|
|
a7a9b5d132 | ||
|
|
460ca49f9b | ||
|
|
32a486f1d4 | ||
|
|
1237f0a6d6 | ||
|
|
9ec3e7d731 | ||
|
|
d6dcd96301 | ||
|
|
2957077935 | ||
|
|
6ba1cff114 | ||
|
|
6218a4b366 | ||
|
|
28c4305d46 | ||
|
|
a2413718f3 | ||
|
|
767a17bf50 | ||
|
|
d75c87ca5e | ||
|
|
c2a8145f2c | ||
|
|
26e4768bc5 | ||
|
|
4464f29169 | ||
|
|
2ea39309b6 | ||
|
|
1c0ed43afa | ||
|
|
a092aed4ed | ||
|
|
7c2b21fb60 | ||
|
|
e1ca3c2f70 | ||
|
|
0da5ccb3e1 | ||
|
|
2830ba9120 | ||
|
|
5a355fb94e | ||
|
|
b0add67cdd | ||
|
|
236c38e65d | ||
|
|
c9c23c6c4f | ||
|
|
8f0443a73d | ||
|
|
c9271c80a7 | ||
|
|
62d9db7650 | ||
|
|
4f7dad2872 | ||
|
|
57d6be0f78 | ||
|
|
ae55b4794f | ||
|
|
d82851af10 | ||
|
|
730231b8b7 | ||
|
|
82015d4ae7 | ||
|
|
4376c8ce57 | ||
|
|
aa1e1bc0ad | ||
|
|
35d4d00429 | ||
|
|
3e7f67f589 | ||
|
|
c08341046b | ||
|
|
010753bdd6 | ||
|
|
d36bc4b8a2 | ||
|
|
847f09a2ac | ||
|
|
28469a6bf6 | ||
|
|
0d19bc6e97 | ||
|
|
492cc1d2f1 | ||
|
|
4d4efb31e3 | ||
|
|
c7bc5f5b59 | ||
|
|
41b8fbb0e0 | ||
|
|
e60ba13d75 | ||
|
|
e0deeeb551 | ||
|
|
499b25aad8 | ||
|
|
9fd580c49b | ||
|
|
e09bae918c | ||
|
|
0abde01442 | ||
|
|
03f71fa49d | ||
|
|
4f92568171 | ||
|
|
b80fcca0cf | ||
|
|
879eb27540 | ||
|
|
7b7235297e | ||
|
|
34ab8408fa | ||
|
|
f19297d5f7 | ||
|
|
78b8051627 | ||
|
|
3dd0cabeac | ||
|
|
b992d7f185 | ||
|
|
a7e82f279a | ||
|
|
6d0d6c22d3 | ||
|
|
7e52112b21 | ||
|
|
a900b89795 | ||
|
|
cad8510dae | ||
|
|
7cafeb2870 | ||
|
|
b3b5fca16c | ||
|
|
ec884997ef | ||
|
|
3a45748ce6 | ||
|
|
c4e10cf59f | ||
|
|
2c252c43b4 | ||
|
|
382756f79b | ||
|
|
11013cbb57 | ||
|
|
2377be9a2b | ||
|
|
b1938c9790 | ||
|
|
5d842349e5 | ||
|
|
0323a898cb | ||
|
|
d275532cf8 | ||
|
|
7306f164e9 | ||
|
|
3ca58e9ae1 | ||
|
|
88219fbf0e | ||
|
|
5eefc91781 | ||
|
|
67ef9b221a | ||
|
|
c82a35cea0 | ||
|
|
840441bc9b | ||
|
|
9556e47874 | ||
|
|
45fd533186 | ||
|
|
5248519c37 | ||
|
|
5b9a0fb237 | ||
|
|
389ffe1c7a | ||
|
|
7b39a1bd8f | ||
|
|
4c5c5925b2 | ||
|
|
96df7deaf4 | ||
|
|
7666651324 | ||
|
|
b9db2f3322 | ||
|
|
84a1ab6ca5 | ||
|
|
3b89377570 | ||
|
|
c3c31880b0 | ||
|
|
52449246e5 | ||
|
|
b03de18304 | ||
|
|
9bb6f5366e | ||
|
|
d126d1b656 | ||
|
|
6f2fa9311a | ||
|
|
61061220d7 | ||
|
|
aa7e64f2b7 | ||
|
|
b58210de1a | ||
|
|
0bb52c75ce | ||
|
|
da6b41f8a6 | ||
|
|
1ab2f7083c | ||
|
|
707710d679 | ||
|
|
bab83ed977 | ||
|
|
c103efea22 | ||
|
|
3e784a2f15 | ||
|
|
21f76a1e34 | ||
|
|
a8c4e730f6 | ||
|
|
c1a9a7d648 | ||
|
|
d329df2bb0 | ||
|
|
f90232e511 | ||
|
|
57bd3c9cb5 | ||
|
|
419692b9e4 | ||
|
|
b422d9585c | ||
|
|
67b9623d6c | ||
|
|
bda6b26896 | ||
|
|
9b2af98b0b | ||
|
|
b07bf96ad9 | ||
|
|
fb2c4f48f7 | ||
|
|
308383b093 | ||
|
|
f8f5502c40 | ||
|
|
55b45fcf2f | ||
|
|
bd471cb61b | ||
|
|
2ac38d39ea | ||
|
|
7bb8d10b22 | ||
|
|
f9fcdd6c51 | ||
|
|
3febaaa802 | ||
|
|
178cc9c5ea | ||
|
|
8d51911873 | ||
|
|
99ceb40c5f | ||
|
|
8767bfb9b0 | ||
|
|
756b088ada | ||
|
|
c962201bae | ||
|
|
2335271472 | ||
|
|
47d7927bac | ||
|
|
d15542e553 | ||
|
|
e6447f7203 | ||
|
|
fbcaf991aa | ||
|
|
cc8ec10098 | ||
|
|
92824f44e6 | ||
|
|
c4eefc13a7 | ||
|
|
d541808604 | ||
|
|
231c8a0f4c | ||
|
|
ea39587329 | ||
|
|
8f3ac75afd | ||
|
|
b40b543790 | ||
|
|
3b7921b698 | ||
|
|
6af1ee48a5 | ||
|
|
4519971a76 | ||
|
|
26295d5cf2 | ||
|
|
bfc9e26f26 | ||
|
|
d939b1e563 | ||
|
|
8343cfb278 | ||
|
|
290a28109e | ||
|
|
5bec5db5e1 | ||
|
|
a6fb0a14f0 | ||
|
|
7cb62ddc75 | ||
|
|
0f85b831b5 | ||
|
|
530e6a4399 | ||
|
|
c7700c2e16 | ||
|
|
89acc59ac3 | ||
|
|
9a25c88471 | ||
|
|
4ccbdafe8a | ||
|
|
74096e836f | ||
|
|
1c51bf8a66 | ||
|
|
a4beb9b8bd | ||
|
|
484a41e42a | ||
|
|
def62ec2a2 | ||
|
|
fae431bc39 | ||
|
|
25bc1edf31 | ||
|
|
945b90fa46 | ||
|
|
420a4e3566 | ||
|
|
f2a7833933 | ||
|
|
491252476d | ||
|
|
6ed453890d | ||
|
|
432f0eb9e5 | ||
|
|
236c068d70 | ||
|
|
3f3503e0f3 | ||
|
|
bc70c9b93c | ||
|
|
90f5ff7c74 | ||
|
|
3bfbb1a4ef | ||
|
|
1f3f1828c2 | ||
|
|
6c7064db93 | ||
|
|
9df7b35c65 | ||
|
|
5552ea2d70 | ||
|
|
6079562c90 | ||
|
|
a56453cf0a | ||
|
|
c2f394de17 | ||
|
|
878de339e5 | ||
|
|
86cfba3bc9 | ||
|
|
ad1e20abb7 | ||
|
|
2165743810 | ||
|
|
f3789bb17e | ||
|
|
8f2f5e3373 | ||
|
|
70c0dc6419 | ||
|
|
5b84213fce | ||
|
|
3ad68d6d5a | ||
|
|
627a1510dc | ||
|
|
042d4a4603 | ||
|
|
b2cfc4ef5f | ||
|
|
1c148ab6fb | ||
|
|
cf6159ffe3 | ||
|
|
f04f13723d | ||
|
|
5fd4f5f3eb | ||
|
|
512c2e5d9d | ||
|
|
da3e32f945 | ||
|
|
ae74f29b69 | ||
|
|
ecb2d31df0 | ||
|
|
2355d799f2 | ||
|
|
589f75b60d | ||
|
|
6aebbc2be4 | ||
|
|
fb4bce36cb | ||
|
|
3321f49253 | ||
|
|
5c6fd0453b | ||
|
|
179dec4c3b | ||
|
|
d59a4c63db | ||
|
|
4c3daf6e6f | ||
|
|
c220b6e0c2 | ||
|
|
e4f79dbfce | ||
|
|
d220812f5e | ||
|
|
d4a23c1fbe | ||
|
|
a57c18f63f | ||
|
|
8256af5cfa | ||
|
|
eae3668aee | ||
|
|
8d04330dc5 | ||
|
|
b7ab1df4e3 | ||
|
|
664c95e95a | ||
|
|
a8d292a0d9 | ||
|
|
6e9f6e8f7a | ||
|
|
d0604a055f | ||
|
|
193475a0b6 | ||
|
|
47b444a742 | ||
|
|
3c3b44d6de | ||
|
|
88c2b40ec7 | ||
|
|
88ffa163c4 | ||
|
|
956ed013cf | ||
|
|
061ebf06c6 | ||
|
|
e6911ce24a | ||
|
|
d9c9f6a5eb | ||
|
|
2a04628459 | ||
|
|
33b473c290 | ||
|
|
58b48c2f26 | ||
|
|
ad003a0fc4 | ||
|
|
8f9c417c04 | ||
|
|
8bbf7a849b | ||
|
|
a723bcdb46 | ||
|
|
3d0d836d92 | ||
|
|
67ea6c8066 | ||
|
|
cd1dc5b43d | ||
|
|
1d1c10f0a6 | ||
|
|
125f2a8662 | ||
|
|
4046fed60f | ||
|
|
78ca2f68cc | ||
|
|
18fcf80b4f | ||
|
|
4db28bf47e | ||
|
|
917aa9407d | ||
|
|
6fc2bc4f91 | ||
|
|
7dc6b71252 | ||
|
|
53c7f4c119 | ||
|
|
af4243aff2 | ||
|
|
afc69a3229 | ||
|
|
17dfd130b6 | ||
|
|
05101650ce | ||
|
|
715477586c | ||
|
|
fd61f82f5a | ||
|
|
8b0a6906c7 | ||
|
|
be44bf0b55 | ||
|
|
d2536379e5 | ||
|
|
08d7ad80df | ||
|
|
33a5709903 | ||
|
|
280cbc2330 | ||
|
|
746e75b9e4 | ||
|
|
11decd5889 | ||
|
|
be136d3ce4 | ||
|
|
60fd4ec516 | ||
|
|
b136480669 | ||
|
|
07bd1e03d0 | ||
|
|
75ef1341eb | ||
|
|
ed6b60429c | ||
|
|
2edb12bc18 | ||
|
|
5843e226c3 | ||
|
|
4fc73fdc35 | ||
|
|
78fbc787a4 | ||
|
|
8af71742a0 | ||
|
|
22e550820d | ||
|
|
372f81a09e | ||
|
|
22f5ba4bb1 | ||
|
|
028e247df8 | ||
|
|
4038c0649c | ||
|
|
8aee574069 | ||
|
|
c220aa746a | ||
|
|
da00dd9eec | ||
|
|
30b55ae150 | ||
|
|
6b70826961 | ||
|
|
ae8dfde69d | ||
|
|
63661a40e3 | ||
|
|
b76ee25d49 | ||
|
|
3f7c7692ab | ||
|
|
e34d896278 | ||
|
|
3e90baef02 | ||
|
|
7ed87f87e0 | ||
|
|
35af0aa4b0 | ||
|
|
370b0674bd | ||
|
|
e0c3e28809 | ||
|
|
53302ac082 | ||
|
|
9ff605e08b | ||
|
|
5593327dbc | ||
|
|
31b0510bbd | ||
|
|
beba9c029d | ||
|
|
243053659c | ||
|
|
f2d30e3680 | ||
|
|
76d881bac1 | ||
|
|
c5fd282653 | ||
|
|
d276af6fa9 | ||
|
|
ba19ce4919 | ||
|
|
d86a7a1653 | ||
|
|
f3c82f85c8 | ||
|
|
b17eaba8bf | ||
|
|
0600d6a4d8 | ||
|
|
c51fb1779b | ||
|
|
34b7a28fbe | ||
|
|
a446152631 | ||
|
|
61c2abee35 | ||
|
|
c1d520f1cf | ||
|
|
3bd9e44155 | ||
|
|
7311517d65 | ||
|
|
4568a197e7 | ||
|
|
350134b256 | ||
|
|
1350cf5675 | ||
|
|
21db2e7d4a | ||
|
|
cda08242f1 | ||
|
|
fc8936986f | ||
|
|
ec37fd065f | ||
|
|
47875a4525 | ||
|
|
61adb1e6cf | ||
|
|
907e46631c | ||
|
|
aedf8cda47 | ||
|
|
7a1f5539ed | ||
|
|
49087e9a53 | ||
|
|
a128c7f18d | ||
|
|
c6704d8129 | ||
|
|
c43b375d3b | ||
|
|
9523bab910 | ||
|
|
a8fe62a829 | ||
|
|
4708a46ec9 | ||
|
|
7a99aaa53f | ||
|
|
e54e488f80 | ||
|
|
bf471cc3fa | ||
|
|
fd8c44ba90 | ||
|
|
f9e7f1c08e | ||
|
|
8042caee57 | ||
|
|
3f3f63f411 | ||
|
|
292687ea00 | ||
|
|
aa47cb7b97 | ||
|
|
794237bf30 | ||
|
|
de3aa16aca | ||
|
|
34d001cbef | ||
|
|
21bd51aef9 | ||
|
|
f45afd1f54 | ||
|
|
c975f894ae | ||
|
|
a9b59596d8 | ||
|
|
9333fcc1d6 | ||
|
|
b3426f86a3 | ||
|
|
b3e9682511 | ||
|
|
b3af6c9920 | ||
|
|
2e9fe80e33 | ||
|
|
def389356e | ||
|
|
c5dfa65994 | ||
|
|
c9159695aa | ||
|
|
17d1786e5c | ||
|
|
5437d2db1a | ||
|
|
e390e9901e | ||
|
|
7c946c59f8 | ||
|
|
506c74de55 | ||
|
|
ab9783102e | ||
|
|
a8a8cce25f | ||
|
|
d62e869044 | ||
|
|
6dd5e0fd20 | ||
|
|
c57a29c23f | ||
|
|
2866a51326 | ||
|
|
21f5488d3b | ||
|
|
7b1a188cfe | ||
|
|
fdcf7026d2 | ||
|
|
b8ada23e2b | ||
|
|
5def813a2e | ||
|
|
551a8251f9 | ||
|
|
951ce6f9f8 | ||
|
|
c9448870fa | ||
|
|
1d552ab603 | ||
|
|
e39d01e139 | ||
|
|
d4805bc709 | ||
|
|
35db2f61f7 | ||
|
|
8af1229f65 | ||
|
|
9aa6f5b1f7 | ||
|
|
da8e374443 | ||
|
|
95851e8f52 | ||
|
|
d2350b6786 | ||
|
|
08a2abb713 | ||
|
|
ac62f54aa5 | ||
|
|
fb189a3ce4 | ||
|
|
7e41938317 | ||
|
|
d90b28a399 | ||
|
|
90f5635478 | ||
|
|
acf8724402 | ||
|
|
f1c623c14b | ||
|
|
ee40ad59f2 | ||
|
|
845fac8adf | ||
|
|
896695b30f | ||
|
|
fbfa88739d | ||
|
|
ea191602da | ||
|
|
564287eb21 | ||
|
|
28790197aa | ||
|
|
1db66fd43d | ||
|
|
8d506db73c | ||
|
|
c288d4bd0b | ||
|
|
39247ac7ef | ||
|
|
47b5b10bf4 | ||
|
|
ad1cf15d7c | ||
|
|
6339d9f3cd | ||
|
|
fc36a76fc0 | ||
|
|
18d7fd4c7d | ||
|
|
76e44a1043 | ||
|
|
4c0d107562 | ||
|
|
d359120d81 | ||
|
|
278671deec | ||
|
|
e28360f86a | ||
|
|
75cef03644 | ||
|
|
33be6946f7 | ||
|
|
7f23b088a4 | ||
|
|
c56f9f3277 | ||
|
|
6198d5abf3 | ||
|
|
3f8c51cc01 | ||
|
|
b693ed4071 | ||
|
|
5621f5cdb0 | ||
|
|
83f2097f40 | ||
|
|
879de1d95e | ||
|
|
ec018f40aa | ||
|
|
0866753617 | ||
|
|
5f66f2c4a9 | ||
|
|
40f08a7f8b | ||
|
|
c274337fed | ||
|
|
7d01977a89 | ||
|
|
d058c1d4fc | ||
|
|
1a28155f1c | ||
|
|
7ca7d8e045 | ||
|
|
ec98ddc2df | ||
|
|
72b520745a | ||
|
|
9b4f0ca951 | ||
|
|
a761df80db | ||
|
|
9059904c1a | ||
|
|
568e728d20 | ||
|
|
e56d414357 | ||
|
|
668f8ccdbf | ||
|
|
9281be57fc | ||
|
|
d1e58eb95e | ||
|
|
9f5a15f00a | ||
|
|
3aa47043c9 | ||
|
|
8532db70d2 | ||
|
|
f8106a48ae | ||
|
|
2813934d21 | ||
|
|
defb793b0b | ||
|
|
1fd2162d4f | ||
|
|
094a1bd5ee | ||
|
|
2cf7a5f281 | ||
|
|
2ed451130c | ||
|
|
4d1f88627a | ||
|
|
ed7e51480b | ||
|
|
3e91be9a4d | ||
|
|
3e9bfad78f | ||
|
|
fd34fce3c1 | ||
|
|
0cf684300d | ||
|
|
fe1c808dfd | ||
|
|
aa8c67061c | ||
|
|
8e8de1eeec | ||
|
|
b9fb284a52 | ||
|
|
5efe447861 | ||
|
|
b9ab491cbb | ||
|
|
fb8d76922a | ||
|
|
1a97986bd2 | ||
|
|
a2bb650518 | ||
|
|
f4398a0867 | ||
|
|
b44a1ce939 | ||
|
|
59fb9b2202 | ||
|
|
86ba7333ad | ||
|
|
7e7eac0c75 | ||
|
|
ad50017235 | ||
|
|
aeb2e3a715 | ||
|
|
3d10282567 | ||
|
|
9e89666a24 | ||
|
|
953cf65223 | ||
|
|
371eb76b2b | ||
|
|
75c63704f6 | ||
|
|
16dab2c9f1 | ||
|
|
7fdaf62684 | ||
|
|
312c11b8da | ||
|
|
2ef4c28401 | ||
|
|
27dc8ffb45 | ||
|
|
c5296cd7e0 | ||
|
|
029b408915 | ||
|
|
4fdff81762 | ||
|
|
f3e4f9d311 | ||
|
|
74a667bbef | ||
|
|
7f8263318e | ||
|
|
e0fc832621 | ||
|
|
34aea14ff9 | ||
|
|
284d9ea22b | ||
|
|
1e2d86f054 | ||
|
|
aa81350b6f | ||
|
|
e02d298ff4 | ||
|
|
67f172b741 | ||
|
|
e97fe9de86 | ||
|
|
770bf15342 | ||
|
|
38b1556ee0 | ||
|
|
0af33850a6 | ||
|
|
edafa68414 | ||
|
|
f78debe768 | ||
|
|
4f0f7876a8 | ||
|
|
2a4376b7cb | ||
|
|
1d3d2a0bf9 | ||
|
|
bbddb0a036 | ||
|
|
a8e6aedd04 | ||
|
|
1b9fd6276e | ||
|
|
e229ab191f | ||
|
|
42084ea0cb | ||
|
|
35468bb417 | ||
|
|
9eb20e37c8 | ||
|
|
fa819064ef | ||
|
|
eb89c00bd5 | ||
|
|
0491bd1a76 | ||
|
|
802ae5b712 | ||
|
|
38a393d605 | ||
|
|
ba8b91ad29 | ||
|
|
4b88122ab2 | ||
|
|
0a9b0c107f | ||
|
|
ff1bc03361 | ||
|
|
3967862f10 | ||
|
|
70ab9b4b1b | ||
|
|
50682d73dc | ||
|
|
3926a61528 | ||
|
|
9082cd5b17 | ||
|
|
1c24f9f473 | ||
|
|
0d1c63f0fd | ||
|
|
29a4c66364 | ||
|
|
73bb1f3046 | ||
|
|
86169bbf7c | ||
|
|
bde65bf056 | ||
|
|
0ab7d3ca63 | ||
|
|
644a54e441 | ||
|
|
62ff25f96d | ||
|
|
dabb4402a7 | ||
|
|
4ae9c42cc6 | ||
|
|
be3d49163d | ||
|
|
0cf39a07f5 | ||
|
|
8697a79df0 | ||
|
|
f5e6a1f3de | ||
|
|
7a0ec5f51c | ||
|
|
dfcda95642 | ||
|
|
047ae7b033 | ||
|
|
fad681430e | ||
|
|
4f1af3709e | ||
|
|
2681a8196b | ||
|
|
25e7f6c5e8 | ||
|
|
a67a538dfd | ||
|
|
6dd7044786 | ||
|
|
16eaba1774 | ||
|
|
054805349c | ||
|
|
ec661d2c15 | ||
|
|
58533c495c | ||
|
|
5c1c68c553 | ||
|
|
a9c01926e8 | ||
|
|
8ef52d87f5 | ||
|
|
35296f9f82 | ||
|
|
898759b3b9 | ||
|
|
7cbd067daf | ||
|
|
3b6f5353fd | ||
|
|
47bc6b0411 | ||
|
|
b56ff0c31c | ||
|
|
5376ce0909 | ||
|
|
807df2ac55 | ||
|
|
2727f92a53 | ||
|
|
1297114b3e | ||
|
|
1ba35f0bc3 | ||
|
|
f5a6f51abc | ||
|
|
8431452f73 | ||
|
|
27aff76b20 | ||
|
|
e767e00a82 | ||
|
|
aab17ca79a | ||
|
|
94876d1019 | ||
|
|
7d7726e345 | ||
|
|
d16a65ebd7 | ||
|
|
e802d0098f | ||
|
|
62fd24bcfb | ||
|
|
02185145c9 | ||
|
|
4acb0f15ad | ||
|
|
c8d0b4dd3f | ||
|
|
4802bce06d | ||
|
|
5bec0ee6b6 | ||
|
|
a938a3a350 | ||
|
|
04567817b2 | ||
|
|
061a65f730 | ||
|
|
470894577d | ||
|
|
7db4da4154 | ||
|
|
78b5f6ef5c | ||
|
|
340f478bfa | ||
|
|
2108af8f36 | ||
|
|
1728b6c8bf | ||
|
|
bbfd514342 | ||
|
|
e42ae65355 | ||
|
|
a58298bb01 | ||
|
|
0e8e00ddd7 | ||
|
|
e492dfe12c | ||
|
|
7f533c7121 | ||
|
|
7e4c189136 | ||
|
|
a591b657fa | ||
|
|
7ec8fd2003 | ||
|
|
20e22f015a | ||
|
|
cec781ad72 | ||
|
|
9faf42c5da | ||
|
|
bf895820b3 | ||
|
|
f4180584d6 | ||
|
|
66c653b6f5 | ||
|
|
5f596fb4fd | ||
|
|
a1306d9eb4 | ||
|
|
2195bf2307 | ||
|
|
c4296121b1 | ||
|
|
3871196246 | ||
|
|
c626b1599e | ||
|
|
129fd7fdad | ||
|
|
49fca0da2b | ||
|
|
8c00a0bc00 | ||
|
|
45cea4fc4b | ||
|
|
13f8b65e08 | ||
|
|
6ed28c5fb8 | ||
|
|
b534fbb364 | ||
|
|
1cfcf1ded0 | ||
|
|
87a01bbe0a | ||
|
|
5a9477a402 | ||
|
|
bd97e817c2 | ||
|
|
1fcc049db7 | ||
|
|
92fdaed81b | ||
|
|
feee0e62cc | ||
|
|
3ee9e65f2d | ||
|
|
f004451740 | ||
|
|
9964285cae | ||
|
|
6b25a9f00c | ||
|
|
99c870c5cc | ||
|
|
e520cf949a | ||
|
|
96aac79eb2 | ||
|
|
11d0103f0d | ||
|
|
c7dcb9144c | ||
|
|
8ea4216672 | ||
|
|
79640283f3 | ||
|
|
1347c76594 | ||
|
|
7d95fb7169 | ||
|
|
d710205355 | ||
|
|
afc5f5a13f | ||
|
|
d91e91128c | ||
|
|
3d73e92058 | ||
|
|
aa8778a0fb | ||
|
|
51cc9cd13e | ||
|
|
c3ebd529c1 | ||
|
|
322d310843 | ||
|
|
09f5c0ffc1 | ||
|
|
7d6ed94e2d | ||
|
|
1292f40710 | ||
|
|
830fa40bb7 | ||
|
|
25f8b787b6 | ||
|
|
ca6600bebf | ||
|
|
100babc11b | ||
|
|
ef00b0d14d | ||
|
|
359f6c82c5 | ||
|
|
a376c37a91 | ||
|
|
16f610bfdf | ||
|
|
02e41ae7ce | ||
|
|
ae9b096ab0 | ||
|
|
84d0b5e35d | ||
|
|
a0fd46edb8 | ||
|
|
b681a86646 | ||
|
|
6c3c068485 | ||
|
|
caf431d22e | ||
|
|
2044a649ba | ||
|
|
7def7af8ff | ||
|
|
e85121f35a | ||
|
|
dbfc108fec | ||
|
|
4e01de183f | ||
|
|
e8612833c3 | ||
|
|
953b500fa0 | ||
|
|
1aa15b24a2 | ||
|
|
b6d720791a | ||
|
|
21c6b56a27 | ||
|
|
b20838531c | ||
|
|
2c866f3c10 | ||
|
|
3d510a338e | ||
|
|
95c4438091 | ||
|
|
76e887e3fb | ||
|
|
72b1a18744 | ||
|
|
679a27a5ff | ||
|
|
55241864bc | ||
|
|
a8a960d10b | ||
|
|
4ce3ff52bf | ||
|
|
10be5d5a7c | ||
|
|
711d7b122d | ||
|
|
ea758e9dca | ||
|
|
ee379a512a | ||
|
|
ea519c66f2 | ||
|
|
51bff9f1f0 | ||
|
|
aeb9777972 | ||
|
|
3b61aedc66 | ||
|
|
cb2c9616d7 | ||
|
|
a35b9b1279 | ||
|
|
0ba23ca278 | ||
|
|
2a67b5b827 | ||
|
|
0918419191 | ||
|
|
a4481bfd33 | ||
|
|
fcf24a40e2 | ||
|
|
59a70e0077 | ||
|
|
5037941897 | ||
|
|
3dfbe8e49c | ||
|
|
1cd34736ed | ||
|
|
1b6e4d4300 | ||
|
|
b598f8f972 | ||
|
|
7c145c7b1e | ||
|
|
38030c348d | ||
|
|
625aa3f1bd | ||
|
|
8e337647a2 | ||
|
|
7cfc8dc00e | ||
|
|
30195b6c9e | ||
|
|
a628cb6775 | ||
|
|
531ce433fe | ||
|
|
849097921a | ||
|
|
c8af0d8a38 | ||
|
|
9a1ab6ee0b | ||
|
|
04615b3a17 | ||
|
|
70ff5c2e94 | ||
|
|
b82d51e3cc | ||
|
|
4d26acfd66 | ||
|
|
42f976c82a | ||
|
|
6477d13bea | ||
|
|
ba1e106aaf | ||
|
|
5f9fa481cb | ||
|
|
84554ae71f | ||
|
|
5f9c434aea | ||
|
|
a0c3140e6d | ||
|
|
440fa263c2 | ||
|
|
f5b10564ca | ||
|
|
eb98597220 | ||
|
|
6992d52767 | ||
|
|
3a31d54600 | ||
|
|
3d5b54515a | ||
|
|
b9f1741ea1 | ||
|
|
0fa5273c56 | ||
|
|
916b7cfc44 | ||
|
|
317efc182a | ||
|
|
4bcfcfc4f8 | ||
|
|
02b3b9a4d7 | ||
|
|
57d0fc3774 | ||
|
|
2d1bca11df | ||
|
|
ac0de93139 | ||
|
|
9e39860868 | ||
|
|
b13a4d331c | ||
|
|
065cd5b7b7 | ||
|
|
1d34b5389e | ||
|
|
23df7cc90d | ||
|
|
c9a5d5a406 | ||
|
|
a5d2c86e59 | ||
|
|
f095cc760b | ||
|
|
c256b0675d | ||
|
|
a7af12d026 | ||
|
|
d7995e9be4 | ||
|
|
af2f4b66b9 | ||
|
|
15464aa10c | ||
|
|
7cfc02e7d9 | ||
|
|
c6b0a50e4e | ||
|
|
ac4f093590 | ||
|
|
a03746145b | ||
|
|
3a3b84af61 | ||
|
|
3ba68bf5c5 | ||
|
|
42daf75124 | ||
|
|
454e9c1d8e | ||
|
|
ee9fb4aeec | ||
|
|
ba2c224d5d | ||
|
|
515eab7dad | ||
|
|
18b0e01a3e | ||
|
|
57c6414d1c | ||
|
|
fdfcaaeb39 | ||
|
|
561b91894c | ||
|
|
aea01a3937 | ||
|
|
9b34178332 | ||
|
|
eced8facb8 | ||
|
|
074e13325e | ||
|
|
d7378f87c5 | ||
|
|
4091c16e97 | ||
|
|
56408b37ac | ||
|
|
fd18eeb62c | ||
|
|
cbd4ed311f | ||
|
|
8122703e3b | ||
|
|
2920b6143b | ||
|
|
8870463afc | ||
|
|
f8972f812a | ||
|
|
23fa2324a8 | ||
|
|
0df1082778 | ||
|
|
6647b8da3c | ||
|
|
f0b9411e19 | ||
|
|
5c1cc5cdd7 | ||
|
|
df9eb60ffa | ||
|
|
9893792768 | ||
|
|
379033aae4 | ||
|
|
193ab52a35 | ||
|
|
9eb6662db8 | ||
|
|
5e48146f59 | ||
|
|
627702a3a1 | ||
|
|
d9ee6de3d0 | ||
|
|
14df5a6d5f | ||
|
|
a809fb8c41 | ||
|
|
2738107b1e | ||
|
|
e53f26ca13 | ||
|
|
d3e80d62e5 | ||
|
|
b7aa20ed88 | ||
|
|
26da4a1aa3 | ||
|
|
4345a629f1 | ||
|
|
5bb4ca7822 | ||
|
|
79ee06f518 | ||
|
|
bc2435efe9 | ||
|
|
504a29f496 | ||
|
|
0948e9db9d | ||
|
|
c298464314 | ||
|
|
67a00a799c | ||
|
|
589c9e4445 | ||
|
|
d1925c8935 | ||
|
|
2923658bb9 | ||
|
|
c333da60d6 | ||
|
|
cf62db1329 | ||
|
|
625a39a892 | ||
|
|
ffc93a77a9 | ||
|
|
0cee2b6a97 | ||
|
|
a24ec2c433 | ||
|
|
e5727462e7 | ||
|
|
c1cb4e192f | ||
|
|
b0c12063a1 | ||
|
|
e4b1e87b9a | ||
|
|
6e136bf83f | ||
|
|
36504d7123 | ||
|
|
8ac4615117 | ||
|
|
7ed04ed3b0 | ||
|
|
c5b2440488 | ||
|
|
37ce236a43 | ||
|
|
31ab55558c | ||
|
|
c51830feec | ||
|
|
291e91891a | ||
|
|
307ede3183 | ||
|
|
d4a20c71c2 | ||
|
|
ec68068b97 | ||
|
|
d9c1445542 | ||
|
|
26f4d05e87 | ||
|
|
b6c941fc3e | ||
|
|
cedcc845d5 | ||
|
|
02a3ed2e0e | ||
|
|
a729daa3d3 | ||
|
|
ba23cceae7 | ||
|
|
d3e9083869 | ||
|
|
09d92ebab6 | ||
|
|
2777bedb51 | ||
|
|
f181e1d237 | ||
|
|
8f7dc43e1f | ||
|
|
249c2f1e69 | ||
|
|
6a4686d17b | ||
|
|
3529943bb0 | ||
|
|
1c63f4bf46 | ||
|
|
380177b777 | ||
|
|
bc22c8d2b1 | ||
|
|
c5cdeaef07 | ||
|
|
a1fb4a2487 | ||
|
|
d34593928d | ||
|
|
5184f8e6a3 | ||
|
|
ea358c239f | ||
|
|
2cf90cc60b | ||
|
|
db24d3e53e | ||
|
|
6a0caebe2e | ||
|
|
ac85946e0f | ||
|
|
fc55a8e49b | ||
|
|
b093aa9fa6 | ||
|
|
e60e9fa3dd | ||
|
|
29bcbf042f | ||
|
|
19719ecac1 | ||
|
|
4d288ad2ee | ||
|
|
eccaf4acff | ||
|
|
c2a2ef212e | ||
|
|
47ab76c7e3 | ||
|
|
dd30b96210 | ||
|
|
3e053784c2 | ||
|
|
7b97cd0cf1 | ||
|
|
809767883b | ||
|
|
d8e38665f1 | ||
|
|
f25ea8f056 | ||
|
|
7c0ba80530 | ||
|
|
6eb083bebe | ||
|
|
3a822f7bc4 | ||
|
|
9a2268a54e | ||
|
|
611171371b | ||
|
|
e1d4fe36f4 | ||
|
|
079d8c19a4 | ||
|
|
418c6dd7f8 | ||
|
|
08304d5064 | ||
|
|
5cdeb28e6b | ||
|
|
c5efd17a9c | ||
|
|
6276ead820 | ||
|
|
b5cdc12478 | ||
|
|
ff511b8968 | ||
|
|
037a84c46f | ||
|
|
3d0f29a172 | ||
|
|
85c239bc18 | ||
|
|
1fb6a39d9d | ||
|
|
9aeac93c9a | ||
|
|
6188076fe6 | ||
|
|
0fc7fd3411 | ||
|
|
078c8d23d5 | ||
|
|
8c845c77c1 | ||
|
|
cb373dae59 | ||
|
|
0a42a889ec | ||
|
|
e8f5080f35 | ||
|
|
00f73957dd | ||
|
|
3a0480e0d8 | ||
|
|
0cee7bcdc8 | ||
|
|
30401df4b7 | ||
|
|
f5d1e98491 | ||
|
|
8f9b2d22c1 | ||
|
|
2b17767b53 | ||
|
|
00a7094802 | ||
|
|
6eaf44e397 | ||
|
|
24b52c77fe | ||
|
|
7a9b906925 | ||
|
|
53bef264e7 | ||
|
|
75b74c4ab3 | ||
|
|
ca3a9aecd6 | ||
|
|
8f7902af94 | ||
|
|
8df3fa31fb | ||
|
|
ff7a1b861e | ||
|
|
d6a82e5c56 | ||
|
|
f714e6fa14 | ||
|
|
6817133819 | ||
|
|
76670e47a1 | ||
|
|
961b24a019 | ||
|
|
068de42e83 | ||
|
|
75f9c0a892 | ||
|
|
3a1b301b32 | ||
|
|
9bb1d99ae4 | ||
|
|
cf052b5bd4 | ||
|
|
65a18fd270 | ||
|
|
d4775cc970 | ||
|
|
07ee5b42f7 | ||
|
|
d5048fea10 | ||
|
|
f3149068e3 | ||
|
|
f5d3a5132a | ||
|
|
70e0ecfef5 | ||
|
|
631e0e0f3f | ||
|
|
b66287cbb9 | ||
|
|
9e6d38bc1a | ||
|
|
6cbe4aeec4 | ||
|
|
e219f56ff4 | ||
|
|
e16b29c566 | ||
|
|
1b3e3ede4d | ||
|
|
0a601f10c0 | ||
|
|
56ce4ab0f2 | ||
|
|
1f6c2f5a0a | ||
|
|
5f3ddd9389 | ||
|
|
fd0c9823fa | ||
|
|
d23588a217 | ||
|
|
ca53b8afca | ||
|
|
053bc03a54 | ||
|
|
78dc70bcdc | ||
|
|
ea00c044d3 | ||
|
|
11cd2b086e | ||
|
|
ae6f0b5505 | ||
|
|
247d1a9aa6 | ||
|
|
6273c2395d | ||
|
|
1396525251 | ||
|
|
de46afff1c | ||
|
|
54fd54d3f0 | ||
|
|
0b41eea2bb | ||
|
|
63207d370b | ||
|
|
e92d88df8b | ||
|
|
a9e6d3665f | ||
|
|
2453927ba3 | ||
|
|
94e6cb02f3 | ||
|
|
9b2b909139 | ||
|
|
c9a3f349ad | ||
|
|
439b539dcb | ||
|
|
ab7f0a2e95 | ||
|
|
b50dbf3ff0 | ||
|
|
d3f1f833ab | ||
|
|
3df099a0e3 | ||
|
|
54dccd11ef | ||
|
|
77ec847e20 | ||
|
|
8bf5fcb8ec | ||
|
|
ff41d76501 | ||
|
|
d9772ed5c6 | ||
|
|
8dba1b37c7 | ||
|
|
8b017dc647 | ||
|
|
c8ee05d671 | ||
|
|
40216e310d | ||
|
|
6a6f99e9ae | ||
|
|
14ad7cf3ac | ||
|
|
ce327dca42 | ||
|
|
ded7670ac3 | ||
|
|
5bf1ec0fd9 | ||
|
|
306c0505a6 | ||
|
|
325cb69a65 | ||
|
|
c3df9b6484 | ||
|
|
db6bfc00fc | ||
|
|
51b5d7a939 | ||
|
|
9490f62dee | ||
|
|
1661dc9ef7 | ||
|
|
aa7731dc5d | ||
|
|
4150564538 | ||
|
|
38043ebade | ||
|
|
9a694a8d3d | ||
|
|
f6997f54eb | ||
|
|
2631c18484 | ||
|
|
c0d819b97a | ||
|
|
972d32c969 | ||
|
|
7f0e51f92f | ||
|
|
6f78c2288f | ||
|
|
b331ba42b8 | ||
|
|
fb3efba204 | ||
|
|
58e09dcff4 | ||
|
|
747055f60e | ||
|
|
aa07c64440 | ||
|
|
6b9f1d8414 | ||
|
|
b4bc1d292a | ||
|
|
c98553d19b | ||
|
|
1ace31216f | ||
|
|
495cec930c | ||
|
|
44ad0ca1ea | ||
|
|
4ba8e9e99d | ||
|
|
1eb85b366d | ||
|
|
3821ae441f | ||
|
|
b01e5f7366 | ||
|
|
b375a543ec | ||
|
|
2c9d848af5 | ||
|
|
8d65c5c2c0 | ||
|
|
0af731b6a2 | ||
|
|
9d870b2c45 | ||
|
|
82abf87f75 | ||
|
|
81ef023b37 | ||
|
|
776fffb2dc | ||
|
|
cfd5d9e209 | ||
|
|
23716ff729 | ||
|
|
18921a4f14 | ||
|
|
569c42724b | ||
|
|
18abf7d644 | ||
|
|
12efdb9fe4 | ||
|
|
fdf884036d | ||
|
|
998018af3e | ||
|
|
cae71f3d60 | ||
|
|
f7e43fab35 | ||
|
|
4f7a4ac1e2 | ||
|
|
5fc7b34ce7 | ||
|
|
cbf73b2290 | ||
|
|
f344a8166e | ||
|
|
9532317928 | ||
|
|
4cf85c462d | ||
|
|
6fe2964f37 | ||
|
|
2108a902c2 | ||
|
|
1520eec677 | ||
|
|
e3ba3a3ea4 | ||
|
|
1c104f9358 | ||
|
|
f8b9536eb8 | ||
|
|
0e34628c6f | ||
|
|
614bc0b254 | ||
|
|
cc6eafdb09 | ||
|
|
df4cbdcc09 | ||
|
|
f5e53a9a4c | ||
|
|
46f654fcee | ||
|
|
aa3a3f4a17 | ||
|
|
59b3b6cc02 | ||
|
|
6d4b8e8401 | ||
|
|
9ac7a60835 | ||
|
|
790dbd381d | ||
|
|
ac6c8a985b | ||
|
|
fea22e0409 | ||
|
|
ac7d595a2d | ||
|
|
819e412e09 | ||
|
|
bdfec68340 | ||
|
|
0b7ef6c8fb | ||
|
|
9880ce977a | ||
|
|
e88f924274 | ||
|
|
fe53dc88e5 | ||
|
|
fdfd6558f2 | ||
|
|
6d9e3dcad1 | ||
|
|
20c4468edd | ||
|
|
7f80e650b1 | ||
|
|
1995837b3f | ||
|
|
88c0617279 | ||
|
|
b8b1bed7ed | ||
|
|
03c6e74c4d | ||
|
|
71639de5ec | ||
|
|
39310cd4af | ||
|
|
582352b2d2 | ||
|
|
f2c271f66d | ||
|
|
d99e1f519e | ||
|
|
c53e2843be | ||
|
|
f438ce04fb | ||
|
|
8be5952b92 | ||
|
|
cfc8610a16 | ||
|
|
ad8a5d9870 | ||
|
|
75cb4e392d | ||
|
|
ec9dd14cb4 | ||
|
|
6e8c852bfa | ||
|
|
f204979ada | ||
|
|
6275327b0a | ||
|
|
f1126e63b1 | ||
|
|
7157ed08f9 | ||
|
|
d33627f1fe | ||
|
|
c2611cfeaf | ||
|
|
056614fa6b | ||
|
|
4c19226959 | ||
|
|
d41a31f614 | ||
|
|
d83dc07368 | ||
|
|
f30d8748f1 | ||
|
|
b4710c292f | ||
|
|
c3cd399087 | ||
|
|
f8a2c94903 | ||
|
|
747b081809 | ||
|
|
55903dab11 | ||
|
|
a6c094f9aa | ||
|
|
b9b978e452 | ||
|
|
bad24f8a85 | ||
|
|
57cffbc4c8 | ||
|
|
86d71bf37f | ||
|
|
c6dd169916 | ||
|
|
cbc85b7a09 | ||
|
|
016af0f419 | ||
|
|
1903d44bf8 | ||
|
|
351c270e0e | ||
|
|
ab3d9f89ec | ||
|
|
97220a27df | ||
|
|
0310fdf99f | ||
|
|
f1a535b7d4 | ||
|
|
6879d8b6ce | ||
|
|
046c5f69ac | ||
|
|
40687f8cc0 | ||
|
|
b8f27ecfd0 | ||
|
|
16dd2ef9d0 | ||
|
|
aaff2f486f | ||
|
|
d9a62373b8 | ||
|
|
bef4f6a0db | ||
|
|
a66c282ee5 | ||
|
|
2d50cc2b2d | ||
|
|
82f1182503 | ||
|
|
360bed8697 | ||
|
|
e4a833b59e | ||
|
|
f8809d5d62 | ||
|
|
8adffb8714 | ||
|
|
9b6649174c | ||
|
|
7f03f7c844 | ||
|
|
843596944f | ||
|
|
0f6c5fe49d | ||
|
|
b94c4e775a | ||
|
|
fc97e88928 | ||
|
|
5b47e6130c | ||
|
|
86edc18f21 | ||
|
|
5ee36e786a | ||
|
|
c4e2e5da8d | ||
|
|
2c14ec0abd | ||
|
|
5b782fd04c | ||
|
|
bdd579ad2d | ||
|
|
d94fa8d2de | ||
|
|
c0f1d4e2da | ||
|
|
e82f49bdab | ||
|
|
b65d48541d | ||
|
|
e2f68194d7 | ||
|
|
bd6f8f4ae6 | ||
|
|
9d4cce93fc | ||
|
|
28ce18f8f0 | ||
|
|
c060d1a36e | ||
|
|
3a05dcf659 | ||
|
|
291ed38a5a | ||
|
|
411d689a48 | ||
|
|
df279f879f | ||
|
|
9e58bccd49 | ||
|
|
092f3b4e24 | ||
|
|
005bb77f55 | ||
|
|
258840d198 | ||
|
|
c483da9efe | ||
|
|
4b3f202c6f | ||
|
|
07571465a7 | ||
|
|
7d7590b914 | ||
|
|
f965961401 | ||
|
|
814ea7f81a | ||
|
|
91a0790695 | ||
|
|
2b8a6c6a89 | ||
|
|
55648d3452 | ||
|
|
60316d1b75 | ||
|
|
7826608384 | ||
|
|
de151c8a9d | ||
|
|
b0a1effaf9 | ||
|
|
fd52d124dd | ||
|
|
b772864f2d | ||
|
|
cdb10cfc1f | ||
|
|
da7f0b7dce | ||
|
|
25461f7ca8 | ||
|
|
da7df9f865 | ||
|
|
00c5dba210 | ||
|
|
f30219d85a | ||
|
|
223e75d326 | ||
|
|
46d4f4a481 | ||
|
|
419ebeafa8 | ||
|
|
4be7917d41 | ||
|
|
191686dffe | ||
|
|
fa791ed4ab | ||
|
|
e29f8a9657 | ||
|
|
e66f6583b1 | ||
|
|
399d90e6cd | ||
|
|
ec2eaae0d3 | ||
|
|
12389b1e0d | ||
|
|
ff6e5a20c3 | ||
|
|
7d6526f962 | ||
|
|
b8fad8452b | ||
|
|
5e9107f376 | ||
|
|
7faaff304a | ||
|
|
94acbf6005 | ||
|
|
a65c21acba | ||
|
|
bfbe4ce1b8 | ||
|
|
aaa636f357 | ||
|
|
d0241ba7ee | ||
|
|
b2230225cc | ||
|
|
e063718e4f | ||
|
|
03436a670f | ||
|
|
8be508de5d | ||
|
|
9370a86246 | ||
|
|
6c5237cdd8 | ||
|
|
2cf5ecd212 | ||
|
|
8e9125772e | ||
|
|
62e863dec0 | ||
|
|
e00098ea6a | ||
|
|
f12bd1b51f | ||
|
|
93942a74cf | ||
|
|
401fd04379 | ||
|
|
4fd54f1692 | ||
|
|
9565994e5c | ||
|
|
6876e1a38a | ||
|
|
7a8e737802 | ||
|
|
9f968611b1 | ||
|
|
3bd4f9499a | ||
|
|
069ef7b12c | ||
|
|
9d6207f80e | ||
|
|
22b493996c | ||
|
|
5284717570 | ||
|
|
96d11e4ffa | ||
|
|
a156247dc3 | ||
|
|
0e4a88d538 | ||
|
|
a2d1cdfc13 | ||
|
|
dcb0c490ba | ||
|
|
7687bdf751 | ||
|
|
85ef04abc4 | ||
|
|
69ae59b933 | ||
|
|
c5e538421e | ||
|
|
d7b1689047 | ||
|
|
bd8396ba6e | ||
|
|
859aff590b | ||
|
|
73d8a844d9 | ||
|
|
5db395799d | ||
|
|
ad1ecf21c3 | ||
|
|
497ca2a5cd | ||
|
|
4e578ed95e | ||
|
|
8b258c8828 | ||
|
|
148117edcb | ||
|
|
a57358f311 | ||
|
|
ee0ad1126d | ||
|
|
2db0002ffd | ||
|
|
a74e07c491 | ||
|
|
8a12abf795 | ||
|
|
62c7cfcd10 | ||
|
|
9257d6982f | ||
|
|
58da1cd489 | ||
|
|
69078aaf49 | ||
|
|
33aa0737a4 | ||
|
|
8b47608cc0 | ||
|
|
d25014779d | ||
|
|
5f0380f547 | ||
|
|
bdbd392c6e | ||
|
|
d53a594971 | ||
|
|
2604da4b04 | ||
|
|
77bc8029bb | ||
|
|
11e4a4cad8 | ||
|
|
e37f634a38 | ||
|
|
0a18502c2c | ||
|
|
b8c81c72e4 | ||
|
|
37c2219b87 | ||
|
|
62f6f3910a | ||
|
|
b450e6998e | ||
|
|
10800a0896 | ||
|
|
cf61525130 | ||
|
|
24db65cd90 | ||
|
|
daf7e66ec3 | ||
|
|
18c9a1793e | ||
|
|
2b0f235e23 | ||
|
|
24eca428a6 | ||
|
|
677b0b7055 | ||
|
|
10bd72ad51 | ||
|
|
4ddc98b2b6 | ||
|
|
c1f18f5ecf | ||
|
|
d16a88e731 | ||
|
|
39d0d640e6 | ||
|
|
bfb55f0e1d | ||
|
|
44b07712d5 | ||
|
|
c8ae9e4dcc | ||
|
|
52d1412e4c | ||
|
|
b820130636 | ||
|
|
7d4ecd4272 | ||
|
|
f907b589e1 | ||
|
|
a9d80d73d6 | ||
|
|
fe0ad9c9c2 | ||
|
|
dfa8ce1ad4 | ||
|
|
1ea5dad728 | ||
|
|
a2b81c9378 | ||
|
|
01b0b1602b | ||
|
|
7d4aef0f3b | ||
|
|
5485893c8b | ||
|
|
124543f4a7 | ||
|
|
e84488e126 | ||
|
|
ed2cf5174d | ||
|
|
d0d0a6c224 | ||
|
|
b04f4f0001 | ||
|
|
c822920c36 | ||
|
|
e6354236c1 | ||
|
|
068948e1a2 | ||
|
|
f8bf7ba010 | ||
|
|
586105907d | ||
|
|
abd56ffee3 | ||
|
|
5678b4d067 | ||
|
|
1abb940318 | ||
|
|
15af5bfae7 | ||
|
|
d550a016a9 | ||
|
|
9c8df27bf1 | ||
|
|
1ce0176ab6 | ||
|
|
5bc46c49d2 | ||
|
|
292d45a7db | ||
|
|
2d375954ab | ||
|
|
7ff6d2a828 | ||
|
|
ccac8a93bc | ||
|
|
bcbfa0e32a | ||
|
|
453cd62a51 | ||
|
|
56e1cbc78e | ||
|
|
58cd77449c | ||
|
|
db92c7b32d | ||
|
|
6ba54d2b3d | ||
|
|
987429208c | ||
|
|
2eae104c7a | ||
|
|
6f2be2a2d2 | ||
|
|
e75960fee3 | ||
|
|
ec71ccdd0d | ||
|
|
a5d47a36f0 | ||
|
|
866b63530a | ||
|
|
57feac985c | ||
|
|
c72c980ad2 | ||
|
|
790d29cbfb | ||
|
|
b9947f6984 | ||
|
|
79b7c3c38f | ||
|
|
a9df896538 | ||
|
|
ad713a1342 | ||
|
|
b58479cba6 | ||
|
|
107341f33f | ||
|
|
1ed0fcb379 | ||
|
|
63892782b4 | ||
|
|
f5a480c72e | ||
|
|
d80a29b34d | ||
|
|
5aefc60f2e | ||
|
|
683c1fe477 | ||
|
|
6b4692f6c7 | ||
|
|
1351f11551 | ||
|
|
58280b8d3f | ||
|
|
652ca75f40 | ||
|
|
4b5f1590aa | ||
|
|
152c987ed4 | ||
|
|
19311c7ec1 | ||
|
|
eec2d122cc | ||
|
|
62f39fe39c | ||
|
|
394fce3825 | ||
|
|
9c6934c0aa | ||
|
|
993bc5170b | ||
|
|
d285eda4c2 | ||
|
|
0bcbe39521 | ||
|
|
78502b2026 | ||
|
|
df0c806381 | ||
|
|
d089a1d9c8 | ||
|
|
e41072c448 | ||
|
|
36d18d531c | ||
|
|
fb18412fb3 | ||
|
|
9a8c2b9aa5 | ||
|
|
678b39a170 | ||
|
|
d03b0d92f4 | ||
|
|
11f9ba74e8 | ||
|
|
f4f5bffcd9 | ||
|
|
d763f9c63e | ||
|
|
44acd3a969 | ||
|
|
4d7510dc11 | ||
|
|
f4a3efc3bc | ||
|
|
40bc980084 | ||
|
|
cf62d1dfa2 | ||
|
|
378e59563d | ||
|
|
1196e06dd6 | ||
|
|
028bbf08c6 | ||
|
|
1d6a474b31 | ||
|
|
79e68eb5df | ||
|
|
13a1c7cfee | ||
|
|
a3812141dd | ||
|
|
5833f1e2da | ||
|
|
88311f21cf | ||
|
|
64b33d60f4 | ||
|
|
8ccbcf0488 | ||
|
|
4fb485d1dd | ||
|
|
244c34a536 | ||
|
|
52a704e53d | ||
|
|
5852ca4179 | ||
|
|
04820b8adc | ||
|
|
5be92b7a8a | ||
|
|
addecbbb22 | ||
|
|
ec8bf9357a | ||
|
|
432b4b1e68 | ||
|
|
ea5935b1d1 | ||
|
|
65db6ea26c | ||
|
|
a77b5e69e7 | ||
|
|
c9da739ea3 | ||
|
|
fa3c9095c7 | ||
|
|
9e4ee6ec91 | ||
|
|
95442ef0b5 | ||
|
|
1f92ec715a | ||
|
|
f81503dd70 | ||
|
|
0642e34a77 | ||
|
|
4e8e3e1865 | ||
|
|
48170d2fa0 | ||
|
|
8936e82e9b | ||
|
|
e0162d276d | ||
|
|
14ff7fae33 | ||
|
|
2c78b3efca | ||
|
|
5104bde6d4 | ||
|
|
59f05ec8a2 | ||
|
|
20047fbdaf | ||
|
|
81dd33c2e9 | ||
|
|
1cf390206e | ||
|
|
8169a6f3f8 | ||
|
|
2165ded8d4 | ||
|
|
ef80e28d1d | ||
|
|
234abb38d9 | ||
|
|
3a722ba44e | ||
|
|
3f56c5a727 | ||
|
|
e55b239536 | ||
|
|
c2f374f0db | ||
|
|
29c6a70611 | ||
|
|
0bbbe96ae0 | ||
|
|
40010f7ff7 | ||
|
|
49aae0c50e | ||
|
|
5ea7ec1013 | ||
|
|
75ee0670f6 | ||
|
|
6e327880a3 | ||
|
|
ceaa20d5d4 | ||
|
|
10589e7940 | ||
|
|
5e9a7a112a | ||
|
|
a672a765b4 | ||
|
|
4794097992 | ||
|
|
f012d2d13a | ||
|
|
d0a22ad416 | ||
|
|
6dee662b40 | ||
|
|
1d8b87e33f | ||
|
|
5db91538c6 | ||
|
|
7d6fb9eee6 | ||
|
|
694b14511d | ||
|
|
bbab97137f | ||
|
|
3408db0c9b | ||
|
|
1bbf8dffeb | ||
|
|
887b34dd31 | ||
|
|
0f5166d690 | ||
|
|
e507300134 | ||
|
|
e38c5cac4a | ||
|
|
463a55897c | ||
|
|
192cc4eb9b | ||
|
|
e5fe28b720 | ||
|
|
defc70e656 | ||
|
|
d589dbcbea | ||
|
|
3ed8620d7a | ||
|
|
bc5501eecb | ||
|
|
2ae6bac390 | ||
|
|
118621cb8b | ||
|
|
3118ed5f56 | ||
|
|
ac17fc8efd | ||
|
|
85c1ec67c2 | ||
|
|
959a2ec379 | ||
|
|
1372c9b1cc | ||
|
|
67dd5f256d | ||
|
|
2c3ced3fba | ||
|
|
a592f6fe0b | ||
|
|
9123cb7796 | ||
|
|
df09c01a25 | ||
|
|
b97301d82d | ||
|
|
6b887a98cd | ||
|
|
18a26b42e2 | ||
|
|
85de4ed0e3 | ||
|
|
80125ce298 | ||
|
|
27542d4fa4 | ||
|
|
a47e446b60 | ||
|
|
471fb4da6f | ||
|
|
a2a6888982 | ||
|
|
864a938f8d | ||
|
|
bdd30238bf | ||
|
|
528ce7131e | ||
|
|
53bd1641bb | ||
|
|
b10725cebc | ||
|
|
719cc5466a | ||
|
|
e373cf18e0 | ||
|
|
7ef5fa5630 | ||
|
|
d139b0388a | ||
|
|
014ab5d7ee | ||
|
|
64f3949967 | ||
|
|
7913edd34b | ||
|
|
2136dc34fe | ||
|
|
c559b42151 | ||
|
|
a33d974c74 | ||
|
|
ede7af6b9d | ||
|
|
5cd4bf5c98 | ||
|
|
045fae9b6f | ||
|
|
bbd46644e0 | ||
|
|
3e67c0a878 | ||
|
|
924f01158d | ||
|
|
8d5dd60fb4 | ||
|
|
958ea586ec | ||
|
|
5f6cc58186 | ||
|
|
426f59e41a | ||
|
|
fff9fa0ca5 | ||
|
|
57aced69cf | ||
|
|
afac6baa11 | ||
|
|
b4630aeb38 | ||
|
|
cac02663e6 | ||
|
|
e59f1e5a82 | ||
|
|
90d077d7c2 | ||
|
|
a77d6bcfa0 | ||
|
|
bee5abfbf0 | ||
|
|
664447a67b | ||
|
|
b850443090 | ||
|
|
98d0c760a9 | ||
|
|
76bb7fe4af | ||
|
|
26584b9909 | ||
|
|
6a9724dd3e | ||
|
|
c7a41ddfda | ||
|
|
2df05dd16d | ||
|
|
50c2c55554 | ||
|
|
d72b99c5b2 | ||
|
|
5adadfdb40 | ||
|
|
7574195ca2 | ||
|
|
5b5ef98495 | ||
|
|
226e5350b7 | ||
|
|
b9b83c3b16 | ||
|
|
971fb2b19a | ||
|
|
378b60783c | ||
|
|
d901558481 | ||
|
|
1515ee9193 | ||
|
|
9c34471800 | ||
|
|
6f16f6f134 | ||
|
|
7c0dcd6808 | ||
|
|
33790dbb33 | ||
|
|
ea8b7b7a3a | ||
|
|
8714aa9202 | ||
|
|
3731d61b78 | ||
|
|
927e99fcb3 | ||
|
|
ef6ec100f2 | ||
|
|
386a39e274 | ||
|
|
38d3b5cf43 | ||
|
|
5718299210 | ||
|
|
2e64d560b1 | ||
|
|
82270e0c13 | ||
|
|
ca22b56148 | ||
|
|
eca3896bfc | ||
|
|
1c2c38545a | ||
|
|
464e1fc6c7 | ||
|
|
02b8499b0c | ||
|
|
490662152a | ||
|
|
b5caa41386 | ||
|
|
a8ff0e3892 | ||
|
|
ebab884441 | ||
|
|
2c95992eb1 | ||
|
|
1666774a1e | ||
|
|
3cc0dc08db | ||
|
|
f9bcf48700 | ||
|
|
8a618fee64 | ||
|
|
a6f7637134 | ||
|
|
f04ef0b359 | ||
|
|
608457bd01 | ||
|
|
508cf1ffdb | ||
|
|
6f38933e81 | ||
|
|
8ff2ca4c5a | ||
|
|
6a0d5c69ab | ||
|
|
2747877195 | ||
|
|
584b33d41a | ||
|
|
f4330ff77d | ||
|
|
60c43184cb | ||
|
|
2fe2eb9f21 | ||
|
|
04ee52d1ad | ||
|
|
99e047171f | ||
|
|
ddc8668837 | ||
|
|
e568b992a9 | ||
|
|
23221a8f8f | ||
|
|
4eed10cd4b | ||
|
|
da02c0992a | ||
|
|
2437112f3c | ||
|
|
276b4bb0ab | ||
|
|
acf271344d | ||
|
|
7b5d6f7031 | ||
|
|
767ce29e39 | ||
|
|
daad16ef1b | ||
|
|
1718135614 | ||
|
|
a269d49392 | ||
|
|
3a8775f545 | ||
|
|
842dc0d49e | ||
|
|
3f9ed2f344 | ||
|
|
5640baa175 | ||
|
|
f102a8cb3d | ||
|
|
a65c468e81 | ||
|
|
4cc3f44caa | ||
|
|
8afe004a7f | ||
|
|
185e9b5272 | ||
|
|
78b76cf023 | ||
|
|
3606d3d0bd | ||
|
|
3be95e752f | ||
|
|
1532de8f20 | ||
|
|
95bd217c3c | ||
|
|
f633c921cc | ||
|
|
e8c79ffd97 | ||
|
|
e842eb9d9e | ||
|
|
71bdb5e25e | ||
|
|
b58f36b5af | ||
|
|
dc20f4f32a | ||
|
|
c765fff4b3 | ||
|
|
032f5654a4 | ||
|
|
0e01e52cac | ||
|
|
37b2c97dc1 | ||
|
|
c61b07febb | ||
|
|
620fd7ed88 | ||
|
|
b314ea13aa | ||
|
|
3e8572dbe9 | ||
|
|
5ba7b4154c | ||
|
|
ad8d0a2ab1 | ||
|
|
4a1e16449d | ||
|
|
41d31cb5ea | ||
|
|
909e2cbf89 | ||
|
|
1290503895 | ||
|
|
a204b24d78 | ||
|
|
8be5a2182b | ||
|
|
ee30694cf1 | ||
|
|
37a9a30187 | ||
|
|
de34910a6d | ||
|
|
86c969998f | ||
|
|
158874039a | ||
|
|
175cebc4a1 | ||
|
|
20aba0fd7c | ||
|
|
efc2da90d3 | ||
|
|
12ad800d1f | ||
|
|
de6c35f4ab | ||
|
|
46816a74e9 | ||
|
|
1111c3d1b1 | ||
|
|
e919685ad3 | ||
|
|
238ba9b9b4 | ||
|
|
1d966a0c92 | ||
|
|
3e87b21a8e | ||
|
|
21309f1451 | ||
|
|
225644f82b | ||
|
|
285fffc7df | ||
|
|
7c760387f3 | ||
|
|
94ff668044 | ||
|
|
270b1191f5 | ||
|
|
6208c516c2 | ||
|
|
b695c9591e | ||
|
|
911da0f34f | ||
|
|
14c2e257a0 | ||
|
|
52ec745ed0 | ||
|
|
8f42dc3c33 | ||
|
|
45530114a7 | ||
|
|
5b8baed0bc | ||
|
|
936e95a146 | ||
|
|
61a3f3f7c1 | ||
|
|
b3545ccb8b | ||
|
|
d217f1e4fb | ||
|
|
bb373061ae | ||
|
|
c65cb83348 | ||
|
|
e3a6436031 | ||
|
|
f56a5f0ad6 | ||
|
|
9044721c89 | ||
|
|
ce5729ba53 | ||
|
|
fc70a50fd6 | ||
|
|
a8d61cb5de | ||
|
|
d8af66cfd7 | ||
|
|
1aa69e61ac | ||
|
|
be3ecf1377 | ||
|
|
571674a4f5 | ||
|
|
a06520337f | ||
|
|
bf2b7dcf7b | ||
|
|
86faceb94f | ||
|
|
963e365da4 | ||
|
|
4332ac35db | ||
|
|
7e5d58f94b | ||
|
|
6b3b6106bf | ||
|
|
f0c12e6246 | ||
|
|
741934b1da | ||
|
|
35e7bfe506 | ||
|
|
dcc2ddfdb8 | ||
|
|
f59441eb55 | ||
|
|
9cb6ddf742 | ||
|
|
035a84b55d | ||
|
|
d892343e57 | ||
|
|
aaa3976e5a | ||
|
|
0d4afd7a37 | ||
|
|
a3a8976fdf | ||
|
|
4edb1ca61b | ||
|
|
d6374f259a | ||
|
|
7b4f40d3b1 | ||
|
|
9c4eb549b7 | ||
|
|
c380fb638b | ||
|
|
908e993727 | ||
|
|
4128864e39 | ||
|
|
304f800018 | ||
|
|
fcc0c5e345 | ||
|
|
77887d83e9 | ||
|
|
3514ff64fe | ||
|
|
b56ede81f0 | ||
|
|
427c39e88e | ||
|
|
e450923409 | ||
|
|
c862b0bc26 | ||
|
|
575a1e4603 | ||
|
|
a74ccad282 |
@@ -7,11 +7,11 @@ root = true
|
|||||||
[*]
|
[*]
|
||||||
charset = utf-8
|
charset = utf-8
|
||||||
end_of_line = lf
|
end_of_line = lf
|
||||||
trim_trailing_whitespace = true
|
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
# 2 space indentation
|
# 2 space indentation
|
||||||
[*.{yaml,.yml}]
|
[*.{yaml,yml,vue,js,css}]
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
|
|||||||
12
.github/dependabot.yaml
vendored
Normal file
12
.github/dependabot.yaml
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
|
||||||
|
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: "monthly"
|
||||||
|
groups:
|
||||||
|
github-actions:
|
||||||
|
patterns:
|
||||||
|
- "*"
|
||||||
81
.github/workflows/build.yaml
vendored
Normal file
81
.github/workflows/build.yaml
vendored
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
name: Release Builds
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
|
||||||
|
permissions: {}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
permissions:
|
||||||
|
contents: write # for release creation (svenstaro/upload-release-action)
|
||||||
|
|
||||||
|
if: "!github.event.release.prerelease"
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
ref: ${{ github.ref }}
|
||||||
|
|
||||||
|
- name: Extract Tag
|
||||||
|
run: echo "PACKAGE_VERSION=${{ github.ref }}" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: 7.3
|
||||||
|
extensions: opcache, gd
|
||||||
|
tools: composer:v2
|
||||||
|
coverage: none
|
||||||
|
env:
|
||||||
|
COMPOSER_TOKEN: ${{ secrets.GLOBAL_TOKEN }}
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt-get -y update -qq < /dev/null > /dev/null
|
||||||
|
sudo apt-get -y install -qq git zip < /dev/null > /dev/null
|
||||||
|
|
||||||
|
- name: Retrieval of Builder Scripts
|
||||||
|
run: |
|
||||||
|
# Real Grav URL
|
||||||
|
curl --silent -H "Authorization: token ${{ secrets.GLOBAL_TOKEN }}" -H "Accept: application/vnd.github.v3.raw" ${{ secrets.BUILD_SCRIPT_URL }} --output build-grav.sh
|
||||||
|
|
||||||
|
# Development Local URL
|
||||||
|
# curl ${{ secrets.BUILD_SCRIPT_URL }} --output build-grav.sh
|
||||||
|
|
||||||
|
- name: Grav Builder
|
||||||
|
run: |
|
||||||
|
bash ./build-grav.sh
|
||||||
|
|
||||||
|
- name: Upload packages to release
|
||||||
|
uses: svenstaro/upload-release-action@v2
|
||||||
|
with:
|
||||||
|
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
tag: ${{ env.PACKAGE_VERSION }}
|
||||||
|
file: ./grav-dist/*.zip
|
||||||
|
overwrite: true
|
||||||
|
file_glob: true
|
||||||
|
|
||||||
|
slack:
|
||||||
|
permissions:
|
||||||
|
actions: read # to list jobs for workflow run (technote-space/workflow-conclusion-action)
|
||||||
|
|
||||||
|
name: Slack
|
||||||
|
needs: build
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: always()
|
||||||
|
steps:
|
||||||
|
- uses: technote-space/workflow-conclusion-action@v3
|
||||||
|
- uses: 8398a7/action-slack@v3
|
||||||
|
with:
|
||||||
|
status: failure
|
||||||
|
fields: repo,message,author,action
|
||||||
|
icon_emoji: ':octocat:'
|
||||||
|
author_name: 'Github Action Build'
|
||||||
|
text: '🚚 Automated Build Failure'
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GLOBAL_TOKEN }}
|
||||||
|
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
|
||||||
|
if: env.WORKFLOW_CONCLUSION == 'failure'
|
||||||
68
.github/workflows/tests.yaml
vendored
Normal file
68
.github/workflows/tests.yaml
vendored
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
name: PHP Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ develop ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ develop ]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read # to fetch code (actions/checkout)
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
unit-tests:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
php: ['8.3', '8.2', '8.1', '8.0', '7.4', '7.3']
|
||||||
|
os: [ubuntu-latest]
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- name: Setup PHP ${{ matrix.php }}
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php }}
|
||||||
|
extensions: opcache, gd
|
||||||
|
tools: composer:v2
|
||||||
|
coverage: none
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache dependencies
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: composer install --prefer-dist --no-progress
|
||||||
|
|
||||||
|
- name: Run test suite
|
||||||
|
run: vendor/bin/codecept run
|
||||||
|
|
||||||
|
# slack:
|
||||||
|
# name: Slack
|
||||||
|
# needs: unit-tests
|
||||||
|
# runs-on: ubuntu-latest
|
||||||
|
# if: always()
|
||||||
|
# steps:
|
||||||
|
# - uses: technote-space/workflow-conclusion-action@v2
|
||||||
|
# - uses: 8398a7/action-slack@v3
|
||||||
|
# with:
|
||||||
|
# status: failure
|
||||||
|
# fields: repo,message,author,action
|
||||||
|
# icon_emoji: ':octocat:'
|
||||||
|
# author_name: 'Github Action Tests'
|
||||||
|
# text: '💥 Automated Test Failure'
|
||||||
|
# env:
|
||||||
|
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
# SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
|
||||||
|
# if: env.WORKFLOW_CONCLUSION == 'failure'
|
||||||
48
.github/workflows/trigger-skeletons.yml
vendored
Normal file
48
.github/workflows/trigger-skeletons.yml
vendored
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
name: Trigger Skeletons Build
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
version:
|
||||||
|
description: 'Which Grav release to use'
|
||||||
|
required: true
|
||||||
|
default: 'latest'
|
||||||
|
admin:
|
||||||
|
description: 'Create also a package with Admin'
|
||||||
|
required: true
|
||||||
|
default: true
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read # to fetch code (actions/checkout)
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
WORKFLOW: "build-skeleton.yml"
|
||||||
|
AUTH: ":${{secrets.GLOBAL_TOKEN}}"
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
- name: Make it rain ☔️
|
||||||
|
run: |
|
||||||
|
SKELETONS=`curl -s "${{secrets.SKELETONS_JSON_LIST}}"`
|
||||||
|
echo "$SKELETONS" | jq -cr '.[]' | while read SKELETON; do
|
||||||
|
KEY=$(echo "$SKELETON" | jq -cr 'keys[0]')
|
||||||
|
VERSION=$(echo "$SKELETON" | jq -cr '.[]')
|
||||||
|
URL="https://api.github.com/repos/${KEY}/actions/workflows/${WORKFLOW}/dispatches"
|
||||||
|
|
||||||
|
curl -X POST \
|
||||||
|
-u "${AUTH}" \
|
||||||
|
-H "Accept: application/vnd.github.everest-preview+json" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-sS \
|
||||||
|
${URL} \
|
||||||
|
--data '{ "ref": "develop",
|
||||||
|
"inputs": {
|
||||||
|
"tag": "'"$VERSION"'",
|
||||||
|
"version": "'"$INPUT_VERSION"'",
|
||||||
|
"admin": "'"$INPUT_ADMIN"'"
|
||||||
|
}
|
||||||
|
}' > /dev/null
|
||||||
|
echo "Dispatched Worfklow for ${KEY}@$VERSION"
|
||||||
|
done
|
||||||
13
.gitignore
vendored
13
.gitignore
vendored
@@ -25,8 +25,11 @@ user/plugins/*
|
|||||||
!user/plugins/.*
|
!user/plugins/.*
|
||||||
user/themes/*
|
user/themes/*
|
||||||
!user/themes/.*
|
!user/themes/.*
|
||||||
user/localhost/config/security.yaml
|
user/**/config/security.yaml
|
||||||
user/config/security.yaml
|
|
||||||
|
# Environments
|
||||||
|
.env
|
||||||
|
.gravenv
|
||||||
|
|
||||||
# OS Generated
|
# OS Generated
|
||||||
.DS_Store*
|
.DS_Store*
|
||||||
@@ -44,3 +47,9 @@ tests/_support/_generated/*
|
|||||||
tests/cache/*
|
tests/cache/*
|
||||||
tests/error.log
|
tests/error.log
|
||||||
system/templates/testing/*
|
system/templates/testing/*
|
||||||
|
/user/config/versions.yaml
|
||||||
|
/system/recovery.window
|
||||||
|
tmp/*
|
||||||
|
#needs_fixing.txt
|
||||||
|
/AGENTS.md
|
||||||
|
/.claude
|
||||||
|
|||||||
@@ -27,6 +27,9 @@ RewriteEngine On
|
|||||||
# If you experience problems on your site block out the operations listed below
|
# If you experience problems on your site block out the operations listed below
|
||||||
# This attempts to block the most common type of exploit `attempts` to Grav
|
# This attempts to block the most common type of exploit `attempts` to Grav
|
||||||
#
|
#
|
||||||
|
# Block out any script trying to use twig tags in URL.
|
||||||
|
RewriteCond %{REQUEST_URI} ({{|}}|{%|%}) [OR]
|
||||||
|
RewriteCond %{QUERY_STRING} ({{|}}|{%25|%25}) [OR]
|
||||||
# Block out any script trying to base64_encode data within the URL.
|
# Block out any script trying to base64_encode data within the URL.
|
||||||
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
|
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
|
||||||
# Block out any script that includes a <script> tag in URL.
|
# Block out any script that includes a <script> tag in URL.
|
||||||
@@ -56,9 +59,9 @@ RewriteRule .* index.php [L]
|
|||||||
# Block all direct access for these folders
|
# Block all direct access for these folders
|
||||||
RewriteRule ^(\.git|cache|bin|logs|backup|webserver-configs|tests)/(.*) error [F]
|
RewriteRule ^(\.git|cache|bin|logs|backup|webserver-configs|tests)/(.*) error [F]
|
||||||
# Block access to specific file types for these system folders
|
# Block access to specific file types for these system folders
|
||||||
RewriteRule ^(system|vendor)/(.*)\.(txt|xml|md|html|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ error [F]
|
RewriteRule ^(system|vendor)/(.*)\.(txt|xml|md|html|json|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ error [F]
|
||||||
# Block access to specific file types for these user folders
|
# Block access to specific file types for these user folders
|
||||||
RewriteRule ^(user)/(.*)\.(txt|md|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ error [F]
|
RewriteRule ^(user)/(.*)\.(txt|md|json|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ error [F]
|
||||||
# Block all direct access to .md files:
|
# Block all direct access to .md files:
|
||||||
RewriteRule \.md$ error [F]
|
RewriteRule \.md$ error [F]
|
||||||
# Block all direct access to files and folders beginning with a dot
|
# Block all direct access to files and folders beginning with a dot
|
||||||
|
|||||||
96
.travis.yml
96
.travis.yml
@@ -1,96 +0,0 @@
|
|||||||
language: php
|
|
||||||
php:
|
|
||||||
- '7.1'
|
|
||||||
- '7.2'
|
|
||||||
- '7.3'
|
|
||||||
branches:
|
|
||||||
only:
|
|
||||||
- develop
|
|
||||||
- master
|
|
||||||
- build_test
|
|
||||||
notifications:
|
|
||||||
email:
|
|
||||||
on_success: never
|
|
||||||
on_failure: always
|
|
||||||
slack:
|
|
||||||
secure: dowksPsxxCxGKT6nis5hUgkp6+ZDAhoqzQHF9rJnx4hx0iEygPhVBs7pKl9yL2jubYJoLs+EXwE7z1dYgDAEJh4BnfrCokCMLpFGcxVxQC/HeAUdSQ2/RtdBYR5PRT75ScaFpqM/SfXXZVtnwVXAw9Z+JC6BjQ9vmn23m51Jw4k=
|
|
||||||
env:
|
|
||||||
global:
|
|
||||||
# Colors!
|
|
||||||
- TEXTRESET=$(tput sgr0) # reset the foreground colour
|
|
||||||
- RED=$(tput setaf 1)
|
|
||||||
- GREEN=$(tput setaf 2)
|
|
||||||
- YELLOW=$(tput setaf 3)
|
|
||||||
- BLUE=$(tput setaf 4)
|
|
||||||
- BOLD=$(tput bold)
|
|
||||||
# User
|
|
||||||
- GH_USER="getgrav"
|
|
||||||
# Paths
|
|
||||||
- RT_DEVTOOLS=$HOME/devtools
|
|
||||||
- GOPATH="$HOME/go"
|
|
||||||
- PATH="$GOPATH/bin:$PATH"
|
|
||||||
# GH_TOKEN [API Key]
|
|
||||||
- secure: "NR9pV7YteY9OoPmjDTQG0fDfocVu+tCeiDH1F2GFhXCu71UOIvqWXpOxp0RHkG5GIXdCFHx59yu+ZO275lbaHkbF8+4lVSVrV4RcGn+pIncvxr6iZCVW05dbAxV3H8alK+xYJRGmbyfQl5wIM49WvmuGHZjcmIloS4t/omQ3N+I="
|
|
||||||
# BB_TOKEN value => "user:pass@"
|
|
||||||
- secure: "einUtSEkUWy2IrqLXyVjwUU+mwaaoiOXRRVdLBpA3Zye6bZx8cm5h/5AplkPWhM/NmCJoW/MwNZHHkFhlr3mDRov5iOxVmTTYfnXB+I5lxYTSgduOLLErS7mU8hfADpVDU8bHNU44fNGD3UEiG1PD4qQBX4DMlqIFmR20mjs81k="
|
|
||||||
# GH_API_USER [for curl]
|
|
||||||
- secure: "AQGcX1B2NrI8ajflY4AimZDNcK2kBA3F6mbtEFQ78NkDoWhMipsQHayWXiSTzRc0YJKvQl2Y16MTwQF4VHzjTAiiZFATgA8J88vQUjIPabi/kKjqSmcLFoaAOAxStQbW6e0z2GiQ6KBMcNF1y5iUuI63xVrBvtKrYX/w5y+ako8="
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- export TZ=Pacific/Honolulu
|
|
||||||
- echo $TRAVIS_PHP_VERSION
|
|
||||||
- echo $TRAVIS_BRANCH
|
|
||||||
- echo $TRAVIS_PULL_REQUEST
|
|
||||||
- composer self-update
|
|
||||||
- if [ $TRAVIS_BRANCH == 'develop' ] || [ $TRAVIS_PULL_REQUEST != 'false' ]; then
|
|
||||||
composer install --dev --prefer-dist;
|
|
||||||
fi
|
|
||||||
- if [ $TRAVIS_BRANCH != 'develop' ] && [ $TRAVIS_PHP_VERSION == "7.1" ] && [ $TRAVIS_PULL_REQUEST == "false" ]; then
|
|
||||||
export TRAVIS_TAG=$(curl --fail --user "${GH_API_USER}" -s https://api.github.com/repos/getgrav/grav/releases/latest | grep tag_name | head -n 1 | cut -d '"' -f 4);
|
|
||||||
eval "$(curl -sL https://raw.githubusercontent.com/travis-ci/gimme/master/gimme | GIMME_GO_VERSION=1.8 bash)";
|
|
||||||
go get github.com/aktau/github-release;
|
|
||||||
git clone --quiet --depth=50 --branch=master https://${BB_TOKEN}bitbucket.org/rockettheme/grav-devtools.git $RT_DEVTOOLS &>/dev/null;
|
|
||||||
if [ ! -z "$TRAVIS_TAG" ]; then
|
|
||||||
cd ${RT_DEVTOOLS};
|
|
||||||
./build-grav.sh skeletons.txt;
|
|
||||||
fi;
|
|
||||||
fi
|
|
||||||
before_script:
|
|
||||||
- if [ $TRAVIS_PHP_VERSION != 'hhvm' ]; then phpenv config-rm xdebug.ini; fi
|
|
||||||
script:
|
|
||||||
- if [ $TRAVIS_BRANCH == 'develop' ] || [ $TRAVIS_PULL_REQUEST != 'false' ]; then
|
|
||||||
vendor/bin/codecept run;
|
|
||||||
fi
|
|
||||||
- echo "Latest Release Tag - ${TRAVIS_TAG}"
|
|
||||||
- if [ ! -z "$TRAVIS_TAG" ] && [ $TRAVIS_BRANCH != 'develop' ] && [ $TRAVIS_PHP_VERSION == "7.1" ] && [ $TRAVIS_PULL_REQUEST == "false" ]; then
|
|
||||||
FILES="$RT_DEVTOOLS/grav-dist/*.zip";
|
|
||||||
for file in ${FILES[@]}; do
|
|
||||||
NAME=${file##*/};
|
|
||||||
if [[ "$NAME" == *"-rc"* ]]; then
|
|
||||||
REPO="$(echo ${NAME} | rev | cut -f 3- -d "-" | rev)";
|
|
||||||
else
|
|
||||||
REPO="$(echo ${NAME} | rev | cut -f 2- -d "-" | rev)";
|
|
||||||
fi;
|
|
||||||
if [[ $REPO == 'grav' || $REPO == 'grav-admin' || $REPO == 'grav-update' ]]; then
|
|
||||||
REPO="grav";
|
|
||||||
fi;
|
|
||||||
API="$(curl --fail --user "${GH_API_USER}" -s https://api.github.com/repos/${GH_USER}/${REPO}/releases/latest)";
|
|
||||||
ASSETS="$(echo "${API}" | node gh-assets.js)";
|
|
||||||
TAG="$(echo "${API}" | grep tag_name | head -n 1 | cut -d '"' -f 4)";
|
|
||||||
if [ $REPO == "grav" ]; then
|
|
||||||
TAG="$TRAVIS_TAG";
|
|
||||||
fi;
|
|
||||||
if [ ! -z "$ASSETS" ]; then
|
|
||||||
for asset in ${ASSETS[@]}; do
|
|
||||||
asset_id=$(echo ${asset} | cut -d ':' -f 1);
|
|
||||||
asset_name=$(echo ${asset} | cut -d ':' -f 2);
|
|
||||||
if [ "${NAME}" == "${asset_name}" ]; then
|
|
||||||
echo -e "\nAsset ${BOLD}${BLUE}${NAME}${TEXTRESET} already exists in ${YELLOW}${REPO}${TEXTRESET}@${BOLD}${YELLOW}${TAG}${TEXTRESET}... deleting id ${BOLD}${RED}${asset_id}${TEXTRESET}...";
|
|
||||||
curl -X DELETE --fail --user "${GH_API_USER}" "https://api.github.com/repos/${GH_USER}/${REPO}/releases/assets/${asset_id}";
|
|
||||||
fi;
|
|
||||||
done;
|
|
||||||
fi;
|
|
||||||
echo "Uploading package ${BOLD}${BLUE}${NAME}${TEXTRESET} to ${YELLOW}${REPO}${TEXTRESET}@${YELLOW}${TAG}${TEXTRESET}";
|
|
||||||
github-release upload --security-token $GH_TOKEN --user ${GH_USER} --repo $REPO --tag "$TAG" --name "$NAME" --file "$file";
|
|
||||||
done;
|
|
||||||
fi
|
|
||||||
1552
CHANGELOG.md
1552
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
@@ -1,46 +1,133 @@
|
|||||||
|
|
||||||
# Contributor Covenant Code of Conduct
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
## Our Pledge
|
## Our Pledge
|
||||||
|
|
||||||
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
We as members, contributors, and leaders pledge to make participation in our
|
||||||
|
community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||||
|
identity and expression, level of experience, education, socio-economic status,
|
||||||
|
nationality, personal appearance, race, religion, or sexual identity
|
||||||
|
and orientation.
|
||||||
|
|
||||||
|
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||||
|
diverse, inclusive, and healthy community.
|
||||||
|
|
||||||
## Our Standards
|
## Our Standards
|
||||||
|
|
||||||
Examples of behavior that contributes to creating a positive environment include:
|
Examples of behavior that contributes to a positive environment for our
|
||||||
|
community include:
|
||||||
|
|
||||||
* Using welcoming and inclusive language
|
* Demonstrating empathy and kindness toward other people
|
||||||
* Being respectful of differing viewpoints and experiences
|
* Being respectful of differing opinions, viewpoints, and experiences
|
||||||
* Gracefully accepting constructive criticism
|
* Giving and gracefully accepting constructive feedback
|
||||||
* Focusing on what is best for the community
|
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||||
* Showing empathy towards other community members
|
and learning from the experience
|
||||||
|
* Focusing on what is best not just for us as individuals, but for the
|
||||||
|
overall community
|
||||||
|
|
||||||
Examples of unacceptable behavior by participants include:
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
* The use of sexualized language or imagery and unwelcome sexual attention or advances
|
* The use of sexualized language or imagery, and sexual attention or
|
||||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
advances of any kind
|
||||||
|
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
* Public or private harassment
|
* Public or private harassment
|
||||||
* Publishing others' private information, such as a physical or electronic address, without explicit permission
|
* Publishing others' private information, such as a physical or email
|
||||||
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
address, without their explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
## Our Responsibilities
|
## Enforcement Responsibilities
|
||||||
|
|
||||||
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
Community leaders are responsible for clarifying and enforcing our standards of
|
||||||
|
acceptable behavior and will take appropriate and fair corrective action in
|
||||||
|
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||||
|
or harmful.
|
||||||
|
|
||||||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
Community leaders have the right and responsibility to remove, edit, or reject
|
||||||
|
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||||
|
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||||
|
decisions when appropriate.
|
||||||
|
|
||||||
## Scope
|
## Scope
|
||||||
|
|
||||||
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
|
This Code of Conduct applies within all community spaces, and also applies when
|
||||||
|
an individual is officially representing the community in public spaces.
|
||||||
|
Examples of representing our community include using an official e-mail address,
|
||||||
|
posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event.
|
||||||
|
|
||||||
## Enforcement
|
## Enforcement
|
||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at contact@getgrav.org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported to the community leaders responsible for enforcement at
|
||||||
|
[INSERT CONTACT METHOD].
|
||||||
|
All complaints will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
All community leaders are obligated to respect the privacy and security of the
|
||||||
|
reporter of any incident.
|
||||||
|
|
||||||
|
## Enforcement Guidelines
|
||||||
|
|
||||||
|
Community leaders will follow these Community Impact Guidelines in determining
|
||||||
|
the consequences for any action they deem in violation of this Code of Conduct:
|
||||||
|
|
||||||
|
### 1. Correction
|
||||||
|
|
||||||
|
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||||
|
unprofessional or unwelcome in the community.
|
||||||
|
|
||||||
|
**Consequence**: A private, written warning from community leaders, providing
|
||||||
|
clarity around the nature of the violation and an explanation of why the
|
||||||
|
behavior was inappropriate. A public apology may be requested.
|
||||||
|
|
||||||
|
### 2. Warning
|
||||||
|
|
||||||
|
**Community Impact**: A violation through a single incident or series
|
||||||
|
of actions.
|
||||||
|
|
||||||
|
**Consequence**: A warning with consequences for continued behavior. No
|
||||||
|
interaction with the people involved, including unsolicited interaction with
|
||||||
|
those enforcing the Code of Conduct, for a specified period of time. This
|
||||||
|
includes avoiding interactions in community spaces as well as external channels
|
||||||
|
like social media. Violating these terms may lead to a temporary or
|
||||||
|
permanent ban.
|
||||||
|
|
||||||
|
### 3. Temporary Ban
|
||||||
|
|
||||||
|
**Community Impact**: A serious violation of community standards, including
|
||||||
|
sustained inappropriate behavior.
|
||||||
|
|
||||||
|
**Consequence**: A temporary ban from any sort of interaction or public
|
||||||
|
communication with the community for a specified period of time. No public or
|
||||||
|
private interaction with the people involved, including unsolicited interaction
|
||||||
|
with those enforcing the Code of Conduct, is allowed during this period.
|
||||||
|
Violating these terms may lead to a permanent ban.
|
||||||
|
|
||||||
|
### 4. Permanent Ban
|
||||||
|
|
||||||
|
**Community Impact**: Demonstrating a pattern of violation of community
|
||||||
|
standards, including sustained inappropriate behavior, harassment of an
|
||||||
|
individual, or aggression toward or disparagement of classes of individuals.
|
||||||
|
|
||||||
|
**Consequence**: A permanent ban from any sort of public interaction within
|
||||||
|
the community.
|
||||||
|
|
||||||
## Attribution
|
## Attribution
|
||||||
|
|
||||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||||
|
version 2.0, available at
|
||||||
|
[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
|
||||||
|
|
||||||
[homepage]: http://contributor-covenant.org
|
Community Impact Guidelines were inspired by
|
||||||
[version]: http://contributor-covenant.org/version/1/4/
|
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see the FAQ at
|
||||||
|
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
|
||||||
|
at [https://www.contributor-covenant.org/translations][translations].
|
||||||
|
|
||||||
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
|
||||||
|
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||||
|
[FAQ]: https://www.contributor-covenant.org/faq
|
||||||
|
[translations]: https://www.contributor-covenant.org/translations
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
Copyright (c) 2018 Grav
|
Copyright (c) 2021 Grav
|
||||||
|
|
||||||
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
|
||||||
|
|||||||
70
README.md
70
README.md
@@ -1,29 +1,32 @@
|
|||||||
#  Grav
|
#  Grav
|
||||||
|
|
||||||
[](https://github.com/phpstan/phpstan)
|
[](https://github.com/phpstan/phpstan)
|
||||||
[](https://insight.sensiolabs.com/projects/cfd20465-d0f8-4a0a-8444-467f5b5f16ad)
|
|
||||||
[](https://chat.getgrav.org)
|
[](https://chat.getgrav.org)
|
||||||
[](https://travis-ci.org/getgrav/grav) [](#backers) [](#sponsors)
|
[](https://github.com/getgrav/grav/actions?query=workflow%3A%22PHP+Tests%22) [](#backers) [](#supporters) [](#sponsors)
|
||||||
|
|
||||||
Grav is a **Fast**, **Simple**, and **Flexible**, file-based Web-platform. There is **Zero** installation required. Just extract the ZIP archive, and you are already up and running. It follows similar principles to other flat-file CMS platforms, but has a different design philosophy than most. Grav comes with a powerful **Package Management System** to allow for simple installation and upgrading of plugins and themes, as well as simple updating of Grav itself.
|
Grav is a **Fast**, **Simple**, and **Flexible**, file-based Web-platform. There is **Zero** installation required. Just extract the ZIP archive, and you are already up and running. It follows similar principles to other flat-file CMS platforms, but has a different design philosophy than most. Grav comes with a powerful **Package Management System** to allow for simple installation and upgrading of plugins and themes, as well as simple updating of Grav itself.
|
||||||
|
|
||||||
The underlying architecture of Grav is designed to use well-established and _best-in-class_ technologies to ensure that Grav is simple to use and easy to extend. Some of these key technologies include:
|
The underlying architecture of Grav is designed to use well-established and _best-in-class_ technologies to ensure that Grav is simple to use and easy to extend. Some of these key technologies include:
|
||||||
|
|
||||||
* [Twig Templating](https://twig.sensiolabs.org/): for powerful control of the user interface
|
* [Twig Templating](https://twig.symfony.com/): for powerful control of the user interface
|
||||||
* [Markdown](https://en.wikipedia.org/wiki/Markdown): for easy content creation
|
* [Markdown](https://en.wikipedia.org/wiki/Markdown): for easy content creation
|
||||||
* [YAML](https://yaml.org): for simple configuration
|
* [YAML](https://yaml.org): for simple configuration
|
||||||
* [Parsedown](https://parsedown.org/): for fast Markdown and Markdown Extra support
|
* [Parsedown](https://parsedown.org/): for fast Markdown and Markdown Extra support
|
||||||
* [Doctrine Cache](https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/caching.html): layer for performance
|
* [Doctrine Cache](https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/caching.html): layer for performance
|
||||||
* [Pimple Dependency Injection Container](https://pimple.sensiolabs.org/): for extensibility and maintainability
|
* [Pimple Dependency Injection Container](https://github.com/silexphp/Pimple): for extensibility and maintainability
|
||||||
* [Symfony Event Dispatcher](https://symfony.com/doc/current/components/event_dispatcher/introduction.html): for plugin event handling
|
* [Symfony Event Dispatcher](https://symfony.com/doc/current/components/event_dispatcher/introduction.html): for plugin event handling
|
||||||
* [Symfony Console](https://symfony.com/doc/current/components/console/introduction.html): for CLI interface
|
* [Symfony Console](https://symfony.com/doc/current/components/console/introduction.html): for CLI interface
|
||||||
* [Gregwar Image Library](https://github.com/Gregwar/Image): for dynamic image manipulation
|
* [Gregwar Image Library](https://github.com/Gregwar/Image): for dynamic image manipulation
|
||||||
|
|
||||||
# Requirements
|
# Requirements
|
||||||
|
|
||||||
- PHP 7.1.3 or higher. Check the [required modules list](https://learn.getgrav.org/basics/requirements#php-requirements)
|
- PHP 7.3.6 or higher. Check the [required modules list](https://learn.getgrav.org/basics/requirements#php-requirements)
|
||||||
- Check the [Apache](https://learn.getgrav.org/basics/requirements#apache-requirements) or [IIS](https://learn.getgrav.org/basics/requirements#iis-requirements) requirements
|
- Check the [Apache](https://learn.getgrav.org/basics/requirements#apache-requirements) or [IIS](https://learn.getgrav.org/basics/requirements#iis-requirements) requirements
|
||||||
|
|
||||||
|
# Documentation
|
||||||
|
|
||||||
|
The full documentation can be found from [learn.getgrav.org](https://learn.getgrav.org).
|
||||||
|
|
||||||
# QuickStart
|
# QuickStart
|
||||||
|
|
||||||
These are the options to get Grav:
|
These are the options to get Grav:
|
||||||
@@ -36,22 +39,22 @@ You can download a **ready-built** package from the [Downloads page on https://g
|
|||||||
|
|
||||||
You can create a new project with the latest **stable** Grav release with the following command:
|
You can create a new project with the latest **stable** Grav release with the following command:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
$ composer create-project getgrav/grav ~/webroot/grav
|
composer create-project getgrav/grav ~/webroot/grav
|
||||||
```
|
```
|
||||||
|
|
||||||
### From GitHub
|
### From GitHub
|
||||||
|
|
||||||
1. Clone the Grav repository from [https://github.com/getgrav/grav]() to a folder in the webroot of your server, e.g. `~/webroot/grav`. Launch a **terminal** or **console** and navigate to the webroot folder:
|
1. Clone the Grav repository from [https://github.com/getgrav/grav]() to a folder in the webroot of your server, e.g. `~/webroot/grav`. Launch a **terminal** or **console** and navigate to the webroot folder:
|
||||||
```
|
```bash
|
||||||
$ cd ~/webroot
|
cd ~/webroot
|
||||||
$ git clone https://github.com/getgrav/grav.git
|
git clone https://github.com/getgrav/grav.git
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Install the **plugin** and **theme dependencies** by using the [Grav CLI application](https://learn.getgrav.org/advanced/grav-cli) `bin/grav`:
|
2. Install the **plugin** and **theme dependencies** by using the [Grav CLI application](https://learn.getgrav.org/advanced/grav-cli) `bin/grav`:
|
||||||
```
|
```bash
|
||||||
$ cd ~/webroot/grav
|
cd ~/webroot/grav
|
||||||
$ bin/grav install
|
bin/grav install
|
||||||
```
|
```
|
||||||
|
|
||||||
Check out the [install procedures](https://learn.getgrav.org/basics/installation) for more information.
|
Check out the [install procedures](https://learn.getgrav.org/basics/installation) for more information.
|
||||||
@@ -60,30 +63,35 @@ Check out the [install procedures](https://learn.getgrav.org/basics/installation
|
|||||||
|
|
||||||
You can download [plugins](https://getgrav.org/downloads/plugins) or [themes](https://getgrav.org/downloads/themes) manually from the appropriate tab on the [Downloads page on https://getgrav.org](https://getgrav.org/downloads), but the preferred solution is to use the [Grav Package Manager](https://learn.getgrav.org/advanced/grav-gpm) or `GPM`:
|
You can download [plugins](https://getgrav.org/downloads/plugins) or [themes](https://getgrav.org/downloads/themes) manually from the appropriate tab on the [Downloads page on https://getgrav.org](https://getgrav.org/downloads), but the preferred solution is to use the [Grav Package Manager](https://learn.getgrav.org/advanced/grav-gpm) or `GPM`:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
$ bin/gpm index
|
bin/gpm index
|
||||||
```
|
```
|
||||||
|
|
||||||
This will display all the available plugins and then you can install one or more with:
|
This will display all the available plugins and then you can install one or more with:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
$ bin/gpm install <plugin/theme>
|
bin/gpm install <plugin/theme>
|
||||||
```
|
```
|
||||||
|
|
||||||
# Updating
|
# Updating
|
||||||
|
|
||||||
To update Grav you should use the [Grav Package Manager](https://learn.getgrav.org/advanced/grav-gpm) or `GPM`:
|
To update Grav you should use the [Grav Package Manager](https://learn.getgrav.org/advanced/grav-gpm) or `GPM`:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
$ bin/gpm selfupgrade
|
bin/gpm selfupgrade
|
||||||
```
|
```
|
||||||
|
|
||||||
To update plugins and themes:
|
To update plugins and themes:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
$ bin/gpm update
|
bin/gpm update
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Upgrading from older version
|
||||||
|
|
||||||
|
* [Upgrading to Grav 1.7](https://learn.getgrav.org/16/advanced/grav-development/grav-17-upgrade-guide)
|
||||||
|
* [Upgrading to Grav 1.6](https://learn.getgrav.org/16/advanced/grav-development/grav-16-upgrade-guide)
|
||||||
|
* [Upgrading from Grav <1.6](https://learn.getgrav.org/16/advanced/grav-development/grav-15-upgrade-guide)
|
||||||
|
|
||||||
# Contributing
|
# Contributing
|
||||||
We appreciate any contribution to Grav, whether it is related to bugs, grammar, or simply a suggestion or improvement! Please refer to the [Contributing guide](CONTRIBUTING.md) for more guidance on this topic.
|
We appreciate any contribution to Grav, whether it is related to bugs, grammar, or simply a suggestion or improvement! Please refer to the [Contributing guide](CONTRIBUTING.md) for more guidance on this topic.
|
||||||
@@ -109,12 +117,19 @@ If you discover a possible security issue related to Grav or one of its plugins,
|
|||||||
* More [Awesome Grav Stuff](https://github.com/getgrav/awesome-grav)
|
* More [Awesome Grav Stuff](https://github.com/getgrav/awesome-grav)
|
||||||
|
|
||||||
# Backers
|
# Backers
|
||||||
Support Grav with a monthly donation to help us continue development. [[Become a backer](https://opencollective.com/grav#backer)]
|
Support Grav with a monthly donation to help us continue development. [[Become a backer](https://opencollective.com/grav/contribute)]
|
||||||
|
|
||||||
<img src="https://opencollective.com/grav/tiers/backers.svg?avatarHeight=36&width=600" />
|
<img src="https://opencollective.com/grav/tiers/backers.svg?avatarHeight=36&width=600" />
|
||||||
|
|
||||||
|
|
||||||
|
# Supporters
|
||||||
|
Support Grav with a monthly donation to help us continue development. [[Become a supporter](https://opencollective.com/grav/contribute)]
|
||||||
|
|
||||||
|
<img src="https://opencollective.com/grav/tiers/supporters.svg?avatarHeight=36&width=600" />
|
||||||
|
|
||||||
|
|
||||||
# Sponsors
|
# Sponsors
|
||||||
Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/grav#sponsor)]
|
Support Grav with a yearly donation to help us continue development. [[Become a sponsor](https://opencollective.com/grav/contribute)]
|
||||||
|
|
||||||
<img src="https://opencollective.com/grav/tiers/sponsors.svg?avatarHeight=36&width=600" />
|
<img src="https://opencollective.com/grav/tiers/sponsors.svg?avatarHeight=36&width=600" />
|
||||||
|
|
||||||
@@ -128,7 +143,14 @@ See [LICENSE](LICENSE.txt)
|
|||||||
|
|
||||||
# Running Tests
|
# Running Tests
|
||||||
|
|
||||||
First install the dev dependencies by running `composer update` from the Grav root.
|
First install the dev dependencies by running `composer install` from the Grav root.
|
||||||
|
|
||||||
Then `composer test` will run the Unit Tests, which should be always executed successfully on any site.
|
Then `composer test` will run the Unit Tests, which should be always executed successfully on any site.
|
||||||
Windows users should use the `composer test-windows` command.
|
Windows users should use the `composer test-windows` command.
|
||||||
You can also run a single unit test file, e.g. `composer test tests/unit/Grav/Common/AssetsTest.php`
|
You can also run a single unit test file, e.g. `composer test tests/unit/Grav/Common/AssetsTest.php`
|
||||||
|
|
||||||
|
To run phpstan tests, you should run:
|
||||||
|
|
||||||
|
* `composer phpstan` for global tests
|
||||||
|
* `composer phpstan-framework` for more strict tests
|
||||||
|
* `composer phpstan-plugins` to test all installed plugins
|
||||||
|
|||||||
38
SECURITY.md
Normal file
38
SECURITY.md
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# Security Policy
|
||||||
|
|
||||||
|
## Supported Versions
|
||||||
|
|
||||||
|
We are focusing our security updates on the following versions
|
||||||
|
|
||||||
|
| Version | Supported |
|
||||||
|
| ------- | ------------------ |
|
||||||
|
| 1.7.x | :white_check_mark: |
|
||||||
|
| 1.6.x | :x: |
|
||||||
|
| < 1.6 | :x: |
|
||||||
|
|
||||||
|
## :pushpin: Note on Security Severity
|
||||||
|
|
||||||
|
> NOTE: Please use the following guidelines when selecting a **Severity**. Submitted advisories that are marked **High** or **Critical** that don't meet the guidelines below will be closed.
|
||||||
|
|
||||||
|
* **CRITICAL** - no account required, can modify content, or run malicious code or nefarious activity without any access.
|
||||||
|
* **HIGH** - publisher level account able to run malicious code or nefarious activity, or other high level security things.
|
||||||
|
* **MODERATE** - admin level account able to run malicious code or do nefarious things. other moderate security things.
|
||||||
|
* **LOW** - super admin level account able to run malicious code or do nefarious things. other minor security things.
|
||||||
|
|
||||||
|
## :warning: Versions
|
||||||
|
|
||||||
|
Versions with :warning: will be supported for security issues, however you won't be able to update to them, you will need to manually update through the [`direct-install` command](https://learn.getgrav.org/17/admin-panel/tools).
|
||||||
|
|
||||||
|
If you cannot update to the latest stable version available because, for example, your server does not meet the minimum PHP requirements, you can manually install a previous version by downloading the package from our Releases directory (https://github.com/getgrav/grav/releases).
|
||||||
|
|
||||||
|
## :pencil: Reporting a Vulnerability
|
||||||
|
|
||||||
|
Please contact security@getgrav.org with a detailed explanation of the security issue found. If it appears to be a legitimate issues, please submit an **advisory via GitHub Security**: https://github.com/getgrav/grav/security/advisories
|
||||||
|
|
||||||
|
> NOTE: Please do not use 3rd party security issue reporting services, we like to keep everything in the GitHub ecosystem for easier manageability.
|
||||||
|
|
||||||
|
## :bug: Bug Bounties
|
||||||
|
|
||||||
|
We do greatly appreciate your efforts to improve Grav, but unfortunately because we are a small open source project, we **do not have the resources to offer bounties** for security issues found.
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. */
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
/* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. */
|
||||||
|
|||||||
209
bin/build-test-update.php
Executable file
209
bin/build-test-update.php
Executable file
@@ -0,0 +1,209 @@
|
|||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
use Grav\Common\Filesystem\Folder;
|
||||||
|
|
||||||
|
|
||||||
|
require __DIR__ . '/../vendor/autoload.php';
|
||||||
|
|
||||||
|
if (!\defined('GRAV_ROOT')) {
|
||||||
|
\define('GRAV_ROOT', realpath(__DIR__ . '/..') ?: getcwd());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!\extension_loaded('zip')) {
|
||||||
|
fwrite(STDERR, "The PHP zip extension is required.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$options = getopt('', [
|
||||||
|
'version:',
|
||||||
|
'output::',
|
||||||
|
'port::',
|
||||||
|
'base-url::',
|
||||||
|
'serve',
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (!isset($options['version'])) {
|
||||||
|
fwrite(
|
||||||
|
STDERR,
|
||||||
|
"Usage: php bin/build-test-update.php --version=1.7.999 [--output=tmp/test-gpm] [--port=8043] [--base-url=http://127.0.0.1:8043] [--serve]\n"
|
||||||
|
);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$version = trim((string) $options['version']);
|
||||||
|
if ($version === '') {
|
||||||
|
fwrite(STDERR, "A non-empty --version value is required.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$root = GRAV_ROOT;
|
||||||
|
|
||||||
|
$output = $options['output'] ?? $root . '/tmp/test-gpm';
|
||||||
|
if (!str_starts_with($output, DIRECTORY_SEPARATOR)) {
|
||||||
|
$output = $root . '/' . ltrim($output, '/');
|
||||||
|
}
|
||||||
|
$output = rtrim($output, DIRECTORY_SEPARATOR);
|
||||||
|
|
||||||
|
$defaultPort = isset($options['port']) ? (int) $options['port'] : 8043;
|
||||||
|
$baseUrl = $options['base-url'] ?? sprintf('http://127.0.0.1:%d', $defaultPort);
|
||||||
|
$serve = array_key_exists('serve', $options);
|
||||||
|
|
||||||
|
Folder::create($output);
|
||||||
|
|
||||||
|
$downloadName = sprintf('grav-update-%s.zip', $version);
|
||||||
|
$zipPath = $output . '/' . $downloadName;
|
||||||
|
$jsonPath = $output . '/grav.json';
|
||||||
|
$zipPrefix = 'grav-update/';
|
||||||
|
|
||||||
|
$excludeDirs = [
|
||||||
|
'.build',
|
||||||
|
'.crush',
|
||||||
|
'.ddev',
|
||||||
|
'.git',
|
||||||
|
'.github',
|
||||||
|
'.gitlab',
|
||||||
|
'.circleci',
|
||||||
|
'.idea',
|
||||||
|
'.vscode',
|
||||||
|
'.pytest_cache',
|
||||||
|
'backup',
|
||||||
|
'cache',
|
||||||
|
'images',
|
||||||
|
'logs',
|
||||||
|
'node_modules',
|
||||||
|
'tests',
|
||||||
|
'tmp',
|
||||||
|
'user',
|
||||||
|
];
|
||||||
|
|
||||||
|
$excludeFiles = [
|
||||||
|
'.htaccess',
|
||||||
|
'.DS_Store',
|
||||||
|
'robots.txt',
|
||||||
|
];
|
||||||
|
|
||||||
|
$directory = new RecursiveDirectoryIterator($root, RecursiveDirectoryIterator::SKIP_DOTS);
|
||||||
|
$filtered = new RecursiveCallbackFilterIterator(
|
||||||
|
$directory,
|
||||||
|
function (SplFileInfo $current) use ($root, $excludeDirs, $excludeFiles): bool {
|
||||||
|
$relative = ltrim(str_replace($root, '', $current->getPathname()), DIRECTORY_SEPARATOR);
|
||||||
|
$relative = str_replace('\\', '/', $relative);
|
||||||
|
|
||||||
|
if ($relative === '') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (str_contains($relative, '..')) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($excludeDirs as $prefix) {
|
||||||
|
$prefix = trim($prefix, '/');
|
||||||
|
if ($prefix === '') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($relative === $prefix || str_starts_with($relative, $prefix . '/')) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (in_array($current->getFilename(), $excludeFiles, true)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
$zip = new ZipArchive();
|
||||||
|
if ($zip->open($zipPath, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== true) {
|
||||||
|
throw new RuntimeException(sprintf('Unable to open archive at %s', $zipPath));
|
||||||
|
}
|
||||||
|
|
||||||
|
$zip->addEmptyDir($zipPrefix);
|
||||||
|
|
||||||
|
$iterator = new RecursiveIteratorIterator($filtered, RecursiveIteratorIterator::SELF_FIRST);
|
||||||
|
/** @var SplFileInfo $fileInfo */
|
||||||
|
foreach ($iterator as $fileInfo) {
|
||||||
|
$fullPath = $fileInfo->getPathname();
|
||||||
|
$relative = ltrim(str_replace($root, '', $fullPath), DIRECTORY_SEPARATOR);
|
||||||
|
$relative = str_replace('\\', '/', $relative);
|
||||||
|
$targetPath = $zipPrefix . $relative;
|
||||||
|
|
||||||
|
if ($fileInfo->isDir()) {
|
||||||
|
$zip->addEmptyDir(rtrim($targetPath, '/') . '/');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($fileInfo->isLink()) {
|
||||||
|
$target = readlink($fullPath);
|
||||||
|
$zip->addFromString($targetPath, $target === false ? '' : $target);
|
||||||
|
$zip->setExternalAttributesName($targetPath, ZipArchive::OPSYS_UNIX, 0120000 << 16);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$zip->addFile($fullPath, $targetPath);
|
||||||
|
|
||||||
|
$perms = @fileperms($fullPath);
|
||||||
|
if ($perms !== false) {
|
||||||
|
$zip->setExternalAttributesName($targetPath, ZipArchive::OPSYS_UNIX, ($perms & 0xFFFF) << 16);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$zip->close();
|
||||||
|
|
||||||
|
$size = filesize($zipPath);
|
||||||
|
$sha256 = hash_file('sha256', $zipPath);
|
||||||
|
$timestamp = date('c');
|
||||||
|
$downloadUrl = rtrim($baseUrl, '/') . '/' . rawurlencode($downloadName);
|
||||||
|
|
||||||
|
$manifest = [
|
||||||
|
'version' => $version,
|
||||||
|
'date' => $timestamp,
|
||||||
|
'min_php' => '8.3.0',
|
||||||
|
'assets' => [
|
||||||
|
'grav-update' => [
|
||||||
|
'name' => $downloadName,
|
||||||
|
'slug' => 'grav-update',
|
||||||
|
'version' => $version,
|
||||||
|
'date' => $timestamp,
|
||||||
|
'testing' => false,
|
||||||
|
'description' => 'Local test update package generated for safe-upgrade validation.',
|
||||||
|
'download' => $downloadUrl,
|
||||||
|
'size' => $size,
|
||||||
|
'checksum' => 'sha256:' . $sha256,
|
||||||
|
'sha256' => $sha256,
|
||||||
|
'host' => parse_url($downloadUrl, PHP_URL_HOST),
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'changelog' => [
|
||||||
|
$version => [
|
||||||
|
'date' => $timestamp,
|
||||||
|
'content' => "- Local test update package generated by build-test-update.\n",
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
file_put_contents($jsonPath, json_encode($manifest, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . PHP_EOL);
|
||||||
|
|
||||||
|
$manifestUrl = rtrim($baseUrl, '/') . '/grav.json';
|
||||||
|
|
||||||
|
echo "Update package created at: {$zipPath}\n";
|
||||||
|
echo "Manifest written to: {$jsonPath}\n";
|
||||||
|
echo "Manifest URL: {$manifestUrl}\n";
|
||||||
|
echo "Download URL: {$downloadUrl}\n";
|
||||||
|
echo "Archive size: {$size} bytes\n";
|
||||||
|
echo "SHA256: {$sha256}\n";
|
||||||
|
|
||||||
|
if ($serve) {
|
||||||
|
$host = parse_url($baseUrl, PHP_URL_HOST) ?: '127.0.0.1';
|
||||||
|
$port = parse_url($baseUrl, PHP_URL_PORT) ?: $defaultPort;
|
||||||
|
$command = sprintf('php -S %s:%d -t %s', $host, $port, escapeshellarg($output));
|
||||||
|
echo "\nServing files using PHP built-in server. Press Ctrl+C to stop.\n";
|
||||||
|
echo $command . "\n\n";
|
||||||
|
passthru($command);
|
||||||
|
}
|
||||||
Binary file not shown.
50
bin/gpm
50
bin/gpm
@@ -1,9 +1,14 @@
|
|||||||
#!/usr/bin/env php
|
#!/usr/bin/env php
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @copyright Copyright (c) 2015 - 2025 Trilby Media, LLC. All rights reserved.
|
||||||
|
* @license MIT License; see LICENSE file for details.
|
||||||
|
*/
|
||||||
|
|
||||||
use Grav\Common\Composer;
|
use Grav\Common\Composer;
|
||||||
use Symfony\Component\Console\Application;
|
|
||||||
use Grav\Common\Grav;
|
use Grav\Common\Grav;
|
||||||
|
use Grav\Console\Application\GpmApplication;
|
||||||
|
|
||||||
\define('GRAV_CLI', true);
|
\define('GRAV_CLI', true);
|
||||||
\define('GRAV_REQUEST_TIME', microtime(true));
|
\define('GRAV_REQUEST_TIME', microtime(true));
|
||||||
@@ -20,13 +25,12 @@ if (!file_exists(__DIR__ . '/../vendor/autoload.php')){
|
|||||||
|
|
||||||
$autoload = require __DIR__ . '/../vendor/autoload.php';
|
$autoload = require __DIR__ . '/../vendor/autoload.php';
|
||||||
|
|
||||||
if (version_compare($ver = PHP_VERSION, $req = GRAV_PHP_MIN, '<')) {
|
// Set timezone to default, falls back to system if php.ini not set
|
||||||
exit(sprintf("You are running PHP %s, but Grav needs at least PHP %s to run.\n", $ver, $req));
|
date_default_timezone_set(@date_default_timezone_get());
|
||||||
}
|
|
||||||
|
|
||||||
if (!ini_get('date.timezone')) {
|
// Set internal encoding.
|
||||||
date_default_timezone_set('UTC');
|
@ini_set('default_charset', 'UTF-8');
|
||||||
}
|
mb_internal_encoding('UTF-8');
|
||||||
|
|
||||||
if (!file_exists(GRAV_ROOT . '/index.php')) {
|
if (!file_exists(GRAV_ROOT . '/index.php')) {
|
||||||
exit('FATAL: Must be run from ROOT directory of Grav!');
|
exit('FATAL: Must be run from ROOT directory of Grav!');
|
||||||
@@ -36,37 +40,7 @@ if (!function_exists('curl_version')) {
|
|||||||
exit('FATAL: GPM requires PHP Curl module to be installed');
|
exit('FATAL: GPM requires PHP Curl module to be installed');
|
||||||
}
|
}
|
||||||
|
|
||||||
$climate = new League\CLImate\CLImate;
|
|
||||||
$climate->arguments->add([
|
|
||||||
'environment' => [
|
|
||||||
'prefix' => 'e',
|
|
||||||
'longPrefix' => 'env',
|
|
||||||
'description' => 'Configuration Environment',
|
|
||||||
'defaultValue' => 'localhost'
|
|
||||||
]
|
|
||||||
]);
|
|
||||||
$climate->arguments->parse();
|
|
||||||
|
|
||||||
// Set up environment based on params.
|
|
||||||
$environment = $climate->arguments->get('environment');
|
|
||||||
|
|
||||||
$grav = Grav::instance(array('loader' => $autoload));
|
$grav = Grav::instance(array('loader' => $autoload));
|
||||||
$grav->setup($environment);
|
|
||||||
|
|
||||||
$grav['config']->init();
|
|
||||||
$grav['uri']->init();
|
|
||||||
$grav['users'];
|
|
||||||
|
|
||||||
$app = new Application('Grav Package Manager', GRAV_VERSION);
|
|
||||||
$app->addCommands(array(
|
|
||||||
new \Grav\Console\Gpm\IndexCommand(),
|
|
||||||
new \Grav\Console\Gpm\VersionCommand(),
|
|
||||||
new \Grav\Console\Gpm\InfoCommand(),
|
|
||||||
new \Grav\Console\Gpm\InstallCommand(),
|
|
||||||
new \Grav\Console\Gpm\UninstallCommand(),
|
|
||||||
new \Grav\Console\Gpm\UpdateCommand(),
|
|
||||||
new \Grav\Console\Gpm\SelfupgradeCommand(),
|
|
||||||
new \Grav\Console\Gpm\DirectInstallCommand(),
|
|
||||||
));
|
|
||||||
|
|
||||||
|
$app = new GpmApplication('Grav Package Manager', GRAV_VERSION);
|
||||||
$app->run();
|
$app->run();
|
||||||
|
|||||||
51
bin/grav
51
bin/grav
@@ -1,10 +1,14 @@
|
|||||||
#!/usr/bin/env php
|
#!/usr/bin/env php
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @copyright Copyright (c) 2015 - 2025 Trilby Media, LLC. All rights reserved.
|
||||||
|
* @license MIT License; see LICENSE file for details.
|
||||||
|
*/
|
||||||
|
|
||||||
use Grav\Common\Composer;
|
use Grav\Common\Composer;
|
||||||
use Grav\Common\Grav;
|
use Grav\Common\Grav;
|
||||||
use Grav\Console\Cli;
|
use Grav\Console\Application\GravApplication;
|
||||||
use Symfony\Component\Console\Application;
|
|
||||||
|
|
||||||
\define('GRAV_CLI', true);
|
\define('GRAV_CLI', true);
|
||||||
\define('GRAV_REQUEST_TIME', microtime(true));
|
\define('GRAV_REQUEST_TIME', microtime(true));
|
||||||
@@ -21,49 +25,18 @@ if (!file_exists(__DIR__ . '/../vendor/autoload.php')){
|
|||||||
|
|
||||||
$autoload = require __DIR__ . '/../vendor/autoload.php';
|
$autoload = require __DIR__ . '/../vendor/autoload.php';
|
||||||
|
|
||||||
if (version_compare($ver = PHP_VERSION, $req = GRAV_PHP_MIN, '<')) {
|
// Set timezone to default, falls back to system if php.ini not set
|
||||||
exit(sprintf("You are running PHP %s, but Grav needs at least PHP %s to run.\n", $ver, $req));
|
date_default_timezone_set(@date_default_timezone_get());
|
||||||
}
|
|
||||||
|
|
||||||
$climate = new League\CLImate\CLImate;
|
// Set internal encoding.
|
||||||
$climate->arguments->add([
|
@ini_set('default_charset', 'UTF-8');
|
||||||
'environment' => [
|
mb_internal_encoding('UTF-8');
|
||||||
'prefix' => 'e',
|
|
||||||
'longPrefix' => 'env',
|
|
||||||
'description' => 'Configuration Environment',
|
|
||||||
'defaultValue' => 'localhost'
|
|
||||||
]
|
|
||||||
]);
|
|
||||||
$climate->arguments->parse();
|
|
||||||
|
|
||||||
// Set up environment based on params.
|
|
||||||
$environment = $climate->arguments->get('environment');
|
|
||||||
|
|
||||||
$grav = Grav::instance(array('loader' => $autoload));
|
$grav = Grav::instance(array('loader' => $autoload));
|
||||||
$grav->setup($environment);
|
|
||||||
|
|
||||||
if (!ini_get('date.timezone')) {
|
|
||||||
date_default_timezone_set('UTC');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!file_exists(GRAV_ROOT . '/index.php')) {
|
if (!file_exists(GRAV_ROOT . '/index.php')) {
|
||||||
exit('FATAL: Must be run from ROOT directory of Grav!');
|
exit('FATAL: Must be run from ROOT directory of Grav!');
|
||||||
}
|
}
|
||||||
|
|
||||||
$app = new Application('Grav CLI Application', GRAV_VERSION);
|
$app = new GravApplication('Grav CLI Application', GRAV_VERSION);
|
||||||
$app->addCommands(array(
|
|
||||||
new Cli\InstallCommand(),
|
|
||||||
new Cli\ComposerCommand(),
|
|
||||||
new Cli\SandboxCommand(),
|
|
||||||
new Cli\CleanCommand(),
|
|
||||||
new Cli\ClearCacheCommand(),
|
|
||||||
new Cli\BackupCommand(),
|
|
||||||
new Cli\NewProjectCommand(),
|
|
||||||
new Cli\SchedulerCommand(),
|
|
||||||
new Cli\SecurityCommand(),
|
|
||||||
new Cli\LogViewerCommand(),
|
|
||||||
new Cli\YamlLinterCommand(),
|
|
||||||
new Cli\ServerCommand(),
|
|
||||||
new Cli\PageSystemValidatorCommand(),
|
|
||||||
));
|
|
||||||
$app->run();
|
$app->run();
|
||||||
|
|||||||
135
bin/plugin
135
bin/plugin
@@ -1,13 +1,14 @@
|
|||||||
#!/usr/bin/env php
|
#!/usr/bin/env php
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @copyright Copyright (c) 2015 - 2025 Trilby Media, LLC. All rights reserved.
|
||||||
|
* @license MIT License; see LICENSE file for details.
|
||||||
|
*/
|
||||||
|
|
||||||
use Grav\Common\Composer;
|
use Grav\Common\Composer;
|
||||||
use Symfony\Component\Console\Application;
|
|
||||||
use Symfony\Component\Console\Input\ArgvInput;
|
|
||||||
use Symfony\Component\Console\Output\ConsoleOutput;
|
|
||||||
use Symfony\Component\Console\Formatter\OutputFormatterStyle;
|
|
||||||
use Grav\Common\Grav;
|
use Grav\Common\Grav;
|
||||||
use Grav\Common\Filesystem\Folder;
|
use Grav\Console\Application\PluginApplication;
|
||||||
|
|
||||||
\define('GRAV_CLI', true);
|
\define('GRAV_CLI', true);
|
||||||
\define('GRAV_REQUEST_TIME', microtime(true));
|
\define('GRAV_REQUEST_TIME', microtime(true));
|
||||||
@@ -24,127 +25,19 @@ if (!file_exists(__DIR__ . '/../vendor/autoload.php')){
|
|||||||
|
|
||||||
$autoload = require __DIR__ . '/../vendor/autoload.php';
|
$autoload = require __DIR__ . '/../vendor/autoload.php';
|
||||||
|
|
||||||
if (version_compare($ver = PHP_VERSION, $req = GRAV_PHP_MIN, '<')) {
|
// Set timezone to default, falls back to system if php.ini not set
|
||||||
exit(sprintf("You are running PHP %s, but Grav needs at least PHP %s to run.\n", $ver, $req));
|
date_default_timezone_set(@date_default_timezone_get());
|
||||||
}
|
|
||||||
|
|
||||||
if (!ini_get('date.timezone')) {
|
// Set internal encoding.
|
||||||
date_default_timezone_set('UTC');
|
@ini_set('default_charset', 'UTF-8');
|
||||||
}
|
mb_internal_encoding('UTF-8');
|
||||||
|
|
||||||
if (!file_exists(GRAV_ROOT . '/index.php')) {
|
if (!file_exists(GRAV_ROOT . '/index.php')) {
|
||||||
exit('FATAL: Must be run from ROOT directory of Grav!');
|
exit('FATAL: Must be run from ROOT directory of Grav!');
|
||||||
}
|
}
|
||||||
|
|
||||||
$climate = new League\CLImate\CLImate;
|
// Bootstrap Grav container.
|
||||||
$climate->arguments->add([
|
|
||||||
'environment' => [
|
|
||||||
'prefix' => 'e',
|
|
||||||
'longPrefix' => 'env',
|
|
||||||
'description' => 'Configuration Environment',
|
|
||||||
'defaultValue' => 'localhost'
|
|
||||||
]
|
|
||||||
]);
|
|
||||||
$climate->arguments->parse();
|
|
||||||
|
|
||||||
$environment = $climate->arguments->get('environment');
|
|
||||||
|
|
||||||
$grav = Grav::instance(array('loader' => $autoload));
|
$grav = Grav::instance(array('loader' => $autoload));
|
||||||
$grav->setup($environment);
|
|
||||||
|
|
||||||
$grav['config']->init();
|
$app = new PluginApplication('Grav Plugins Commands', GRAV_VERSION);
|
||||||
$grav['uri']->init();
|
$app->run();
|
||||||
$grav['users'];
|
|
||||||
$grav['plugins']->init();
|
|
||||||
$grav['themes']->init();
|
|
||||||
|
|
||||||
$app = new Application('Grav Plugins Commands', GRAV_VERSION);
|
|
||||||
$pattern = '([A-Z]\w+Command\.php)';
|
|
||||||
|
|
||||||
// get arguments and strip the application name
|
|
||||||
if (null === $argv) {
|
|
||||||
$argv = $_SERVER['argv'];
|
|
||||||
}
|
|
||||||
|
|
||||||
$bin = array_shift($argv);
|
|
||||||
$name = array_shift($argv);
|
|
||||||
$argv = array_merge([$bin], $argv);
|
|
||||||
|
|
||||||
$input = new ArgvInput($argv);
|
|
||||||
|
|
||||||
/** @var \Grav\Common\Data\Data $plugin */
|
|
||||||
$plugin = $grav['plugins']->get($name);
|
|
||||||
|
|
||||||
$output = new ConsoleOutput();
|
|
||||||
$output->getFormatter()->setStyle('red', new OutputFormatterStyle('red', null, array('bold')));
|
|
||||||
$output->getFormatter()->setStyle('white', new OutputFormatterStyle('white', null, array('bold')));
|
|
||||||
|
|
||||||
if (!$name) {
|
|
||||||
$output->writeln('');
|
|
||||||
$output->writeln('<red>Usage:</red>');
|
|
||||||
$output->writeln(" {$bin} [slug] [command] [arguments]");
|
|
||||||
$output->writeln('');
|
|
||||||
$output->writeln('<red>Example:</red>');
|
|
||||||
$output->writeln(" {$bin} error log -l 1 --trace");
|
|
||||||
$list = Folder::all('plugins://', ['compare' => 'Pathname', 'pattern' => '/\/cli\/' . $pattern . '$/usm', 'levels' => 2]);
|
|
||||||
|
|
||||||
$total = 0;
|
|
||||||
if (count($list)) {
|
|
||||||
$available = [];
|
|
||||||
$output->writeln('');
|
|
||||||
$output->writeln('<red>Plugins with CLI available:</red>');
|
|
||||||
foreach ($list as $index => $entry) {
|
|
||||||
$split = explode('/', $entry);
|
|
||||||
$entry = array_shift($split);
|
|
||||||
$index = str_pad($index++ + 1, 2, '0', STR_PAD_LEFT);
|
|
||||||
$total = str_pad($total++ + 1, 2, '0', STR_PAD_LEFT);
|
|
||||||
if (\in_array($entry, $available, true)) {
|
|
||||||
$total--;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$available[] = $entry;
|
|
||||||
$commands_count = $index - $total + 1;
|
|
||||||
$output->writeln(' ' . $total . '. <red>' . str_pad($entry, 15) . "</red> <white>{$bin} {$entry} list</white>");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
exit;
|
|
||||||
} else {
|
|
||||||
if (is_null($plugin)) {
|
|
||||||
$output->writeln('');
|
|
||||||
$output->writeln("<red>$name plugin not found</red>");
|
|
||||||
die;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$plugin->enabled) {
|
|
||||||
$output->writeln('');
|
|
||||||
$output->writeln("<red>$name not enabled</red>");
|
|
||||||
die;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($plugin === null) {
|
|
||||||
$output->writeln("<red>Grav Plugin <white>'{$name}'</white> is not installed</red>");
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
$path = 'plugins://' . $name . '/cli';
|
|
||||||
|
|
||||||
try {
|
|
||||||
$commands = Folder::all($path, ['compare' => 'Filename', 'pattern' => '/' . $pattern . '$/usm', 'levels' => 1]);
|
|
||||||
} catch (\RuntimeException $e) {
|
|
||||||
$output->writeln("<red>No Console Commands for <white>'{$name}'</white> where found in <white>'{$path}'</white></red>");
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($commands as $command_path) {
|
|
||||||
$full_path = $grav['locator']->findResource("plugins://{$name}/cli/{$command_path}");
|
|
||||||
require_once $full_path;
|
|
||||||
|
|
||||||
$command_class = 'Grav\Plugin\Console\\' . preg_replace('/.php$/', '', $command_path);
|
|
||||||
$command = new $command_class();
|
|
||||||
$app->add($command);
|
|
||||||
}
|
|
||||||
|
|
||||||
$app->run($input);
|
|
||||||
|
|||||||
634
bin/restore
Executable file
634
bin/restore
Executable file
@@ -0,0 +1,634 @@
|
|||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Grav Snapshot Restore Utility
|
||||||
|
*
|
||||||
|
* Lightweight CLI that can list and apply safe-upgrade snapshots without
|
||||||
|
* bootstrapping the full Grav application (or any plugins).
|
||||||
|
*/
|
||||||
|
|
||||||
|
$root = dirname(__DIR__);
|
||||||
|
|
||||||
|
define('GRAV_CLI', true);
|
||||||
|
define('GRAV_REQUEST_TIME', microtime(true));
|
||||||
|
|
||||||
|
if (!file_exists($root . '/vendor/autoload.php')) {
|
||||||
|
fwrite(STDERR, "Unable to locate vendor/autoload.php. Run composer install first.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$autoload = require $root . '/vendor/autoload.php';
|
||||||
|
|
||||||
|
if (!file_exists($root . '/index.php')) {
|
||||||
|
fwrite(STDERR, "FATAL: Must be run from Grav root directory.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
use Grav\Common\Filesystem\Folder;
|
||||||
|
use Grav\Common\Recovery\RecoveryManager;
|
||||||
|
use Grav\Common\Upgrade\SafeUpgradeService;
|
||||||
|
use Symfony\Component\Yaml\Yaml;
|
||||||
|
|
||||||
|
const RESTORE_USAGE = <<<USAGE
|
||||||
|
Grav Restore Utility
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
bin/restore list [--staging-root=/absolute/path]
|
||||||
|
Lists all available snapshots (most recent first).
|
||||||
|
|
||||||
|
bin/restore apply <snapshot-id> [--staging-root=/absolute/path]
|
||||||
|
Restores the specified snapshot created by safe-upgrade.
|
||||||
|
|
||||||
|
bin/restore remove [<snapshot-id> ...] [--staging-root=/absolute/path]
|
||||||
|
Deletes one or more snapshots (interactive selection when no id provided).
|
||||||
|
|
||||||
|
bin/restore snapshot [--label=\"optional description\"] [--staging-root=/absolute/path]
|
||||||
|
Creates a manual snapshot of the current Grav core files.
|
||||||
|
|
||||||
|
bin/restore recovery [status|clear]
|
||||||
|
Shows the recovery flag context or clears it.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
--staging-root Overrides the staging directory (defaults to configured value).
|
||||||
|
--label Optional label to store with the manual snapshot.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
bin/restore list
|
||||||
|
bin/restore apply stage-68eff31cc4104
|
||||||
|
bin/restore apply stage-68eff31cc4104 --staging-root=/var/grav-backups
|
||||||
|
bin/restore snapshot --label=\"Before plugin install\"
|
||||||
|
bin/restore recovery status
|
||||||
|
bin/restore recovery clear
|
||||||
|
USAGE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $args
|
||||||
|
* @return array{command:string,arguments:array,options:array}
|
||||||
|
*/
|
||||||
|
function parseArguments(array $args): array
|
||||||
|
{
|
||||||
|
array_shift($args); // remove script name
|
||||||
|
|
||||||
|
$command = null;
|
||||||
|
$arguments = [];
|
||||||
|
$options = [];
|
||||||
|
|
||||||
|
while ($args) {
|
||||||
|
$arg = array_shift($args);
|
||||||
|
if (strncmp($arg, '--', 2) === 0) {
|
||||||
|
$parts = explode('=', substr($arg, 2), 2);
|
||||||
|
$name = $parts[0] ?? '';
|
||||||
|
if ($name === '') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$value = $parts[1] ?? null;
|
||||||
|
if ($value === null && $args && substr($args[0], 0, 2) !== '--') {
|
||||||
|
$value = array_shift($args);
|
||||||
|
}
|
||||||
|
$options[$name] = $value ?? true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null === $command) {
|
||||||
|
$command = $arg;
|
||||||
|
} else {
|
||||||
|
$arguments[] = $arg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null === $command) {
|
||||||
|
$command = 'interactive';
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'command' => $command,
|
||||||
|
'arguments' => $arguments,
|
||||||
|
'options' => $options,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $options
|
||||||
|
* @return SafeUpgradeService
|
||||||
|
*/
|
||||||
|
function createUpgradeService(array $options): SafeUpgradeService
|
||||||
|
{
|
||||||
|
$serviceOptions = ['root' => GRAV_ROOT];
|
||||||
|
|
||||||
|
if (isset($options['staging-root']) && is_string($options['staging-root']) && $options['staging-root'] !== '') {
|
||||||
|
$serviceOptions['staging_root'] = $options['staging-root'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return new SafeUpgradeService($serviceOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return list<array{id:string,label:?string,source_version:?string,target_version:?string,created_at:int}>
|
||||||
|
*/
|
||||||
|
function loadSnapshots(): array
|
||||||
|
{
|
||||||
|
$manifestDir = GRAV_ROOT . '/user/data/upgrades';
|
||||||
|
if (!is_dir($manifestDir)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$files = glob($manifestDir . '/*.json') ?: [];
|
||||||
|
rsort($files);
|
||||||
|
|
||||||
|
$snapshots = [];
|
||||||
|
foreach ($files as $file) {
|
||||||
|
$decoded = json_decode(file_get_contents($file) ?: '', true);
|
||||||
|
if (!is_array($decoded) || empty($decoded['id'])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$snapshots[] = [
|
||||||
|
'id' => $decoded['id'],
|
||||||
|
'label' => $decoded['label'] ?? null,
|
||||||
|
'source_version' => $decoded['source_version'] ?? null,
|
||||||
|
'target_version' => $decoded['target_version'] ?? null,
|
||||||
|
'created_at' => (int)($decoded['created_at'] ?? 0),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $snapshots;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param list<array{id:string,label:?string,source_version:?string,target_version:?string,created_at:int}> $snapshots
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function formatSnapshotListLine(array $snapshot): string
|
||||||
|
{
|
||||||
|
$restoreVersion = $snapshot['source_version'] ?? $snapshot['target_version'] ?? 'unknown';
|
||||||
|
$timeLabel = formatSnapshotTimestamp($snapshot['created_at']);
|
||||||
|
$label = $snapshot['label'] ?? null;
|
||||||
|
$display = $label ? sprintf('%s [%s]', $label, $snapshot['id']) : $snapshot['id'];
|
||||||
|
|
||||||
|
return sprintf('%s (restore to Grav %s, %s)', $display, $restoreVersion, $timeLabel);
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatSnapshotTimestamp(int $timestamp): string
|
||||||
|
{
|
||||||
|
if ($timestamp <= 0) {
|
||||||
|
return 'time unknown';
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$timezone = resolveTimezone();
|
||||||
|
$dt = new DateTime('@' . $timestamp);
|
||||||
|
$dt->setTimezone($timezone);
|
||||||
|
$formatted = $dt->format('Y-m-d H:i:s T');
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
$formatted = date('Y-m-d H:i:s T', $timestamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $formatted . ' (' . formatRelative(time() - $timestamp) . ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveTimezone(): DateTimeZone
|
||||||
|
{
|
||||||
|
static $resolved = null;
|
||||||
|
if ($resolved instanceof DateTimeZone) {
|
||||||
|
return $resolved;
|
||||||
|
}
|
||||||
|
|
||||||
|
$timezone = null;
|
||||||
|
$configFile = GRAV_ROOT . '/user/config/system.yaml';
|
||||||
|
if (is_file($configFile)) {
|
||||||
|
try {
|
||||||
|
$data = Yaml::parse(file_get_contents($configFile) ?: '') ?: [];
|
||||||
|
if (!empty($data['system']['timezone']) && is_string($data['system']['timezone'])) {
|
||||||
|
$timezone = $data['system']['timezone'];
|
||||||
|
}
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
// ignore parse errors, fallback below
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$timezone) {
|
||||||
|
$timezone = ini_get('date.timezone') ?: 'UTC';
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$resolved = new DateTimeZone($timezone);
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
$resolved = new DateTimeZone('UTC');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $resolved;
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatRelative(int $seconds): string
|
||||||
|
{
|
||||||
|
if ($seconds < 5) {
|
||||||
|
return 'just now';
|
||||||
|
}
|
||||||
|
$negative = $seconds < 0;
|
||||||
|
$seconds = abs($seconds);
|
||||||
|
$units = [
|
||||||
|
31536000 => 'y',
|
||||||
|
2592000 => 'mo',
|
||||||
|
604800 => 'w',
|
||||||
|
86400 => 'd',
|
||||||
|
3600 => 'h',
|
||||||
|
60 => 'm',
|
||||||
|
1 => 's',
|
||||||
|
];
|
||||||
|
foreach ($units as $size => $label) {
|
||||||
|
if ($seconds >= $size) {
|
||||||
|
$value = (int)floor($seconds / $size);
|
||||||
|
$suffix = $label === 'mo' ? 'month' : ($label === 'y' ? 'year' : ($label === 'w' ? 'week' : ($label === 'd' ? 'day' : ($label === 'h' ? 'hour' : ($label === 'm' ? 'minute' : 'second')))));
|
||||||
|
if ($value !== 1) {
|
||||||
|
$suffix .= 's';
|
||||||
|
}
|
||||||
|
$phrase = $value . ' ' . $suffix;
|
||||||
|
return $negative ? 'in ' . $phrase : $phrase . ' ago';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $negative ? 'in 0 seconds' : '0 seconds ago';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $snapshotId
|
||||||
|
* @param array $options
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function applySnapshot(string $snapshotId, array $options): void
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$service = createUpgradeService($options);
|
||||||
|
$manifest = $service->rollback($snapshotId);
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
fwrite(STDERR, "Restore failed: " . $e->getMessage() . "\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$manifest) {
|
||||||
|
fwrite(STDERR, "Snapshot {$snapshotId} not found.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$version = $manifest['source_version'] ?? $manifest['target_version'] ?? 'unknown';
|
||||||
|
echo "Restored snapshot {$snapshotId} (Grav {$version}).\n";
|
||||||
|
if (!empty($manifest['id'])) {
|
||||||
|
echo "Snapshot manifest: {$manifest['id']}\n";
|
||||||
|
}
|
||||||
|
if (!empty($manifest['backup_path'])) {
|
||||||
|
echo "Snapshot path: {$manifest['backup_path']}\n";
|
||||||
|
}
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $options
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function createManualSnapshot(array $options): void
|
||||||
|
{
|
||||||
|
$label = null;
|
||||||
|
if (isset($options['label']) && is_string($options['label'])) {
|
||||||
|
$label = trim($options['label']);
|
||||||
|
if ($label === '') {
|
||||||
|
$label = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$service = createUpgradeService($options);
|
||||||
|
$manifest = $service->createSnapshot($label);
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
fwrite(STDERR, "Snapshot creation failed: " . $e->getMessage() . "\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$snapshotId = $manifest['id'] ?? null;
|
||||||
|
if (!$snapshotId) {
|
||||||
|
$snapshotId = 'unknown';
|
||||||
|
}
|
||||||
|
$version = $manifest['source_version'] ?? $manifest['target_version'] ?? 'unknown';
|
||||||
|
|
||||||
|
echo "Created snapshot {$snapshotId} (Grav {$version}).\n";
|
||||||
|
if ($label) {
|
||||||
|
echo "Label: {$label}\n";
|
||||||
|
}
|
||||||
|
if (!empty($manifest['backup_path'])) {
|
||||||
|
echo "Snapshot path: {$manifest['backup_path']}\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param list<array{id:string,source_version:?string,target_version:?string,created_at:int}> $snapshots
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
function promptSnapshotSelection(array $snapshots): ?string
|
||||||
|
{
|
||||||
|
echo "Available snapshots:\n";
|
||||||
|
foreach ($snapshots as $index => $snapshot) {
|
||||||
|
$line = formatSnapshotListLine($snapshot);
|
||||||
|
$number = $index + 1;
|
||||||
|
echo sprintf(" [%d] %s\n", $number, $line);
|
||||||
|
}
|
||||||
|
|
||||||
|
$default = $snapshots[0]['id'];
|
||||||
|
echo "\nSelect a snapshot to restore [1]: ";
|
||||||
|
$input = trim((string)fgets(STDIN));
|
||||||
|
|
||||||
|
if ($input === '') {
|
||||||
|
return $default;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ctype_digit($input)) {
|
||||||
|
$idx = (int)$input - 1;
|
||||||
|
if (isset($snapshots[$idx])) {
|
||||||
|
return $snapshots[$idx]['id'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($snapshots as $snapshot) {
|
||||||
|
if (strcasecmp($snapshot['id'], $input) === 0) {
|
||||||
|
return $snapshot['id'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "Invalid selection. Aborting.\n";
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param list<array{id:string,source_version:?string,target_version:?string,created_at:int}> $snapshots
|
||||||
|
* @return array<string>
|
||||||
|
*/
|
||||||
|
function promptSnapshotsRemoval(array $snapshots): array
|
||||||
|
{
|
||||||
|
echo "Available snapshots:\n";
|
||||||
|
foreach ($snapshots as $index => $snapshot) {
|
||||||
|
$line = formatSnapshotListLine($snapshot);
|
||||||
|
$number = $index + 1;
|
||||||
|
echo sprintf(" [%d] %s\n", $number, $line);
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "\nSelect snapshots to remove (comma or space separated numbers / ids, 'all' for everything, empty to cancel): ";
|
||||||
|
$input = trim((string)fgets(STDIN));
|
||||||
|
|
||||||
|
if ($input === '') {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$inputLower = strtolower($input);
|
||||||
|
if ($inputLower === 'all' || $inputLower === '*') {
|
||||||
|
return array_values(array_unique(array_column($snapshots, 'id')));
|
||||||
|
}
|
||||||
|
|
||||||
|
$tokens = preg_split('/[\\s,]+/', $input, -1, PREG_SPLIT_NO_EMPTY) ?: [];
|
||||||
|
$selected = [];
|
||||||
|
foreach ($tokens as $token) {
|
||||||
|
if (ctype_digit($token)) {
|
||||||
|
$idx = (int)$token - 1;
|
||||||
|
if (isset($snapshots[$idx])) {
|
||||||
|
$selected[] = $snapshots[$idx]['id'];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($snapshots as $snapshot) {
|
||||||
|
if (strcasecmp($snapshot['id'], $token) === 0) {
|
||||||
|
$selected[] = $snapshot['id'];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return array_values(array_unique(array_filter($selected)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $snapshotId
|
||||||
|
* @return array{success:bool,message:string}
|
||||||
|
*/
|
||||||
|
function removeSnapshot(string $snapshotId): array
|
||||||
|
{
|
||||||
|
$manifestDir = GRAV_ROOT . '/user/data/upgrades';
|
||||||
|
$manifestPath = $manifestDir . '/' . $snapshotId . '.json';
|
||||||
|
if (!is_file($manifestPath)) {
|
||||||
|
return [
|
||||||
|
'success' => false,
|
||||||
|
'message' => "Snapshot {$snapshotId} not found."
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$manifest = json_decode(file_get_contents($manifestPath) ?: '', true);
|
||||||
|
if (!is_array($manifest)) {
|
||||||
|
return [
|
||||||
|
'success' => false,
|
||||||
|
'message' => "Snapshot {$snapshotId} manifest is invalid."
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$pathsToDelete = [];
|
||||||
|
foreach (['package_path', 'backup_path'] as $key) {
|
||||||
|
if (!empty($manifest[$key]) && is_string($manifest[$key])) {
|
||||||
|
$pathsToDelete[] = $manifest[$key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$errors = [];
|
||||||
|
|
||||||
|
foreach ($pathsToDelete as $path) {
|
||||||
|
if (!$path) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!file_exists($path)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
if (is_dir($path)) {
|
||||||
|
Folder::delete($path);
|
||||||
|
} else {
|
||||||
|
@unlink($path);
|
||||||
|
}
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
$errors[] = "Unable to remove {$path}: " . $e->getMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!@unlink($manifestPath)) {
|
||||||
|
$errors[] = "Unable to delete manifest file {$manifestPath}.";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($errors) {
|
||||||
|
return [
|
||||||
|
'success' => false,
|
||||||
|
'message' => implode(' ', $errors)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'success' => true,
|
||||||
|
'message' => "Removed snapshot {$snapshotId}."
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$cli = parseArguments($argv);
|
||||||
|
$command = $cli['command'];
|
||||||
|
$arguments = $cli['arguments'];
|
||||||
|
$options = $cli['options'];
|
||||||
|
|
||||||
|
switch ($command) {
|
||||||
|
case 'interactive':
|
||||||
|
$snapshots = loadSnapshots();
|
||||||
|
if (!$snapshots) {
|
||||||
|
echo "No snapshots found. Run bin/gpm self-upgrade (with safe upgrade enabled) to create one.\n";
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
$selection = promptSnapshotSelection($snapshots);
|
||||||
|
if (!$selection) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
applySnapshot($selection, $options);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'list':
|
||||||
|
$snapshots = loadSnapshots();
|
||||||
|
if (!$snapshots) {
|
||||||
|
echo "No snapshots found. Run bin/gpm self-upgrade (with safe upgrade enabled) to create one.\n";
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "Available snapshots:\n";
|
||||||
|
foreach ($snapshots as $snapshot) {
|
||||||
|
echo ' - ' . formatSnapshotListLine($snapshot) . "\n";
|
||||||
|
}
|
||||||
|
exit(0);
|
||||||
|
|
||||||
|
case 'remove':
|
||||||
|
$snapshots = loadSnapshots();
|
||||||
|
if (!$snapshots) {
|
||||||
|
echo "No snapshots found. Nothing to remove.\n";
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
$selectedIds = [];
|
||||||
|
if ($arguments) {
|
||||||
|
foreach ($arguments as $arg) {
|
||||||
|
if (!$arg) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$selectedIds[] = $arg;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$selectedIds = promptSnapshotsRemoval($snapshots);
|
||||||
|
if (!$selectedIds) {
|
||||||
|
echo "No snapshots selected. Aborting.\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$selectedIds = array_values(array_unique($selectedIds));
|
||||||
|
echo "Snapshots selected for removal:\n";
|
||||||
|
foreach ($selectedIds as $id) {
|
||||||
|
echo " - {$id}\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$autoConfirm = isset($options['yes']) || isset($options['y']);
|
||||||
|
if (!$autoConfirm) {
|
||||||
|
echo "\nThis action cannot be undone. Proceed? [y/N] ";
|
||||||
|
$confirmation = strtolower(trim((string)fgets(STDIN)));
|
||||||
|
if (!in_array($confirmation, ['y', 'yes'], true)) {
|
||||||
|
echo "Aborted.\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$success = 0;
|
||||||
|
foreach ($selectedIds as $id) {
|
||||||
|
$result = removeSnapshot($id);
|
||||||
|
echo $result['message'] . "\n";
|
||||||
|
if ($result['success']) {
|
||||||
|
$success++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exit($success > 0 ? 0 : 1);
|
||||||
|
|
||||||
|
case 'apply':
|
||||||
|
$snapshotId = $arguments[0] ?? null;
|
||||||
|
if (!$snapshotId) {
|
||||||
|
echo "Missing snapshot id.\n\n" . RESTORE_USAGE . "\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
applySnapshot($snapshotId, $options);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'snapshot':
|
||||||
|
createManualSnapshot($options);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'recovery':
|
||||||
|
$action = strtolower($arguments[0] ?? 'status');
|
||||||
|
$manager = new RecoveryManager(GRAV_ROOT);
|
||||||
|
|
||||||
|
switch ($action) {
|
||||||
|
case 'clear':
|
||||||
|
if ($manager->isActive()) {
|
||||||
|
$manager->clear();
|
||||||
|
echo "Recovery flag cleared.\n";
|
||||||
|
} else {
|
||||||
|
echo "Recovery mode is not active.\n";
|
||||||
|
}
|
||||||
|
exit(0);
|
||||||
|
|
||||||
|
case 'status':
|
||||||
|
if (!$manager->isActive()) {
|
||||||
|
echo "Recovery mode is not active.\n";
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
$context = $manager->getContext();
|
||||||
|
if (!$context) {
|
||||||
|
echo "Recovery flag present but context could not be parsed.\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$created = isset($context['created_at']) ? date('c', (int)$context['created_at']) : 'unknown';
|
||||||
|
$token = $context['token'] ?? '(missing)';
|
||||||
|
$message = $context['message'] ?? '(no message)';
|
||||||
|
$plugin = $context['plugin'] ?? '(none detected)';
|
||||||
|
$file = $context['file'] ?? '(unknown file)';
|
||||||
|
$line = $context['line'] ?? '(unknown line)';
|
||||||
|
|
||||||
|
echo "Recovery flag context:\n";
|
||||||
|
echo " Token: {$token}\n";
|
||||||
|
echo " Message: {$message}\n";
|
||||||
|
echo " Plugin: {$plugin}\n";
|
||||||
|
echo " File: {$file}\n";
|
||||||
|
echo " Line: {$line}\n";
|
||||||
|
echo " Created: {$created}\n";
|
||||||
|
|
||||||
|
$window = $manager->getUpgradeWindow();
|
||||||
|
if ($window) {
|
||||||
|
$expires = isset($window['expires_at']) ? date('c', (int)$window['expires_at']) : 'unknown';
|
||||||
|
$reason = $window['reason'] ?? '(unknown)';
|
||||||
|
echo " Window: active ({$reason}, expires {$expires})\n";
|
||||||
|
} else {
|
||||||
|
echo " Window: inactive\n";
|
||||||
|
}
|
||||||
|
exit(0);
|
||||||
|
|
||||||
|
default:
|
||||||
|
echo "Unknown recovery action: {$action}\n\n" . RESTORE_USAGE . "\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'help':
|
||||||
|
default:
|
||||||
|
echo RESTORE_USAGE . "\n";
|
||||||
|
exit($command === 'help' ? 0 : 1);
|
||||||
|
}
|
||||||
1
cache/.gitkeep
vendored
1
cache/.gitkeep
vendored
@@ -0,0 +1 @@
|
|||||||
|
/* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. */
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
actor: Tester
|
actor: Tester
|
||||||
|
bootstrap: _bootstrap.php
|
||||||
paths:
|
paths:
|
||||||
tests: tests
|
tests: tests
|
||||||
log: tests/_output
|
log: tests/_output
|
||||||
@@ -6,7 +7,6 @@ paths:
|
|||||||
support: tests/_support
|
support: tests/_support
|
||||||
envs: tests/_envs
|
envs: tests/_envs
|
||||||
settings:
|
settings:
|
||||||
bootstrap: _bootstrap.php
|
|
||||||
colors: true
|
colors: true
|
||||||
memory_limit: 1024M
|
memory_limit: 1024M
|
||||||
extensions:
|
extensions:
|
||||||
|
|||||||
137
composer.json
137
composer.json
@@ -12,102 +12,117 @@
|
|||||||
"homepage": "https://getgrav.org",
|
"homepage": "https://getgrav.org",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.1.3",
|
"php": "^7.3.6 || ^8.0",
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"ext-mbstring": "*",
|
|
||||||
"ext-openssl": "*",
|
"ext-openssl": "*",
|
||||||
"ext-curl": "*",
|
"ext-curl": "*",
|
||||||
"ext-zip": "*",
|
"ext-zip": "*",
|
||||||
"ext-dom": "*",
|
"ext-dom": "*",
|
||||||
"symfony/polyfill-iconv": "^1.9",
|
"ext-libxml": "*",
|
||||||
"symfony/polyfill-php72": "^1.9",
|
"ext-gd": "*",
|
||||||
"symfony/polyfill-php73": "^1.9",
|
"symfony/polyfill-mbstring": "~1.23",
|
||||||
|
"symfony/polyfill-iconv": "^1.23",
|
||||||
|
"symfony/polyfill-php74": "^1.23",
|
||||||
|
"symfony/polyfill-php80": "^1.23",
|
||||||
|
"symfony/polyfill-php81": "^1.23",
|
||||||
"psr/simple-cache": "^1.0",
|
"psr/simple-cache": "^1.0",
|
||||||
|
"psr/cache": "^1.0",
|
||||||
"psr/http-message": "^1.0",
|
"psr/http-message": "^1.0",
|
||||||
"psr/http-server-middleware": "^1.0",
|
"psr/http-server-middleware": "^1.0",
|
||||||
"kodus/psr7-server": "*",
|
"psr/container": "~1.1.0",
|
||||||
"nyholm/psr7": "^1.0",
|
"nyholm/psr7-server": "^1.0",
|
||||||
"twig/twig": "~1.0",
|
"nyholm/psr7": "^1.3",
|
||||||
"erusev/parsedown": "1.6.4",
|
"twig/twig": "~v1.44",
|
||||||
"erusev/parsedown-extra": "~0.7",
|
"erusev/parsedown": "^1.7",
|
||||||
"symfony/contracts": "~1.0",
|
"erusev/parsedown-extra": "~0.8",
|
||||||
"symfony/yaml": "~4.3.0",
|
"symfony/contracts": "~1.1",
|
||||||
"symfony/console": "~4.3.0",
|
"symfony/yaml": "~4.4",
|
||||||
"symfony/event-dispatcher": "~4.3.0",
|
"symfony/console": "~4.4",
|
||||||
"symfony/var-dumper": "~4.3.0",
|
"symfony/event-dispatcher": "~4.4",
|
||||||
"symfony/process": "~4.3.0",
|
"symfony/var-dumper": "~4.4",
|
||||||
"doctrine/cache": "^1.8",
|
"symfony/process": "~4.4",
|
||||||
"doctrine/collections": "^1.5",
|
"doctrine/cache": "^1.10",
|
||||||
"guzzlehttp/psr7": "^1.4",
|
"doctrine/collections": "^1.6",
|
||||||
"filp/whoops": "~2.2",
|
"guzzlehttp/psr7": "^1.7",
|
||||||
|
"filp/whoops": "~2.9",
|
||||||
"matthiasmullie/minify": "^1.3",
|
"matthiasmullie/minify": "^1.3",
|
||||||
"monolog/monolog": "~1.0",
|
"monolog/monolog": "~1.25",
|
||||||
"gregwar/image": "2.*",
|
"getgrav/image": "^4.0",
|
||||||
"donatj/phpuseragentparser": "~0.10",
|
"getgrav/cache": "^2.0",
|
||||||
"pimple/pimple": "~3.2",
|
"donatj/phpuseragentparser": "~1.1",
|
||||||
"rockettheme/toolbox": "~1.4",
|
"pimple/pimple": "~3.5.0",
|
||||||
"maximebf/debugbar": "~1.0",
|
"rockettheme/toolbox": "~1.5",
|
||||||
"league/climate": "^3.4",
|
"maximebf/debugbar": "~1.16",
|
||||||
"antoligy/dom-string-iterators": "^1.0",
|
"league/climate": "^3.6",
|
||||||
"miljar/php-exif": "^0.6.4",
|
"miljar/php-exif": "^0.6",
|
||||||
"composer/ca-bundle": "^1.0",
|
"composer/ca-bundle": "^1.2",
|
||||||
"dragonmantank/cron-expression": "^1.2",
|
"dragonmantank/cron-expression": "~3.3.0",
|
||||||
"phive/twig-extensions-deferred": "^1.0",
|
"symfony/deprecation-contracts": "^2.2",
|
||||||
"willdurand/negotiation": "^2.3",
|
"willdurand/negotiation": "^3.0",
|
||||||
"itsgoingd/clockwork": "~4.0",
|
"itsgoingd/clockwork": "^5.0",
|
||||||
"enshrined/svg-sanitize": "^0.10.0"
|
"symfony/http-client": "^4.4",
|
||||||
|
"composer/semver": "^1.4",
|
||||||
|
"rhukster/dom-sanitizer": "^1.0",
|
||||||
|
"multiavatar/multiavatar-php": "^1.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"codeception/codeception": "^2.4",
|
"behat/gherkin": "~4.10.0",
|
||||||
"phpstan/phpstan": "^0.11",
|
"codeception/codeception": "^4.1",
|
||||||
"phpstan/phpstan-deprecation-rules": "^0.11.0",
|
"phpstan/phpstan": "^1.8",
|
||||||
"phpunit/php-code-coverage": "~6.0",
|
"phpstan/phpstan-deprecation-rules": "^1.0",
|
||||||
"fzaninotto/faker": "^1.8",
|
"phpunit/php-code-coverage": "~9.2",
|
||||||
"victorjonsson/markdowndocs": "dev-master"
|
"getgrav/markdowndocs": "^2.0",
|
||||||
|
"codeception/module-asserts": "^1.3",
|
||||||
|
"codeception/module-phpbrowser": "^1.0",
|
||||||
|
"doctrine/instantiator": "^1.4"
|
||||||
|
},
|
||||||
|
"replace": {
|
||||||
|
"symfony/polyfill-php72": "*",
|
||||||
|
"symfony/polyfill-php73": "*"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
|
"ext-mbstring": "Recommended for better performance",
|
||||||
|
"ext-iconv": "Recommended for better performance",
|
||||||
"ext-zend-opcache": "Recommended for better performance",
|
"ext-zend-opcache": "Recommended for better performance",
|
||||||
"ext-intl": "Recommended for multi-language sites",
|
"ext-intl": "Recommended for multi-language sites",
|
||||||
"ext-memcache": "Needed to support Memcache servers",
|
"ext-memcache": "Needed to support Memcache servers",
|
||||||
"ext-memcached": "Needed to support Memcached servers",
|
"ext-memcached": "Needed to support Memcached servers",
|
||||||
"ext-redis": "Needed to support Redis servers"
|
"ext-redis": "Needed to support Redis servers",
|
||||||
|
"ext-exif": "Needed to use exif data from images."
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"apcu-autoloader": true,
|
"apcu-autoloader": true,
|
||||||
"platform": {
|
"audit": {
|
||||||
"php": "7.1.3"
|
"block-insecure": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"repositories": [
|
|
||||||
{
|
|
||||||
"type": "vcs",
|
|
||||||
"url": "https://github.com/trilbymedia/PHP-Markdown-Documentation-Generator"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "vcs",
|
|
||||||
"url": "https://github.com/itsgoingd/clockwork"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"Grav\\": "system/src/Grav"
|
"Grav\\": "system/src/Grav",
|
||||||
|
"Twig\\": "system/src/Twig"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"system/defines.php"
|
"system/defines.php",
|
||||||
|
"system/src/DOMLettersIterator.php",
|
||||||
|
"system/src/DOMWordsIterator.php"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"autoload-dev": {
|
||||||
|
"psr-4": {
|
||||||
|
"PHPStan\\": "tests/phpstan/classes"
|
||||||
|
}
|
||||||
|
},
|
||||||
"archive": {
|
"archive": {
|
||||||
"exclude": [
|
"exclude": [
|
||||||
"VERSION"
|
"VERSION"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"api-16": "vendor/bin/phpdoc-md generate system/src > user/pages/14.api/default.16.md",
|
"api-17": "vendor/bin/phpdoc-md generate system/src > user/pages/14.api/default.17.md",
|
||||||
"api-15": "vendor/bin/phpdoc-md generate system/src > user/pages/14.api/default.md",
|
|
||||||
"post-create-project-cmd": "bin/grav install",
|
"post-create-project-cmd": "bin/grav install",
|
||||||
"phpstan": "vendor/bin/phpstan analyse -l 2 -c ./tests/phpstan/phpstan.neon system/src --memory-limit=300M",
|
"phpstan": "vendor/bin/phpstan analyse -l 2 -c ./tests/phpstan/phpstan.neon --memory-limit=720M system/src",
|
||||||
"phpstan-framework": "vendor/bin/phpstan analyse -l 7 -c ./tests/phpstan/phpstan.neon system/src/Grav/Framework --memory-limit=300M",
|
"phpstan-framework": "vendor/bin/phpstan analyse -l 5 -c ./tests/phpstan/phpstan.neon --memory-limit=480M system/src/Grav/Framework system/src/Grav/Events system/src/Grav/Installer",
|
||||||
"test-plugins": "vendor/bin/phpstan analyse -l 0 -c ./tests/phpstan/plugins.neon user/plugins --memory-limit=300M",
|
"phpstan-plugins": "vendor/bin/phpstan analyse -l 1 -c ./tests/phpstan/plugins.neon --memory-limit=400M user/plugins",
|
||||||
"test": "vendor/bin/codecept run unit",
|
"test": "vendor/bin/codecept run unit",
|
||||||
"test-windows": "vendor\\bin\\codecept run unit"
|
"test-windows": "vendor\\bin\\codecept run unit"
|
||||||
},
|
},
|
||||||
|
|||||||
5543
composer.lock
generated
5543
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1 @@
|
|||||||
|
/* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. */
|
||||||
|
|||||||
89
index.php
89
index.php
@@ -3,26 +3,53 @@
|
|||||||
/**
|
/**
|
||||||
* @package Grav.Core
|
* @package Grav.Core
|
||||||
*
|
*
|
||||||
* @copyright Copyright (C) 2015 - 2018 Trilby Media, LLC. All rights reserved.
|
* @copyright Copyright (c) 2015 - 2024 Trilby Media, LLC. All rights reserved.
|
||||||
* @license MIT License; see LICENSE file for details.
|
* @license MIT License; see LICENSE file for details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Grav;
|
namespace Grav;
|
||||||
|
|
||||||
\define('GRAV_REQUEST_TIME', microtime(true));
|
\define('GRAV_REQUEST_TIME', microtime(true));
|
||||||
\define('GRAV_PHP_MIN', '7.1.3');
|
\define('GRAV_PHP_MIN', '7.3.6');
|
||||||
|
|
||||||
if (version_compare($ver = PHP_VERSION, $req = GRAV_PHP_MIN, '<')) {
|
|
||||||
die(sprintf('You are running PHP %s, but Grav needs at least <strong>PHP %s</strong> to run.', $ver, $req));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PHP_SAPI === 'cli-server') {
|
if (PHP_SAPI === 'cli-server') {
|
||||||
$symfony_server = strpos(getenv('_'), 'symfony') !== false;
|
$symfony_server = stripos(getenv('_'), 'symfony') !== false || stripos($_SERVER['SERVER_SOFTWARE'] ?? '', 'symfony') !== false || stripos($_ENV['SERVER_SOFTWARE'] ?? '', 'symfony') !== false;
|
||||||
|
|
||||||
if (!isset($_SERVER['PHP_CLI_ROUTER']) && !$symfony_server) {
|
if (!isset($_SERVER['PHP_CLI_ROUTER']) && !$symfony_server) {
|
||||||
die("PHP webserver requires a router to run Grav, please use: <pre>php -S {$_SERVER['SERVER_NAME']}:{$_SERVER['SERVER_PORT']} system/router.php</pre>");
|
die("PHP webserver requires a router to run Grav, please use: <pre>php -S {$_SERVER['SERVER_NAME']}:{$_SERVER['SERVER_PORT']} system/router.php</pre>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (PHP_SAPI !== 'cli') {
|
||||||
|
$requestUri = $_SERVER['REQUEST_URI'] ?? '';
|
||||||
|
$scriptName = $_SERVER['SCRIPT_NAME'] ?? '';
|
||||||
|
$path = parse_url($requestUri, PHP_URL_PATH) ?? '/';
|
||||||
|
$path = str_replace('\\', '/', $path);
|
||||||
|
|
||||||
|
$scriptDir = str_replace('\\', '/', dirname($scriptName));
|
||||||
|
if ($scriptDir && $scriptDir !== '/' && $scriptDir !== '.') {
|
||||||
|
if (strpos($path, $scriptDir) === 0) {
|
||||||
|
$path = substr($path, strlen($scriptDir));
|
||||||
|
$path = $path === '' ? '/' : $path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($path === '/___safe-upgrade-status') {
|
||||||
|
$statusEndpoint = __DIR__ . '/user/plugins/admin/safe-upgrade-status.php';
|
||||||
|
header('Content-Type: application/json; charset=utf-8');
|
||||||
|
if (is_file($statusEndpoint)) {
|
||||||
|
require $statusEndpoint;
|
||||||
|
} else {
|
||||||
|
http_response_code(404);
|
||||||
|
echo json_encode([
|
||||||
|
'status' => 'error',
|
||||||
|
'message' => 'Safe upgrade status endpoint unavailable.',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Ensure vendor libraries exist
|
// Ensure vendor libraries exist
|
||||||
$autoload = __DIR__ . '/vendor/autoload.php';
|
$autoload = __DIR__ . '/vendor/autoload.php';
|
||||||
if (!is_file($autoload)) {
|
if (!is_file($autoload)) {
|
||||||
@@ -32,32 +59,48 @@ if (!is_file($autoload)) {
|
|||||||
// Register the auto-loader.
|
// Register the auto-loader.
|
||||||
$loader = require $autoload;
|
$loader = require $autoload;
|
||||||
|
|
||||||
use Grav\Common\Grav;
|
if (!class_exists(\Symfony\Component\ErrorHandler\Exception\FlattenException::class, false) && class_exists(\Symfony\Component\HttpKernel\Exception\FlattenException::class)) {
|
||||||
use RocketTheme\Toolbox\Event\Event;
|
class_alias(\Symfony\Component\HttpKernel\Exception\FlattenException::class, \Symfony\Component\ErrorHandler\Exception\FlattenException::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!class_exists(\Monolog\Logger::class, false)) {
|
||||||
|
class_exists(\Monolog\Logger::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (defined('Monolog\Logger::API') && \Monolog\Logger::API < 3) {
|
||||||
|
require_once __DIR__ . '/system/src/Grav/Framework/Compat/Monolog/bootstrap.php';
|
||||||
|
}
|
||||||
|
|
||||||
// Set timezone to default, falls back to system if php.ini not set
|
// Set timezone to default, falls back to system if php.ini not set
|
||||||
date_default_timezone_set(@date_default_timezone_get());
|
date_default_timezone_set(@date_default_timezone_get());
|
||||||
|
|
||||||
// Set internal encoding if mbstring loaded
|
// Set internal encoding.
|
||||||
if (!\extension_loaded('mbstring')) {
|
@ini_set('default_charset', 'UTF-8');
|
||||||
die("'mbstring' extension is not loaded. This is required for Grav to run correctly");
|
|
||||||
}
|
|
||||||
mb_internal_encoding('UTF-8');
|
mb_internal_encoding('UTF-8');
|
||||||
|
|
||||||
|
$recoveryFlag = __DIR__ . '/user/data/recovery.flag';
|
||||||
|
if (PHP_SAPI !== 'cli' && is_file($recoveryFlag)) {
|
||||||
|
require __DIR__ . '/system/recovery.php';
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
use Grav\Common\Grav;
|
||||||
|
use RocketTheme\Toolbox\Event\Event;
|
||||||
|
|
||||||
// Get the Grav instance
|
// Get the Grav instance
|
||||||
$grav = Grav::instance(
|
$grav = Grav::instance(array('loader' => $loader));
|
||||||
array(
|
|
||||||
'loader' => $loader
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
// Process the page
|
// Process the page
|
||||||
try {
|
try {
|
||||||
$grav->process();
|
$grav->process();
|
||||||
} catch (\Error $e) {
|
} catch (\Error|\Exception $e) {
|
||||||
$grav->fireEvent('onFatalException', new Event(array('exception' => $e)));
|
$grav->fireEvent('onFatalException', new Event(['exception' => $e]));
|
||||||
throw $e;
|
|
||||||
} catch (\Exception $e) {
|
if (PHP_SAPI !== 'cli' && is_file($recoveryFlag)) {
|
||||||
$grav->fireEvent('onFatalException', new Event(array('exception' => $e)));
|
require __DIR__ . '/system/recovery.php';
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
throw $e;
|
throw $e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
/* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. */
|
||||||
|
|||||||
2
now.json
2
now.json
@@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"version": 2,
|
"version": 2,
|
||||||
"builds": [{ "src": "*.php", "use": "@now/php" }]
|
"builds": [{ "src": "*.php", "use": "@now/php" }]
|
||||||
}
|
}
|
||||||
|
|||||||
12
robots.txt
12
robots.txt
@@ -1,13 +1,21 @@
|
|||||||
User-agent: *
|
User-agent: *
|
||||||
|
Disallow: /.github/
|
||||||
|
Disallow: /.phan/
|
||||||
|
Disallow: /assets/
|
||||||
Disallow: /backup/
|
Disallow: /backup/
|
||||||
Disallow: /bin/
|
Disallow: /bin/
|
||||||
Disallow: /cache/
|
Disallow: /cache/
|
||||||
Disallow: /grav/
|
|
||||||
Disallow: /logs/
|
Disallow: /logs/
|
||||||
Disallow: /system/
|
Disallow: /system/
|
||||||
Disallow: /vendor/
|
Disallow: /tests/
|
||||||
|
Disallow: /tmp/
|
||||||
Disallow: /user/
|
Disallow: /user/
|
||||||
|
Disallow: /vendor/
|
||||||
|
Disallow: /webserver-configs/
|
||||||
Allow: /user/pages/
|
Allow: /user/pages/
|
||||||
Allow: /user/themes/
|
Allow: /user/themes/
|
||||||
Allow: /user/images/
|
Allow: /user/images/
|
||||||
Allow: /
|
Allow: /
|
||||||
|
Allow: *.css$
|
||||||
|
Allow: *.js$
|
||||||
|
Allow: /system/*.js$
|
||||||
|
|||||||
@@ -1,2 +1,61 @@
|
|||||||
/** Clockwork Debugger CSS **/
|
/** Clockwork Debugger CSS **/
|
||||||
.clockwork-badge{position:fixed;z-index:10;bottom:0;left:0;padding:2px 4px;background-color:#eee;border:1px solid #ccc;border-bottom:0;border-left:0;display:flex;align-items:center}.clockwork-badge:hover{width:auto}.clockwork-badge:hover:after{content:'Grav Clockwork debugger enabled. Install Clockwork Browser extension (Chrome or Firefox), open your Developer tools and then select the Clockwork tab.'}.clockwork-badge:after{margin-left:10px;font-family:Monaco,Consolas,"Lucida Console",monospace;font-size:12px;line-height:1.5;color:#666}.clockwork-badge i{display:block;float:left;height:22px;width:22px;min-width:22px;background-size:contain;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAA/1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeHh4AAAD///8EBAT7+/sLCwv29vYVFRUvLy/t7e3m5ubCwsKxsbE/Pz+mpqZMTEwcHBzy8vLp6emfn5+AgIA2Njbi4uLf39+rq6tzc3NWVlYhISHa2trW1tbS0tLMzMy7u7uZmZmUlJSMjIxvb29kZGRHR0c7Ozt5eXkqKiq1tbWQkJBqampbW1tSUlLHx8eHh4ckJCRDQ0M3wD42AAAAI3RSTlMA/PibTbQ0x76TVAlw4LhZLOuEYCAN9Hjx0a2ppGZEGYw97djhXHwAAATZSURBVFjDlVcHW+MwDO1eFCjj2McNOzvdpXTTXVbL/P+/5SQ7QSSX5Di1X1onfi/Sk+Q4sTDbKqWK+YuznZ2zi3wxVdqK/Zf92M1nT9gnO8rmd398GX6Z3xaoOFoiAQcx3E5efgmeSuN8F6Xg1x3G06l/wjNpMR1B0uif4EhnIuFb+0diIoFXk3IVfokisR+h52GO4JKgyjmfaMhAFNlSaPR7DpwI+lzn/E4QKIqmKIJirxCMP4izBPPZPXhgXwMBYgULw0nfg/BF5scDbslb7QeJ08yqqTEmGYoB95d4H8ETL8+n9wBqrLu6ao3bBsMwAnxISf/9BHcqxNB8Y7cWl3Zz7TAUfPrvAT6AoNEFFXvsjutL01yOuMrtBxnFXsmT/1wQHmdWAFNnI3uI48Yj0FUcHbKf62GfUfr8eeQt7Uk3mQZpZNoVRPEui5vtEz5zFEpgWnyqVBZMc6oaGNriH2hGVZ0OxEvInPeMaZWJBA7vmPbCr5jjws5HBnAUxvDMH40aCIf4G5BjRQSs8E8HFFYf8bGxgDvD55bzGhwWkoBcuIyHR/AMdaCagxXDhtL6tSqoWpd4BMnlIR+Or+rYTK/a3EAGcc6e4AWHISnWv20iCCojsHoVlQdjrMexFF2C7UMg2A2WEGWbQhXN6l3eXC6XGp4b9qxbuEB2EBGBwtocrK90cVG5mbRXm6vmx/0phq1sIAGKDgLOBiN1MrO5a9aDl+D0W6x0Ar9BCTRuIIANa90Y7LrLVRXzwVtDInCqMRWcf2bUOEAsa4wJqFowQALL9EiAtVRk8QC4OW+1pOM9jIaVASwYagyNXDj+W0NcfuZNzjtXOiL0Zzg30Llj+ptfxQs4+vBPNiL5PawFCBkgXpUaVtqGl+A8dgZHL34BcBUQrwPptToW+o37Ku+UH9eYByJIx3YkAeFnMFuGO7S5gEp7YhXxa5OOAM39RXDPXb0qmpROsswZe+twXdU55oUIZAiEv3bD1UFwIYKkmGqytPCDCwKFQCKK0yL7qtSAPX54UAbtsLuBHkb9zyLmPQSNjsSgmQwKUOIfEY8F8t4B34DvndJY9BA8tNBJq1Nev9axmaStFcQLhgYoCTo0salkIaW8OUDdWjMTR2sHPhrAFZqx6cqcKE4pl2BJJ4K6hfwvqNgAnXfKX/HU6X3Zrhnu0k7tLNZtTBRv1hkwTDBY1NzFU6doDYjJbWdQkQhWwuU7/LvhTh3SDoco4ECL4i5dwURbc8NdDZz2IwKicE8d0KIqWetLE3+lL4hvUuGSeRfVWNLfj/gpOw4smBJBkKQHCzlHGwvAj4woB1gq5NGGLSXtORBPnUQPV5/MPVkDMxbpwG7w4x0xL6Ltxka0A/4NBvV09UVk4DoSn/jl2+JQS9q9KYawisAD4CfhsZ4TH3htylsdEHARIQBusqCKyUpymycgbbkkXEXjT3z7/oKQFTFVuZD2FMJHZIDsO5x2d4aAr2jR+GLwZhtAb028/0yJ9J8dE87jQyKObcjtTXT8dH+fDuKF4/eiPwzH44wTf/yUi6wrpRIOZ9lM1EtXAifFI+CJn9+iX/t2xMQwOMth/UZbASi8btAwR9FHWSpJr75g9Oqbin3VDg+SpwlP6k6TB4ex/7JvmcJx8jydy6XPk8eFTKhyfwCgX71MSvaBHgAAAABJRU5ErkJggg==)}
|
.clockwork-badge {
|
||||||
|
position: fixed;
|
||||||
|
z-index: 1000; /* Increased z-index for better visibility */
|
||||||
|
bottom: 0; /* Added some spacing from the bottom */
|
||||||
|
left: 0; /* Added some spacing from the left */
|
||||||
|
padding: 5px;
|
||||||
|
background-color: #eee;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-bottom: 0;
|
||||||
|
border-left: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
border-radius: 0 4px 0 0; /* Rounded top corners */
|
||||||
|
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
|
||||||
|
font-size: 14px;
|
||||||
|
color: #333;
|
||||||
|
transition: background-color 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clockwork-badge:hover {
|
||||||
|
background-color: #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clockwork-badge i {
|
||||||
|
display: block;
|
||||||
|
height: 24px;
|
||||||
|
width: 24px;
|
||||||
|
background-size: contain;
|
||||||
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAA/1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeHh4AAAD///8EBAT7+/sLCwv29vYVFRUvLy/t7e3m5ubCwsKxsbE/Pz+mpqZMTEwcHBzy8vLp6emfn5+AgIA2Njbi4uLf39+rq6tzc3NWVlYhISHa2trW1tbS0tLMzMy7u7uZmZmUlJSMjIxvb29kZGRHR0c7Ozt5eXkqKiq1tbWQkJBqampbW1tSUlLHx8eHh4ckJCRDQ0M3wD42AAAAI3RSTlMA/PibTbQ0x76TVAlw4LhZLOuEYCAN9Hjx0a2ppGZEGYw97djhXHwAAATZSURBVFjDlVcHW+MwDO1eFCjj2McNOzvdpXTTXVbL/P+/5SQ7QSSX5Di1X1onfi/Sk+Q4sTDbKqWK+YuznZ2zi3wxVdqK/Zf92M1nT9gnO8rmd398GX6Z3xaoOFoiAQcx3E5efgmeSuN8F6Xg1x3G06l/wjNpMR1B0uif4EhnIuFb+0diIoFXk3IVfokisR+h52GO4JKgyjmfaMhAFNlSaPR7DpwI+lzn/E4QKIqmKIJirxCMP4izBPPZPXhgXwMBYgULw0nfg/BF5scDbslb7QeJ08yqqTEmGYoB95d4H8ETL8+n9wBqrLu6ao3bBsMwAnxISf/9BHcqxNB8Y7cWl3Zz7TAUfPrvAT6AoNEFFXvsjutL01yOuMrtBxnFXsmT/1wQHmdWAFNnI3uI48Yj0FUcHbKf62GfUfr8eeQt7Uk3mQZpZNoVRPEui5vtEz5zFEpgWnyqVBZMc6oaGNriH2hGVZ0OxEvInPeMaZWJBA7vmPbCr5jjws5HBnAUxvDMH40aCIf4G5BjRQSs8E8HFFYf8bGxgDvD55bzGhwWkoBcuIyHR/AMdaCagxXDhtL6tSqoWpd4BMnlIR+Or+rYTK/a3EAGcc6e4AWHISnWv20iCCojsHoVlQdjrMexFF2C7UMg2A2WEGWbQhXN6l3eXC6XGp4b9qxbuEB2EBGBwtocrK90cVG5mbRXm6vmx/0phq1sIAGKDgLOBiN1MrO5a9aDl+D0W6x0Ar9BCTRuIIANa90Y7LrLVRXzwVtDInCqMRWcf2bUOEAsa4wJqFowQALL9EiAtVRk8QC4OW+1pOM9jIaVASwYagyNXDj+W0NcfuZNzjtXOiL0Zzg30Llj+ptfxQs4+vBPNiL5PawFCBkgXpUaVtqGl+A8dgZHL34BcBUQrwPptToW+o37Ku+UH9eYByJIx3YkAeFnMFuGO7S5gEp7YhXxa5OOAM39RXDPXb0qmpROsswZe+twXdU55oUIZAiEv3bD1UFwIYKkmGqytPCDCwKFQCKK0yL7qtSAPX54UAbtsLuBHkb9zyLmPQSNjsSgmQwKUOIfEY8F8t4B34DvndJY9BA8tNBJq1Nev9axmaStFcQLhgYoCTo0salkIaW8OUDdWjMTR2sHPhrAFZqx6cqcKE4pl2BJJ4K6hfwvqNgAnXfKX/HU6X3Zrhnu0k7tLNZtTBRv1hkwTDBY1NzFU6doDYjJbWdQkQhWwuU7/LvhTh3SDoco4ECL4i5dwURbc8NdDZz2IwKicE8d0KIqWetLE3+lL4hvUuGSeRfVWNLfj/gpOw4smBJBkKQHCzlHGwvAj4woB1gq5NGGLSXtORBPnUQPV5/MPVkDMxbpwG7w4x0xL6Ltxka0A/4NBvV09UVk4DoSn/jl2+JQS9q9KYawisAD4CfhsZ4TH3htylsdEHARIQBusqCKyUpymycgbbkkXEXjT3z7/oKQFTFVuZD2FMJHZIDsO5x2d4aAr2jR+GLwZhtAb028/0yJ9J8dE87jQyKObcjtTXT8dH+fDuKF4/eiPwzH44wTf/yUi6wrpRIOZ9lM1EtXAifFI+CJn9+iX/t2xMQwOMth/UZbASi8btAwR9FHWSpJr75g9Oqbin3VDg+SpwlP6k6TB4ex/7JvmcJx8jydy6XPk8eFTKhyfwCgX71MSvaBHgAAAABJRU5ErkJggg==);
|
||||||
|
}
|
||||||
|
|
||||||
|
.clockwork-badge .tooltip {
|
||||||
|
display: none; /* Hidden by default */
|
||||||
|
position: absolute;
|
||||||
|
bottom: 35px; /* Position above the badge */
|
||||||
|
left: 0;
|
||||||
|
width: 450px;
|
||||||
|
padding: 20px;
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #666;
|
||||||
|
line-height: 1.5;
|
||||||
|
box-shadow: 0 2px 8px rgba(0,0,0,0.2);
|
||||||
|
z-index: 1001; /* Ensure it appears above other elements */
|
||||||
|
}
|
||||||
|
|
||||||
|
.clockwork-badge:hover .tooltip {
|
||||||
|
display: block; /* Show tooltip on hover */
|
||||||
|
}
|
||||||
|
|
||||||
|
.clockwork-badge .tooltip a {
|
||||||
|
color: #007BFF;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clockwork-badge .tooltip a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,3 +1,37 @@
|
|||||||
/** Clockwork Debugger JS **/
|
/** Clockwork Debugger JS **/
|
||||||
document.addEventListener("DOMContentLoaded",function () {
|
document.addEventListener("DOMContentLoaded", function () {
|
||||||
var e=document.createElement("div");e.appendChild(document.createElement("i")),e.className="clockwork-badge",document.body.appendChild(e)});
|
// Directly select the script tag by its id
|
||||||
|
var currentScript = document.getElementById('clockwork-script');
|
||||||
|
|
||||||
|
if (!currentScript) {
|
||||||
|
console.error("Clockwork Debugger: Script tag with id 'clockwork-script' not found.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var route = currentScript.getAttribute('data-route') || '/clockwork'; // Default route if not specified
|
||||||
|
|
||||||
|
// Debugging: Log the route to verify
|
||||||
|
console.log("Clockwork Debugger Route:", route);
|
||||||
|
|
||||||
|
// Create the badge container
|
||||||
|
var badge = document.createElement("div");
|
||||||
|
badge.className = "clockwork-badge";
|
||||||
|
badge.setAttribute('aria-label', 'Clockwork Debugger Enabled');
|
||||||
|
badge.setAttribute('role', 'button');
|
||||||
|
|
||||||
|
// Create the icon element
|
||||||
|
var icon = document.createElement("i");
|
||||||
|
badge.appendChild(icon);
|
||||||
|
|
||||||
|
// Create the tooltip element
|
||||||
|
var tooltip = document.createElement("div");
|
||||||
|
tooltip.className = "tooltip";
|
||||||
|
tooltip.innerHTML = `
|
||||||
|
<b>Grav Clockwork Debugger Enabled.</b><br>
|
||||||
|
Install the <b>Clockwork Browser extension</b> (Chrome or Firefox) or use the <b>"Clockwork Web"</b> Grav plugin to <a href="${route}" target="_blank">View Debug Info 🔗</a>.
|
||||||
|
`;
|
||||||
|
badge.appendChild(tooltip);
|
||||||
|
|
||||||
|
// Append the badge to the body
|
||||||
|
document.body.appendChild(badge);
|
||||||
|
});
|
||||||
@@ -14,11 +14,8 @@ div.phpdebugbar {
|
|||||||
padding: 5px 8px;
|
padding: 5px 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.phpdebugbar div.phpdebugbar-header, .phpdebugbar a.phpdebugbar-restore-btn {
|
|
||||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAA/1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeHh4AAAD///8EBAT7+/sLCwv29vYVFRUvLy/t7e3m5ubCwsKxsbE/Pz+mpqZMTEwcHBzy8vLp6emfn5+AgIA2Njbi4uLf39+rq6tzc3NWVlYhISHa2trW1tbS0tLMzMy7u7uZmZmUlJSMjIxvb29kZGRHR0c7Ozt5eXkqKiq1tbWQkJBqampbW1tSUlLHx8eHh4ckJCRDQ0M3wD42AAAAI3RSTlMA/PibTbQ0x76TVAlw4LhZLOuEYCAN9Hjx0a2ppGZEGYw97djhXHwAAATZSURBVFjDlVcHW+MwDO1eFCjj2McNOzvdpXTTXVbL/P+/5SQ7QSSX5Di1X1onfi/Sk+Q4sTDbKqWK+YuznZ2zi3wxVdqK/Zf92M1nT9gnO8rmd398GX6Z3xaoOFoiAQcx3E5efgmeSuN8F6Xg1x3G06l/wjNpMR1B0uif4EhnIuFb+0diIoFXk3IVfokisR+h52GO4JKgyjmfaMhAFNlSaPR7DpwI+lzn/E4QKIqmKIJirxCMP4izBPPZPXhgXwMBYgULw0nfg/BF5scDbslb7QeJ08yqqTEmGYoB95d4H8ETL8+n9wBqrLu6ao3bBsMwAnxISf/9BHcqxNB8Y7cWl3Zz7TAUfPrvAT6AoNEFFXvsjutL01yOuMrtBxnFXsmT/1wQHmdWAFNnI3uI48Yj0FUcHbKf62GfUfr8eeQt7Uk3mQZpZNoVRPEui5vtEz5zFEpgWnyqVBZMc6oaGNriH2hGVZ0OxEvInPeMaZWJBA7vmPbCr5jjws5HBnAUxvDMH40aCIf4G5BjRQSs8E8HFFYf8bGxgDvD55bzGhwWkoBcuIyHR/AMdaCagxXDhtL6tSqoWpd4BMnlIR+Or+rYTK/a3EAGcc6e4AWHISnWv20iCCojsHoVlQdjrMexFF2C7UMg2A2WEGWbQhXN6l3eXC6XGp4b9qxbuEB2EBGBwtocrK90cVG5mbRXm6vmx/0phq1sIAGKDgLOBiN1MrO5a9aDl+D0W6x0Ar9BCTRuIIANa90Y7LrLVRXzwVtDInCqMRWcf2bUOEAsa4wJqFowQALL9EiAtVRk8QC4OW+1pOM9jIaVASwYagyNXDj+W0NcfuZNzjtXOiL0Zzg30Llj+ptfxQs4+vBPNiL5PawFCBkgXpUaVtqGl+A8dgZHL34BcBUQrwPptToW+o37Ku+UH9eYByJIx3YkAeFnMFuGO7S5gEp7YhXxa5OOAM39RXDPXb0qmpROsswZe+twXdU55oUIZAiEv3bD1UFwIYKkmGqytPCDCwKFQCKK0yL7qtSAPX54UAbtsLuBHkb9zyLmPQSNjsSgmQwKUOIfEY8F8t4B34DvndJY9BA8tNBJq1Nev9axmaStFcQLhgYoCTo0salkIaW8OUDdWjMTR2sHPhrAFZqx6cqcKE4pl2BJJ4K6hfwvqNgAnXfKX/HU6X3Zrhnu0k7tLNZtTBRv1hkwTDBY1NzFU6doDYjJbWdQkQhWwuU7/LvhTh3SDoco4ECL4i5dwURbc8NdDZz2IwKicE8d0KIqWetLE3+lL4hvUuGSeRfVWNLfj/gpOw4smBJBkKQHCzlHGwvAj4woB1gq5NGGLSXtORBPnUQPV5/MPVkDMxbpwG7w4x0xL6Ltxka0A/4NBvV09UVk4DoSn/jl2+JQS9q9KYawisAD4CfhsZ4TH3htylsdEHARIQBusqCKyUpymycgbbkkXEXjT3z7/oKQFTFVuZD2FMJHZIDsO5x2d4aAr2jR+GLwZhtAb028/0yJ9J8dE87jQyKObcjtTXT8dH+fDuKF4/eiPwzH44wTf/yUi6wrpRIOZ9lM1EtXAifFI+CJn9+iX/t2xMQwOMth/UZbASi8btAwR9FHWSpJr75g9Oqbin3VDg+SpwlP6k6TB4ex/7JvmcJx8jydy6XPk8eFTKhyfwCgX71MSvaBHgAAAABJRU5ErkJggg==);
|
|
||||||
}
|
|
||||||
|
|
||||||
.phpdebugbar a.phpdebugbar-restore-btn {
|
.phpdebugbar a.phpdebugbar-restore-btn {
|
||||||
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAA/1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeHh4AAAD///8EBAT7+/sLCwv29vYVFRUvLy/t7e3m5ubCwsKxsbE/Pz+mpqZMTEwcHBzy8vLp6emfn5+AgIA2Njbi4uLf39+rq6tzc3NWVlYhISHa2trW1tbS0tLMzMy7u7uZmZmUlJSMjIxvb29kZGRHR0c7Ozt5eXkqKiq1tbWQkJBqampbW1tSUlLHx8eHh4ckJCRDQ0M3wD42AAAAI3RSTlMA/PibTbQ0x76TVAlw4LhZLOuEYCAN9Hjx0a2ppGZEGYw97djhXHwAAATZSURBVFjDlVcHW+MwDO1eFCjj2McNOzvdpXTTXVbL/P+/5SQ7QSSX5Di1X1onfi/Sk+Q4sTDbKqWK+YuznZ2zi3wxVdqK/Zf92M1nT9gnO8rmd398GX6Z3xaoOFoiAQcx3E5efgmeSuN8F6Xg1x3G06l/wjNpMR1B0uif4EhnIuFb+0diIoFXk3IVfokisR+h52GO4JKgyjmfaMhAFNlSaPR7DpwI+lzn/E4QKIqmKIJirxCMP4izBPPZPXhgXwMBYgULw0nfg/BF5scDbslb7QeJ08yqqTEmGYoB95d4H8ETL8+n9wBqrLu6ao3bBsMwAnxISf/9BHcqxNB8Y7cWl3Zz7TAUfPrvAT6AoNEFFXvsjutL01yOuMrtBxnFXsmT/1wQHmdWAFNnI3uI48Yj0FUcHbKf62GfUfr8eeQt7Uk3mQZpZNoVRPEui5vtEz5zFEpgWnyqVBZMc6oaGNriH2hGVZ0OxEvInPeMaZWJBA7vmPbCr5jjws5HBnAUxvDMH40aCIf4G5BjRQSs8E8HFFYf8bGxgDvD55bzGhwWkoBcuIyHR/AMdaCagxXDhtL6tSqoWpd4BMnlIR+Or+rYTK/a3EAGcc6e4AWHISnWv20iCCojsHoVlQdjrMexFF2C7UMg2A2WEGWbQhXN6l3eXC6XGp4b9qxbuEB2EBGBwtocrK90cVG5mbRXm6vmx/0phq1sIAGKDgLOBiN1MrO5a9aDl+D0W6x0Ar9BCTRuIIANa90Y7LrLVRXzwVtDInCqMRWcf2bUOEAsa4wJqFowQALL9EiAtVRk8QC4OW+1pOM9jIaVASwYagyNXDj+W0NcfuZNzjtXOiL0Zzg30Llj+ptfxQs4+vBPNiL5PawFCBkgXpUaVtqGl+A8dgZHL34BcBUQrwPptToW+o37Ku+UH9eYByJIx3YkAeFnMFuGO7S5gEp7YhXxa5OOAM39RXDPXb0qmpROsswZe+twXdU55oUIZAiEv3bD1UFwIYKkmGqytPCDCwKFQCKK0yL7qtSAPX54UAbtsLuBHkb9zyLmPQSNjsSgmQwKUOIfEY8F8t4B34DvndJY9BA8tNBJq1Nev9axmaStFcQLhgYoCTo0salkIaW8OUDdWjMTR2sHPhrAFZqx6cqcKE4pl2BJJ4K6hfwvqNgAnXfKX/HU6X3Zrhnu0k7tLNZtTBRv1hkwTDBY1NzFU6doDYjJbWdQkQhWwuU7/LvhTh3SDoco4ECL4i5dwURbc8NdDZz2IwKicE8d0KIqWetLE3+lL4hvUuGSeRfVWNLfj/gpOw4smBJBkKQHCzlHGwvAj4woB1gq5NGGLSXtORBPnUQPV5/MPVkDMxbpwG7w4x0xL6Ltxka0A/4NBvV09UVk4DoSn/jl2+JQS9q9KYawisAD4CfhsZ4TH3htylsdEHARIQBusqCKyUpymycgbbkkXEXjT3z7/oKQFTFVuZD2FMJHZIDsO5x2d4aAr2jR+GLwZhtAb028/0yJ9J8dE87jQyKObcjtTXT8dH+fDuKF4/eiPwzH44wTf/yUi6wrpRIOZ9lM1EtXAifFI+CJn9+iX/t2xMQwOMth/UZbASi8btAwR9FHWSpJr75g9Oqbin3VDg+SpwlP6k6TB4ex/7JvmcJx8jydy6XPk8eFTKhyfwCgX71MSvaBHgAAAABJRU5ErkJggg==);
|
||||||
width: 13px;
|
width: 13px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
4
system/assets/jquery/jquery-3.x.min.js
vendored
4
system/assets/jquery/jquery-3.x.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -4,72 +4,788 @@ form:
|
|||||||
validation: loose
|
validation: loose
|
||||||
|
|
||||||
fields:
|
fields:
|
||||||
|
scheduler_tabs:
|
||||||
|
type: tabs
|
||||||
|
active: 1
|
||||||
|
|
||||||
status_title:
|
fields:
|
||||||
type: section
|
status_tab:
|
||||||
title: PLUGIN_ADMIN.SCHEDULER_STATUS
|
type: tab
|
||||||
underline: true
|
title: PLUGIN_ADMIN.SCHEDULER_STATUS
|
||||||
|
|
||||||
status:
|
fields:
|
||||||
type: cronstatus
|
status_title:
|
||||||
validate:
|
type: section
|
||||||
type: commalist
|
title: PLUGIN_ADMIN.SCHEDULER_STATUS
|
||||||
|
underline: true
|
||||||
|
|
||||||
jobs_title:
|
status:
|
||||||
type: section
|
type: cronstatus
|
||||||
title: PLUGIN_ADMIN.SCHEDULER_JOBS
|
validate:
|
||||||
underline: true
|
type: commalist
|
||||||
|
|
||||||
|
webhook_status_override:
|
||||||
|
type: display
|
||||||
|
label:
|
||||||
|
content: |
|
||||||
|
<script>
|
||||||
|
(function() {
|
||||||
|
function updateSchedulerStatus() {
|
||||||
|
// Find all notice bars
|
||||||
|
var notices = document.querySelectorAll('.notice');
|
||||||
|
var webhookStatusChecked = false;
|
||||||
|
|
||||||
|
// Check for modern scheduler and webhook settings
|
||||||
|
fetch(window.location.origin + '/grav-editor-pro/scheduler/health')
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
if (data.webhook_enabled) {
|
||||||
|
notices.forEach(function(notice) {
|
||||||
|
if (notice.textContent.includes('Not Enabled for user:')) {
|
||||||
|
// This is the cron status notice - replace it
|
||||||
|
notice.className = 'notice info';
|
||||||
|
notice.innerHTML = '<i class="fa fa-fw fa-check-circle"></i> <strong>Webhook Active</strong> - Scheduler can be triggered via webhook. Cron is not configured.';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Also update the main status if it exists
|
||||||
|
var statusDiv = document.querySelector('.cronstatus-status');
|
||||||
|
if (statusDiv && statusDiv.textContent.includes('Not Enabled')) {
|
||||||
|
statusDiv.className = 'cronstatus-status success';
|
||||||
|
statusDiv.innerHTML = '<i class="fa fa-fw fa-check"></i> Webhook Ready';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.log('Webhook status check failed:', error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run on page load
|
||||||
|
if (document.readyState === 'loading') {
|
||||||
|
document.addEventListener('DOMContentLoaded', updateSchedulerStatus);
|
||||||
|
} else {
|
||||||
|
updateSchedulerStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Also run after a short delay to catch any late-rendered elements
|
||||||
|
setTimeout(updateSchedulerStatus, 500);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
markdown: false
|
||||||
|
|
||||||
|
status_enhanced:
|
||||||
|
type: display
|
||||||
|
label:
|
||||||
|
content: |
|
||||||
|
<script>
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
// Check if webhook is enabled
|
||||||
|
var webhookEnabled = document.querySelector('[name="data[scheduler][modern][webhook][enabled]"]:checked');
|
||||||
|
var statusDiv = document.querySelector('.cronstatus-status');
|
||||||
|
|
||||||
|
// Also find the parent notice bar
|
||||||
|
var noticeBar = document.querySelector('.notice.alert');
|
||||||
|
|
||||||
|
if (statusDiv) {
|
||||||
|
var currentStatus = statusDiv.textContent || statusDiv.innerText;
|
||||||
|
var cronReady = currentStatus.includes('Ready');
|
||||||
|
var cronNotEnabled = currentStatus.includes('Not Enabled');
|
||||||
|
|
||||||
|
// Check if scheduler-webhook plugin exists
|
||||||
|
var webhookPluginInstalled = false;
|
||||||
|
fetch(window.location.origin + '/grav-editor-pro/scheduler/health')
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
webhookPluginInstalled = true;
|
||||||
|
updateStatusDisplay(data);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
updateStatusDisplay(null);
|
||||||
|
});
|
||||||
|
|
||||||
|
function updateStatusDisplay(healthData) {
|
||||||
|
var isWebhookEnabled = webhookEnabled && webhookEnabled.value == '1';
|
||||||
|
var isWebhookReady = webhookPluginInstalled && isWebhookEnabled && healthData && healthData.webhook_enabled;
|
||||||
|
|
||||||
|
// Update the main status text
|
||||||
|
var mainStatusText = '';
|
||||||
|
var mainStatusClass = '';
|
||||||
|
|
||||||
|
if (cronReady && isWebhookReady) {
|
||||||
|
mainStatusText = 'Cron and Webhook Ready';
|
||||||
|
mainStatusClass = 'success';
|
||||||
|
} else if (cronReady) {
|
||||||
|
mainStatusText = 'Cron Ready';
|
||||||
|
mainStatusClass = 'success';
|
||||||
|
} else if (isWebhookReady) {
|
||||||
|
mainStatusText = 'Webhook Ready (No Cron)';
|
||||||
|
mainStatusClass = 'success'; // Changed from warning to success
|
||||||
|
} else if (cronNotEnabled && !isWebhookReady) {
|
||||||
|
mainStatusText = 'Not Configured';
|
||||||
|
mainStatusClass = 'error';
|
||||||
|
} else {
|
||||||
|
mainStatusText = 'Configuration Pending';
|
||||||
|
mainStatusClass = 'warning';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the notice bar if webhooks are ready
|
||||||
|
if (noticeBar && isWebhookReady) {
|
||||||
|
// Change from error (red) to success (green) or info (blue)
|
||||||
|
noticeBar.classList.remove('alert');
|
||||||
|
noticeBar.classList.add('info');
|
||||||
|
|
||||||
|
var noticeIcon = noticeBar.querySelector('i.fa');
|
||||||
|
if (noticeIcon) {
|
||||||
|
noticeIcon.classList.remove('fa-times-circle');
|
||||||
|
noticeIcon.classList.add('fa-check-circle');
|
||||||
|
}
|
||||||
|
|
||||||
|
var noticeText = noticeBar.querySelector('strong') || noticeBar;
|
||||||
|
var username = noticeText.textContent.match(/user:\s*(\w+)/);
|
||||||
|
if (username) {
|
||||||
|
noticeText.innerHTML = 'Webhook Ready for user: <b>' + username[1] + '</b> (Cron not configured)';
|
||||||
|
} else {
|
||||||
|
noticeText.innerHTML = mainStatusText;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the main status div
|
||||||
|
if (statusDiv) {
|
||||||
|
statusDiv.innerHTML = '<i class="fa fa-fw fa-' +
|
||||||
|
(mainStatusClass === 'success' ? 'check' : mainStatusClass === 'warning' ? 'exclamation' : 'times') +
|
||||||
|
'"></i> ' + mainStatusText;
|
||||||
|
statusDiv.className = 'cronstatus-status ' + mainStatusClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update install instructions button/content
|
||||||
|
var installButton = document.querySelector('.cronstatus-install-button');
|
||||||
|
var installDiv = document.querySelector('.cronstatus-install');
|
||||||
|
|
||||||
|
if (installDiv) {
|
||||||
|
var installHtml = '<div class="alert alert-info">';
|
||||||
|
installHtml += '<h4>Setup Instructions:</h4>';
|
||||||
|
|
||||||
|
var hasInstructions = false;
|
||||||
|
|
||||||
|
// Cron setup
|
||||||
|
if (!cronReady) {
|
||||||
|
installHtml += '<p><strong>Option 1: Traditional Cron</strong><br>';
|
||||||
|
installHtml += 'Run: <code>bin/grav scheduler --install</code><br>';
|
||||||
|
installHtml += 'This will add a cron job that runs every minute.</p>';
|
||||||
|
hasInstructions = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Webhook setup
|
||||||
|
if (!webhookPluginInstalled) {
|
||||||
|
installHtml += '<p><strong>Option 2: Webhook Support</strong><br>';
|
||||||
|
installHtml += '1. Install plugin: <code>bin/gpm install scheduler-webhook</code><br>';
|
||||||
|
installHtml += '2. Configure webhook token in Advanced Features tab<br>';
|
||||||
|
installHtml += '3. Use webhook URL in your CI/CD or cloud scheduler</p>';
|
||||||
|
hasInstructions = true;
|
||||||
|
} else if (!isWebhookEnabled) {
|
||||||
|
installHtml += '<p><strong>Webhook Plugin Installed</strong><br>';
|
||||||
|
installHtml += 'Enable webhooks in Advanced Features tab and set a secure token.</p>';
|
||||||
|
hasInstructions = true;
|
||||||
|
} else if (isWebhookReady) {
|
||||||
|
installHtml += '<p><strong>✅ Webhook is Active!</strong><br>';
|
||||||
|
installHtml += 'Trigger URL: <code>' + window.location.origin + '/grav-editor-pro/scheduler/webhook</code><br>';
|
||||||
|
installHtml += 'Use with Authorization header: <code>Bearer YOUR_TOKEN</code></p>';
|
||||||
|
|
||||||
|
if (!cronReady) {
|
||||||
|
installHtml += '<p class="text-muted"><small>Note: No cron job configured. Scheduler runs only via webhook triggers.</small></p>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hasInstructions && cronReady) {
|
||||||
|
installHtml += '<p><strong>✅ Cron is configured and ready!</strong><br>';
|
||||||
|
installHtml += 'The scheduler runs automatically every minute via system cron.</p>';
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
installHtml += '</div>';
|
||||||
|
installDiv.innerHTML = installHtml;
|
||||||
|
|
||||||
|
// Update button text based on status
|
||||||
|
if (installButton) {
|
||||||
|
if (cronReady && isWebhookReady) {
|
||||||
|
installButton.innerHTML = '<i class="fa fa-info-circle"></i> Configuration Details';
|
||||||
|
} else if (cronReady || isWebhookReady) {
|
||||||
|
installButton.innerHTML = '<i class="fa fa-plus-circle"></i> Add More Triggers';
|
||||||
|
} else {
|
||||||
|
installButton.innerHTML = '<i class="fa fa-exclamation-triangle"></i> Install Instructions';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
custom_jobs:
|
modern_health:
|
||||||
type: list
|
type: display
|
||||||
style: vertical
|
label: Health Status
|
||||||
label:
|
content: |
|
||||||
classes: cron-job-list compact
|
<div id="scheduler-health-status">
|
||||||
key: id
|
<div class="text-muted">Checking health...</div>
|
||||||
fields:
|
</div>
|
||||||
.id:
|
<script>
|
||||||
type: key
|
(function() {
|
||||||
label: ID
|
function loadHealthStatus() {
|
||||||
placeholder: 'process-name'
|
fetch(window.location.origin + '/grav-editor-pro/scheduler/health')
|
||||||
validate:
|
.then(response => response.json())
|
||||||
required: true
|
.then(data => {
|
||||||
pattern: '[a-zа-я0-9_\-]+'
|
var statusEl = document.getElementById('scheduler-health-status');
|
||||||
max: 20
|
if (!statusEl) return;
|
||||||
message: 'ID must be lowercase with dashes/underscores only and less than 20 characters'
|
|
||||||
.command:
|
// Modern card-based layout
|
||||||
type: text
|
var statusColor = '#6c757d';
|
||||||
label: PLUGIN_ADMIN.COMMAND
|
var statusLabel = data.status || 'unknown';
|
||||||
placeholder: 'cd ~;ls -lah;'
|
if (data.status === 'healthy') statusColor = '#28a745';
|
||||||
validate:
|
else if (data.status === 'warning') statusColor = '#ffc107';
|
||||||
required: true
|
else if (data.status === 'critical') statusColor = '#dc3545';
|
||||||
.args:
|
|
||||||
type: text
|
var html = '<div style="display: flex; flex-direction: column; gap: 1rem;">';
|
||||||
label: PLUGIN_ADMIN.EXTRA_ARGUMENTS
|
|
||||||
.at:
|
// Status card
|
||||||
type: cron
|
html += '<div style="display: flex; align-items: center; justify-content: space-between; padding: 0.75rem 1rem; background: linear-gradient(135deg, #f8f9fa 0%, #fff 100%); border-radius: 6px; border: 1px solid #e9ecef; box-shadow: 0 1px 3px rgba(0,0,0,0.05);">';
|
||||||
label: PLUGIN_ADMIN.SCHEDULER_RUNAT
|
html += '<span style="font-weight: 500; color: #495057;">Status:</span>';
|
||||||
help: PLUGIN_ADMIN.SCHEDULER_RUNAT_HELP
|
html += '<span style="background: ' + statusColor + '; color: white; padding: 0.375rem 0.75rem; font-size: 0.875rem; font-weight: 500; border-radius: 4px; text-transform: uppercase; letter-spacing: 0.025em;">' + statusLabel + '</span>';
|
||||||
placeholder: '* * * * *'
|
html += '</div>';
|
||||||
validate:
|
|
||||||
required: true
|
// Info grid
|
||||||
.output:
|
html += '<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem;">';
|
||||||
type: text
|
|
||||||
label: PLUGIN_ADMIN.SCHEDULER_OUTPUT
|
// Last run card
|
||||||
help: PLUGIN_ADMIN.SCHEDULER_OUTPUT_HELP
|
html += '<div style="background: white; border: 1px solid #e9ecef; border-radius: 6px; padding: 0.75rem; box-shadow: 0 1px 2px rgba(0,0,0,0.03);">';
|
||||||
placeholder: 'logs/ls-cron.out'
|
html += '<div style="color: #6c757d; font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 0.25rem;">Last Run</div>';
|
||||||
.output_mode:
|
if (data.last_run) {
|
||||||
type: select
|
var age = data.last_run_age;
|
||||||
label: PLUGIN_ADMIN.SCHEDULER_OUTPUT_TYPE
|
var ageText = 'just now';
|
||||||
help: PLUGIN_ADMIN.SCHEDULER_OUTPUT_TYPE_HELP
|
if (age > 86400) {
|
||||||
default: append
|
ageText = Math.floor(age / 86400) + ' day(s) ago';
|
||||||
options:
|
} else if (age > 3600) {
|
||||||
append: Append
|
ageText = Math.floor(age / 3600) + ' hour(s) ago';
|
||||||
overwrite: Overwrite
|
} else if (age > 60) {
|
||||||
.email:
|
ageText = Math.floor(age / 60) + ' minute(s) ago';
|
||||||
type: text
|
} else if (age > 0) {
|
||||||
label: PLUGIN_ADMIN.SCHEDULER_EMAIL
|
ageText = age + ' second(s) ago';
|
||||||
help: PLUGIN_ADMIN.SCHEDULER_EMAIL_HELP
|
}
|
||||||
placeholder: 'notifications@yoursite.com'
|
html += '<div style="font-size: 1rem; color: #212529; font-weight: 500;">' + ageText + '</div>';
|
||||||
|
} else {
|
||||||
|
html += '<div style="font-size: 1rem; color: #6c757d;">Never</div>';
|
||||||
|
}
|
||||||
|
html += '</div>';
|
||||||
|
|
||||||
|
// Jobs count card
|
||||||
|
html += '<div style="background: white; border: 1px solid #e9ecef; border-radius: 6px; padding: 0.75rem; box-shadow: 0 1px 2px rgba(0,0,0,0.03);">';
|
||||||
|
html += '<div style="color: #6c757d; font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 0.25rem;">Scheduled Jobs</div>';
|
||||||
|
html += '<div style="font-size: 1rem; color: #212529; font-weight: 500;">' + (data.scheduled_jobs || 0) + '</div>';
|
||||||
|
html += '</div>';
|
||||||
|
|
||||||
|
html += '</div>'; // Close grid
|
||||||
|
|
||||||
|
// Additional info if available
|
||||||
|
if (data.modern_features && data.queue_size !== undefined) {
|
||||||
|
html += '<div style="background: white; border: 1px solid #e9ecef; border-radius: 6px; padding: 0.75rem; box-shadow: 0 1px 2px rgba(0,0,0,0.03);">';
|
||||||
|
html += '<span style="color: #6c757d; font-size: 0.875rem;">Queue Size: </span>';
|
||||||
|
html += '<span style="font-weight: 500;">' + data.queue_size + '</span>';
|
||||||
|
html += '</div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Failed jobs warning
|
||||||
|
if (data.failed_jobs_24h > 0) {
|
||||||
|
html += '<div style="background: #fff5f5; border: 1px solid #feb2b2; border-radius: 6px; padding: 0.75rem; color: #c53030;">';
|
||||||
|
html += '<strong>⚠️ Failed Jobs (24h):</strong> ' + data.failed_jobs_24h;
|
||||||
|
html += '</div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
html += '</div>'; // Close main container
|
||||||
|
statusEl.innerHTML = html;
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
var statusEl = document.getElementById('scheduler-health-status');
|
||||||
|
if (statusEl) {
|
||||||
|
statusEl.innerHTML = '<div class="alert alert-warning">Unable to fetch health status. Ensure scheduler-webhook plugin is installed.</div>';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load on page ready
|
||||||
|
if (document.readyState === 'loading') {
|
||||||
|
document.addEventListener('DOMContentLoaded', loadHealthStatus);
|
||||||
|
} else {
|
||||||
|
loadHealthStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Refresh every 30 seconds
|
||||||
|
setInterval(loadHealthStatus, 30000);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
markdown: false
|
||||||
|
|
||||||
|
trigger_methods:
|
||||||
|
type: display
|
||||||
|
label: Active Triggers
|
||||||
|
content: |
|
||||||
|
<div id="scheduler-triggers">
|
||||||
|
<div class="text-muted">Checking triggers...</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
(function() {
|
||||||
|
function loadTriggers() {
|
||||||
|
// Check cron status from the main status field
|
||||||
|
var cronReady = false;
|
||||||
|
var statusDiv = document.querySelector('.cronstatus-status');
|
||||||
|
if (statusDiv) {
|
||||||
|
var statusText = statusDiv.textContent || statusDiv.innerText;
|
||||||
|
cronReady = statusText.includes('Ready');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check webhook status
|
||||||
|
fetch(window.location.origin + '/grav-editor-pro/scheduler/health')
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
var triggersEl = document.getElementById('scheduler-triggers');
|
||||||
|
if (!triggersEl) return;
|
||||||
|
|
||||||
|
var html = '<div style="display: flex; flex-direction: column; gap: 0.5rem;">';
|
||||||
|
|
||||||
|
// Cron trigger card
|
||||||
|
var cronIcon = cronReady ? '✅' : '❌';
|
||||||
|
var cronStatus = cronReady ? 'Active' : 'Not Configured';
|
||||||
|
var cronStatusColor = cronReady ? '#28a745' : '#6c757d';
|
||||||
|
var cardBg = cronReady ? '#f8f9fa' : '#fff';
|
||||||
|
|
||||||
|
html += '<div style="display: flex; align-items: center; justify-content: space-between; padding: 0.75rem 1rem; background: ' + cardBg + '; border: 1px solid #e9ecef; border-radius: 4px;">';
|
||||||
|
html += '<div style="display: flex; align-items: center; gap: 0.75rem;">';
|
||||||
|
html += '<span style="font-size: 1.25rem; line-height: 1;">' + cronIcon + '</span>';
|
||||||
|
html += '<span style="font-weight: 500; color: #212529; font-size: 1rem;">Cron:</span>';
|
||||||
|
html += '</div>';
|
||||||
|
html += '<span style="background: ' + cronStatusColor + '; color: white; padding: 0.25rem 0.75rem; font-size: 0.875rem; font-weight: 500; border-radius: 3px; text-transform: uppercase; letter-spacing: 0.025em;">' + cronStatus + '</span>';
|
||||||
|
html += '</div>';
|
||||||
|
|
||||||
|
// Webhook trigger card
|
||||||
|
if (data.webhook_enabled) {
|
||||||
|
html += '<div style="display: flex; align-items: center; justify-content: space-between; padding: 0.75rem 1rem; background: #f8f9fa; border: 1px solid #e9ecef; border-radius: 4px;">';
|
||||||
|
html += '<div style="display: flex; align-items: center; gap: 0.75rem;">';
|
||||||
|
html += '<span style="font-size: 1.25rem; line-height: 1;">✅</span>';
|
||||||
|
html += '<span style="font-weight: 500; color: #212529; font-size: 1rem;">Webhook:</span>';
|
||||||
|
html += '</div>';
|
||||||
|
html += '<span style="background: #28a745; color: white; padding: 0.25rem 0.75rem; font-size: 0.875rem; font-weight: 500; border-radius: 3px; text-transform: uppercase; letter-spacing: 0.025em;">ACTIVE</span>';
|
||||||
|
html += '</div>';
|
||||||
|
} else {
|
||||||
|
// Show webhook as not configured/disabled
|
||||||
|
html += '<div style="display: flex; align-items: center; justify-content: space-between; padding: 0.75rem 1rem; background: #fff; border: 1px solid #e9ecef; border-radius: 4px;">';
|
||||||
|
html += '<div style="display: flex; align-items: center; gap: 0.75rem;">';
|
||||||
|
html += '<span style="font-size: 1.25rem; line-height: 1;">⚠️</span>';
|
||||||
|
html += '<span style="font-weight: 500; color: #212529; font-size: 1rem;">Webhook:</span>';
|
||||||
|
html += '</div>';
|
||||||
|
html += '<span style="background: #ffc107; color: #212529; padding: 0.25rem 0.75rem; font-size: 0.875rem; font-weight: 500; border-radius: 3px; text-transform: uppercase; letter-spacing: 0.025em;">DISABLED</span>';
|
||||||
|
html += '</div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
html += '</div>';
|
||||||
|
|
||||||
|
// Add warning if no triggers active
|
||||||
|
if (!cronReady && !data.webhook_enabled) {
|
||||||
|
html += '<div class="alert alert-warning" style="margin-top: 1rem;"><i class="fa fa-exclamation-triangle"></i> No triggers active! Configure cron or enable webhooks.</div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
triggersEl.innerHTML = html;
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
var triggersEl = document.getElementById('scheduler-triggers');
|
||||||
|
if (triggersEl) {
|
||||||
|
// Show just cron status if health endpoint not available
|
||||||
|
var html = '<ul class="list-unstyled">';
|
||||||
|
if (cronReady) {
|
||||||
|
html += '<li>✅ <strong>Cron:</strong> <span class="badge badge-success">Active</span></li>';
|
||||||
|
} else {
|
||||||
|
html += '<li>❌ <strong>Cron:</strong> <span class="badge badge-secondary">Not Configured</span></li>';
|
||||||
|
}
|
||||||
|
html += '<li>⚠️ <strong>Webhook:</strong> <span class="badge badge-secondary">Plugin Not Installed</span></li>';
|
||||||
|
html += '</ul>';
|
||||||
|
triggersEl.innerHTML = html;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load on page ready
|
||||||
|
if (document.readyState === 'loading') {
|
||||||
|
document.addEventListener('DOMContentLoaded', loadTriggers);
|
||||||
|
} else {
|
||||||
|
loadTriggers();
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
markdown: false
|
||||||
|
|
||||||
|
jobs_tab:
|
||||||
|
type: tab
|
||||||
|
title: PLUGIN_ADMIN.SCHEDULER_JOBS
|
||||||
|
|
||||||
|
fields:
|
||||||
|
jobs_title:
|
||||||
|
type: section
|
||||||
|
title: PLUGIN_ADMIN.SCHEDULER_JOBS
|
||||||
|
underline: true
|
||||||
|
|
||||||
|
custom_jobs:
|
||||||
|
type: list
|
||||||
|
style: vertical
|
||||||
|
label:
|
||||||
|
classes: cron-job-list compact
|
||||||
|
key: id
|
||||||
|
fields:
|
||||||
|
.id:
|
||||||
|
type: key
|
||||||
|
label: ID
|
||||||
|
placeholder: 'process-name'
|
||||||
|
validate:
|
||||||
|
required: true
|
||||||
|
pattern: '[a-zа-я0-9_\-]+'
|
||||||
|
max: 20
|
||||||
|
message: 'ID must be lowercase with dashes/underscores only and less than 20 characters'
|
||||||
|
.command:
|
||||||
|
type: text
|
||||||
|
label: PLUGIN_ADMIN.COMMAND
|
||||||
|
placeholder: 'ls'
|
||||||
|
validate:
|
||||||
|
required: true
|
||||||
|
.args:
|
||||||
|
type: text
|
||||||
|
label: PLUGIN_ADMIN.EXTRA_ARGUMENTS
|
||||||
|
placeholder: '-lah'
|
||||||
|
.at:
|
||||||
|
type: text
|
||||||
|
wrapper_classes: cron-selector
|
||||||
|
label: PLUGIN_ADMIN.SCHEDULER_RUNAT
|
||||||
|
help: PLUGIN_ADMIN.SCHEDULER_RUNAT_HELP
|
||||||
|
placeholder: '* * * * *'
|
||||||
|
validate:
|
||||||
|
required: true
|
||||||
|
.output:
|
||||||
|
type: text
|
||||||
|
label: PLUGIN_ADMIN.SCHEDULER_OUTPUT
|
||||||
|
help: PLUGIN_ADMIN.SCHEDULER_OUTPUT_HELP
|
||||||
|
placeholder: 'logs/ls-cron.out'
|
||||||
|
.output_mode:
|
||||||
|
type: select
|
||||||
|
label: PLUGIN_ADMIN.SCHEDULER_OUTPUT_TYPE
|
||||||
|
help: PLUGIN_ADMIN.SCHEDULER_OUTPUT_TYPE_HELP
|
||||||
|
default: append
|
||||||
|
options:
|
||||||
|
append: Append
|
||||||
|
overwrite: Overwrite
|
||||||
|
.email:
|
||||||
|
type: text
|
||||||
|
label: PLUGIN_ADMIN.SCHEDULER_EMAIL
|
||||||
|
help: PLUGIN_ADMIN.SCHEDULER_EMAIL_HELP
|
||||||
|
placeholder: 'notifications@yoursite.com'
|
||||||
|
|
||||||
|
modern_tab:
|
||||||
|
type: tab
|
||||||
|
title: Advanced Features
|
||||||
|
|
||||||
|
fields:
|
||||||
|
workers_section:
|
||||||
|
type: section
|
||||||
|
title: Worker Configuration
|
||||||
|
underline: true
|
||||||
|
|
||||||
|
fields:
|
||||||
|
modern.workers:
|
||||||
|
type: number
|
||||||
|
label: Concurrent Workers
|
||||||
|
help: Number of jobs that can run simultaneously (1 = sequential)
|
||||||
|
default: 4
|
||||||
|
size: x-small
|
||||||
|
append: workers
|
||||||
|
validate:
|
||||||
|
type: int
|
||||||
|
min: 1
|
||||||
|
max: 10
|
||||||
|
|
||||||
|
retry_section:
|
||||||
|
type: section
|
||||||
|
title: Retry Configuration
|
||||||
|
underline: true
|
||||||
|
|
||||||
|
fields:
|
||||||
|
modern.retry.enabled:
|
||||||
|
type: toggle
|
||||||
|
label: Enable Job Retry
|
||||||
|
help: Automatically retry failed jobs
|
||||||
|
highlight: 1
|
||||||
|
default: 1
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.ENABLED
|
||||||
|
0: PLUGIN_ADMIN.DISABLED
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
modern.retry.max_attempts:
|
||||||
|
type: number
|
||||||
|
label: Maximum Retry Attempts
|
||||||
|
help: Maximum number of times to retry a failed job
|
||||||
|
default: 3
|
||||||
|
size: x-small
|
||||||
|
append: retries
|
||||||
|
validate:
|
||||||
|
type: int
|
||||||
|
min: 1
|
||||||
|
max: 10
|
||||||
|
|
||||||
|
modern.retry.backoff:
|
||||||
|
type: select
|
||||||
|
label: Retry Backoff Strategy
|
||||||
|
help: How to calculate delay between retries
|
||||||
|
default: exponential
|
||||||
|
options:
|
||||||
|
linear: Linear (fixed delay)
|
||||||
|
exponential: Exponential (increasing delay)
|
||||||
|
|
||||||
|
queue_section:
|
||||||
|
type: section
|
||||||
|
title: Queue Configuration
|
||||||
|
underline: true
|
||||||
|
|
||||||
|
fields:
|
||||||
|
modern.queue.path:
|
||||||
|
type: text
|
||||||
|
label: Queue Storage Path
|
||||||
|
help: Where to store queued jobs
|
||||||
|
default: 'user-data://scheduler/queue'
|
||||||
|
placeholder: 'user-data://scheduler/queue'
|
||||||
|
|
||||||
|
modern.queue.max_size:
|
||||||
|
type: number
|
||||||
|
label: Maximum Queue Size
|
||||||
|
help: Maximum number of jobs that can be queued
|
||||||
|
default: 1000
|
||||||
|
size: x-small
|
||||||
|
append: jobs
|
||||||
|
validate:
|
||||||
|
type: int
|
||||||
|
min: 100
|
||||||
|
max: 10000
|
||||||
|
|
||||||
|
history_section:
|
||||||
|
type: section
|
||||||
|
title: Job History
|
||||||
|
underline: true
|
||||||
|
|
||||||
|
fields:
|
||||||
|
modern.history.enabled:
|
||||||
|
type: toggle
|
||||||
|
label: Enable Job History
|
||||||
|
help: Track execution history for all jobs
|
||||||
|
highlight: 1
|
||||||
|
default: 1
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.ENABLED
|
||||||
|
0: PLUGIN_ADMIN.DISABLED
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
modern.history.retention_days:
|
||||||
|
type: number
|
||||||
|
label: History Retention (days)
|
||||||
|
help: How long to keep job history
|
||||||
|
default: 30
|
||||||
|
size: x-small
|
||||||
|
append: days
|
||||||
|
validate:
|
||||||
|
type: int
|
||||||
|
min: 1
|
||||||
|
max: 365
|
||||||
|
|
||||||
|
webhook_section:
|
||||||
|
type: section
|
||||||
|
title: Webhook Configuration
|
||||||
|
underline: true
|
||||||
|
|
||||||
|
fields:
|
||||||
|
webhook_plugin_status:
|
||||||
|
type: webhook-status
|
||||||
|
label:
|
||||||
|
modern.webhook.enabled:
|
||||||
|
type: toggle
|
||||||
|
label: Enable Webhook Triggers
|
||||||
|
help: Allow triggering scheduler via HTTP webhook
|
||||||
|
highlight: 0
|
||||||
|
default: 0
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.ENABLED
|
||||||
|
0: PLUGIN_ADMIN.DISABLED
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
modern.webhook.token:
|
||||||
|
type: text
|
||||||
|
label: Webhook Security Token
|
||||||
|
help: Secret token for authenticating webhook requests. Keep this secret!
|
||||||
|
placeholder: 'Click Generate to create a secure token'
|
||||||
|
autocomplete: 'off'
|
||||||
|
|
||||||
|
webhook_token_generate:
|
||||||
|
type: display
|
||||||
|
label:
|
||||||
|
content: |
|
||||||
|
<div style="margin-top: -10px; margin-bottom: 15px;">
|
||||||
|
<button type="button" class="button button-primary" onclick="generateWebhookToken()">
|
||||||
|
<i class="fa fa-refresh"></i> Generate Token
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
function generateWebhookToken() {
|
||||||
|
try {
|
||||||
|
// Generate token
|
||||||
|
const array = new Uint8Array(32);
|
||||||
|
crypto.getRandomValues(array);
|
||||||
|
const token = Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');
|
||||||
|
|
||||||
|
// Try multiple selectors to find the field
|
||||||
|
let field = document.querySelector('[name="data[scheduler][modern][webhook][token]"]');
|
||||||
|
if (!field) {
|
||||||
|
field = document.querySelector('input[name*="webhook][token"]');
|
||||||
|
}
|
||||||
|
if (!field) {
|
||||||
|
field = document.getElementById('scheduler-modern-webhook-token');
|
||||||
|
}
|
||||||
|
if (!field) {
|
||||||
|
// Look for any text input in the webhook section
|
||||||
|
const webhookSection = document.querySelector('.webhook_section');
|
||||||
|
if (webhookSection) {
|
||||||
|
const inputs = webhookSection.querySelectorAll('input[type="text"]');
|
||||||
|
// Find the token field by checking for the placeholder
|
||||||
|
for (let input of inputs) {
|
||||||
|
if (input.placeholder && input.placeholder.includes('Generate')) {
|
||||||
|
field = input;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (field) {
|
||||||
|
field.value = token;
|
||||||
|
field.dispatchEvent(new Event('change', { bubbles: true }));
|
||||||
|
field.dispatchEvent(new Event('input', { bubbles: true }));
|
||||||
|
// Flash the field to show it was updated
|
||||||
|
field.style.backgroundColor = '#d4edda';
|
||||||
|
setTimeout(function() {
|
||||||
|
field.style.backgroundColor = '';
|
||||||
|
}, 500);
|
||||||
|
// Also try to trigger Grav's form change detection
|
||||||
|
if (window.jQuery) {
|
||||||
|
jQuery(field).trigger('change');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Log more debugging info
|
||||||
|
console.error('Token field not found. Looking for input fields...');
|
||||||
|
console.log('All inputs:', document.querySelectorAll('input[type="text"]'));
|
||||||
|
alert('Could not find the token field. Please ensure you are in the Advanced Features tab and the Webhook Configuration section is visible.');
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Error generating token:', e);
|
||||||
|
alert('Error generating token: ' + e.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
markdown: false
|
||||||
|
|
||||||
|
modern.webhook.path:
|
||||||
|
type: text
|
||||||
|
label: Webhook Path
|
||||||
|
help: URL path for webhook endpoint
|
||||||
|
default: '/scheduler/webhook'
|
||||||
|
placeholder: '/scheduler/webhook'
|
||||||
|
|
||||||
|
health_section:
|
||||||
|
type: section
|
||||||
|
title: Health Check Configuration
|
||||||
|
underline: true
|
||||||
|
|
||||||
|
fields:
|
||||||
|
modern.health.enabled:
|
||||||
|
type: toggle
|
||||||
|
label: Enable Health Check
|
||||||
|
help: Provide health status endpoint for monitoring
|
||||||
|
highlight: 1
|
||||||
|
default: 1
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.ENABLED
|
||||||
|
0: PLUGIN_ADMIN.DISABLED
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
modern.health.path:
|
||||||
|
type: text
|
||||||
|
label: Health Check Path
|
||||||
|
help: URL path for health check endpoint
|
||||||
|
default: '/scheduler/health'
|
||||||
|
placeholder: '/scheduler/health'
|
||||||
|
|
||||||
|
webhook_usage:
|
||||||
|
type: section
|
||||||
|
title: Usage Examples
|
||||||
|
underline: true
|
||||||
|
|
||||||
|
fields:
|
||||||
|
webhook_examples:
|
||||||
|
type: display
|
||||||
|
label:
|
||||||
|
content: |
|
||||||
|
<script src="{{ url('plugin://admin/themes/grav/js/clipboard-helper.js') }}"></script>
|
||||||
|
<div class="webhook-examples">
|
||||||
|
<script>
|
||||||
|
// Initialize webhook commands when page loads
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
if (typeof GravClipboard !== 'undefined') {
|
||||||
|
GravClipboard.initWebhookCommands();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="alert alert-info">
|
||||||
|
<h4>How to use webhooks:</h4>
|
||||||
|
|
||||||
|
<div style="margin-bottom: 1rem;">
|
||||||
|
<label style="display: block; margin-bottom: 0.25rem; font-weight: 500;">Trigger all due jobs (respects schedule):</label>
|
||||||
|
<div class="form-input-wrapper form-input-addon-wrapper">
|
||||||
|
<textarea id="webhook-all-cmd" readonly rows="2" style="font-family: monospace; background: #f5f5f5; resize: none;">Loading...</textarea>
|
||||||
|
<div class="form-input-addon form-input-append" style="cursor: pointer;" onclick="GravClipboard.copy(this)"><i class="fa fa-copy"></i> Copy</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="margin-bottom: 1rem;">
|
||||||
|
<label style="display: block; margin-bottom: 0.25rem; font-weight: 500;">Force-run specific job (ignores schedule):</label>
|
||||||
|
<div class="form-input-wrapper form-input-addon-wrapper">
|
||||||
|
<textarea id="webhook-job-cmd" readonly rows="2" style="font-family: monospace; background: #f5f5f5; resize: none;">Loading...</textarea>
|
||||||
|
<div class="form-input-addon form-input-append" style="cursor: pointer;" onclick="GravClipboard.copy(this)"><i class="fa fa-copy"></i> Copy</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="margin-bottom: 1rem;">
|
||||||
|
<label style="display: block; margin-bottom: 0.25rem; font-weight: 500;">Check health status:</label>
|
||||||
|
<div class="form-input-wrapper form-input-addon-wrapper">
|
||||||
|
<input type="text" id="webhook-health-cmd" readonly value="Loading..." style="font-family: monospace; background: #f5f5f5;">
|
||||||
|
<div class="form-input-addon form-input-append" style="cursor: pointer;" onclick="GravClipboard.copy(this)"><i class="fa fa-copy"></i> Copy</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="margin-top: 1rem;">
|
||||||
|
<p><strong>GitHub Actions example:</strong></p>
|
||||||
|
<pre>- name: Trigger Scheduler
|
||||||
|
run: |
|
||||||
|
curl -X POST ${{ secrets.SITE_URL }}/scheduler/webhook \
|
||||||
|
-H "Authorization: Bearer ${{ secrets.WEBHOOK_TOKEN }}"</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
markdown: false
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ form:
|
|||||||
"D, d M Y G:i:s": Date3
|
"D, d M Y G:i:s": Date3
|
||||||
"d-m-y G:i": Date4
|
"d-m-y G:i": Date4
|
||||||
"jS M Y": Date5
|
"jS M Y": Date5
|
||||||
|
"Y-m-d G:i": Date6
|
||||||
|
|
||||||
pages.dateformat.long:
|
pages.dateformat.long:
|
||||||
type: dateformat
|
type: dateformat
|
||||||
@@ -116,6 +117,7 @@ form:
|
|||||||
"D, d M Y G:i:s": Date3
|
"D, d M Y G:i:s": Date3
|
||||||
"d-m-y G:i": Date4
|
"d-m-y G:i": Date4
|
||||||
"jS M Y": Date5
|
"jS M Y": Date5
|
||||||
|
"Y-m-d G:i:s": Date6
|
||||||
|
|
||||||
pages.order.by:
|
pages.order.by:
|
||||||
type: select
|
type: select
|
||||||
@@ -177,39 +179,47 @@ form:
|
|||||||
label: PLUGIN_ADMIN.APPEND_URL_EXT
|
label: PLUGIN_ADMIN.APPEND_URL_EXT
|
||||||
help: PLUGIN_ADMIN.APPEND_URL_EXT_HELP
|
help: PLUGIN_ADMIN.APPEND_URL_EXT_HELP
|
||||||
|
|
||||||
pages.redirect_default_route:
|
|
||||||
type: toggle
|
|
||||||
label: PLUGIN_ADMIN.REDIRECT_DEFAULT_ROUTE
|
|
||||||
help: PLUGIN_ADMIN.REDIRECT_DEFAULT_ROUTE_HELP
|
|
||||||
highlight: 0
|
|
||||||
options:
|
|
||||||
1: PLUGIN_ADMIN.YES
|
|
||||||
0: PLUGIN_ADMIN.NO
|
|
||||||
validate:
|
|
||||||
type: bool
|
|
||||||
|
|
||||||
pages.redirect_default_code:
|
pages.redirect_default_code:
|
||||||
type: select
|
type: select
|
||||||
size: medium
|
size: medium
|
||||||
classes: fancy
|
classes: fancy
|
||||||
label: PLUGIN_ADMIN.REDIRECT_DEFAULT_CODE
|
label: PLUGIN_ADMIN.REDIRECT_DEFAULT_CODE
|
||||||
help: PLUGIN_ADMIN.REDIRECT_DEFAULT_CODE_HELP
|
help: PLUGIN_ADMIN.REDIRECT_DEFAULT_CODE_HELP
|
||||||
|
default: 302
|
||||||
options:
|
options:
|
||||||
301: 301 - Permanent
|
301: PLUGIN_ADMIN.REDIRECT_OPTION_301
|
||||||
302: 302 - Found
|
302: PLUGIN_ADMIN.REDIRECT_OPTION_302
|
||||||
303: 303 - Other
|
303: PLUGIN_ADMIN.REDIRECT_OPTION_303
|
||||||
304: 304 - Not Modified
|
|
||||||
|
pages.redirect_default_route:
|
||||||
|
type: select
|
||||||
|
size: medium
|
||||||
|
classes: fancy
|
||||||
|
label: PLUGIN_ADMIN.REDIRECT_DEFAULT_ROUTE
|
||||||
|
help: PLUGIN_ADMIN.REDIRECT_DEFAULT_ROUTE_HELP
|
||||||
|
default: 0
|
||||||
|
options:
|
||||||
|
0: PLUGIN_ADMIN.REDIRECT_OPTION_NO_REDIRECT
|
||||||
|
1: PLUGIN_ADMIN.REDIRECT_OPTION_DEFAULT_REDIRECT
|
||||||
|
301: PLUGIN_ADMIN.REDIRECT_OPTION_301
|
||||||
|
302: PLUGIN_ADMIN.REDIRECT_OPTION_302
|
||||||
|
validate:
|
||||||
|
type: int
|
||||||
|
|
||||||
pages.redirect_trailing_slash:
|
pages.redirect_trailing_slash:
|
||||||
type: toggle
|
type: select
|
||||||
|
size: medium
|
||||||
|
classes: fancy
|
||||||
label: PLUGIN_ADMIN.REDIRECT_TRAILING_SLASH
|
label: PLUGIN_ADMIN.REDIRECT_TRAILING_SLASH
|
||||||
help: PLUGIN_ADMIN.REDIRECT_TRAILING_SLASH_HELP
|
help: PLUGIN_ADMIN.REDIRECT_TRAILING_SLASH_HELP
|
||||||
highlight: 1
|
default: 1
|
||||||
options:
|
options:
|
||||||
1: PLUGIN_ADMIN.YES
|
0: PLUGIN_ADMIN.REDIRECT_OPTION_NO_REDIRECT
|
||||||
0: PLUGIN_ADMIN.NO
|
1: PLUGIN_ADMIN.REDIRECT_OPTION_DEFAULT_REDIRECT
|
||||||
|
301: PLUGIN_ADMIN.REDIRECT_OPTION_301
|
||||||
|
302: PLUGIN_ADMIN.REDIRECT_OPTION_302
|
||||||
validate:
|
validate:
|
||||||
type: bool
|
type: int
|
||||||
|
|
||||||
pages.ignore_hidden:
|
pages.ignore_hidden:
|
||||||
type: toggle
|
type: toggle
|
||||||
@@ -241,13 +251,15 @@ form:
|
|||||||
type: commalist
|
type: commalist
|
||||||
|
|
||||||
pages.hide_empty_folders:
|
pages.hide_empty_folders:
|
||||||
type: selectize
|
type: toggle
|
||||||
size: large
|
|
||||||
label: PLUGIN_ADMIN.HIDE_EMPTY_FOLDERS
|
label: PLUGIN_ADMIN.HIDE_EMPTY_FOLDERS
|
||||||
help: PLUGIN_ADMIN.HIDE_EMPTY_FOLDERS_HELP
|
help: PLUGIN_ADMIN.HIDE_EMPTY_FOLDERS_HELP
|
||||||
classes: fancy
|
highlight: 0
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
validate:
|
validate:
|
||||||
type: commalist
|
type: bool
|
||||||
|
|
||||||
pages.url_taxonomy_filters:
|
pages.url_taxonomy_filters:
|
||||||
type: toggle
|
type: toggle
|
||||||
@@ -385,8 +397,8 @@ form:
|
|||||||
|
|
||||||
languages.translations:
|
languages.translations:
|
||||||
type: toggle
|
type: toggle
|
||||||
label: PLUGIN_ADMIN.TRANSLATIONS_ENABLED
|
label: PLUGIN_ADMIN.LANGUAGE_TRANSLATIONS
|
||||||
help: PLUGIN_ADMIN.TRANSLATIONS_ENABLED_HELP
|
help: PLUGIN_ADMIN.LANGUAGE_TRANSLATIONS_HELP
|
||||||
highlight: 1
|
highlight: 1
|
||||||
options:
|
options:
|
||||||
1: PLUGIN_ADMIN.YES
|
1: PLUGIN_ADMIN.YES
|
||||||
@@ -438,6 +450,17 @@ form:
|
|||||||
validate:
|
validate:
|
||||||
type: bool
|
type: bool
|
||||||
|
|
||||||
|
languages.debug:
|
||||||
|
type: toggle
|
||||||
|
label: PLUGIN_ADMIN.LANGUAGE_DEBUG
|
||||||
|
help: PLUGIN_ADMIN.LANGUAGE_DEBUG_HELP
|
||||||
|
highlight: 0
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
http_headers:
|
http_headers:
|
||||||
type: tab
|
type: tab
|
||||||
title: PLUGIN_ADMIN.HTTP_HEADERS
|
title: PLUGIN_ADMIN.HTTP_HEADERS
|
||||||
@@ -544,6 +567,15 @@ form:
|
|||||||
0: PLUGIN_ADMIN.NO
|
0: PLUGIN_ADMIN.NO
|
||||||
validate:
|
validate:
|
||||||
type: bool
|
type: bool
|
||||||
|
pages.markdown.valid_link_attributes:
|
||||||
|
type: selectize
|
||||||
|
size: large
|
||||||
|
label: PLUGIN_ADMIN.VALID_LINK_ATTRIBUTES
|
||||||
|
help: PLUGIN_ADMIN.VALID_LINK_ATTRIBUTES_HELP
|
||||||
|
placeholder: "rel, target, id, class, classes"
|
||||||
|
classes: fancy
|
||||||
|
validate:
|
||||||
|
type: commalist
|
||||||
|
|
||||||
caching:
|
caching:
|
||||||
type: tab
|
type: tab
|
||||||
@@ -589,7 +621,6 @@ form:
|
|||||||
file: File
|
file: File
|
||||||
apc: APC
|
apc: APC
|
||||||
apcu: APCu
|
apcu: APCu
|
||||||
xcache: Xcache
|
|
||||||
memcache: Memcache
|
memcache: Memcache
|
||||||
memcached: Memcached
|
memcached: Memcached
|
||||||
wincache: WinCache
|
wincache: WinCache
|
||||||
@@ -602,6 +633,19 @@ form:
|
|||||||
help: PLUGIN_ADMIN.CACHE_PREFIX_HELP
|
help: PLUGIN_ADMIN.CACHE_PREFIX_HELP
|
||||||
placeholder: PLUGIN_ADMIN.CACHE_PREFIX_PLACEHOLDER
|
placeholder: PLUGIN_ADMIN.CACHE_PREFIX_PLACEHOLDER
|
||||||
|
|
||||||
|
cache.purge_max_age_days:
|
||||||
|
type: text
|
||||||
|
size: x-small
|
||||||
|
append: GRAV.NICETIME.DAY_PLURAL
|
||||||
|
label: PLUGIN_ADMIN.CACHE_PURGE_AGE
|
||||||
|
help: PLUGIN_ADMIN.CACHE_PURGE_AGE_HELP
|
||||||
|
validate:
|
||||||
|
type: number
|
||||||
|
min: 1
|
||||||
|
max: 365
|
||||||
|
step: 1
|
||||||
|
default: 30
|
||||||
|
|
||||||
cache.purge_at:
|
cache.purge_at:
|
||||||
type: cron
|
type: cron
|
||||||
label: PLUGIN_ADMIN.CACHE_PURGE_JOB
|
label: PLUGIN_ADMIN.CACHE_PURGE_JOB
|
||||||
@@ -627,7 +671,7 @@ form:
|
|||||||
type: toggle
|
type: toggle
|
||||||
label: PLUGIN_ADMIN.CLEAR_IMAGES_BY_DEFAULT
|
label: PLUGIN_ADMIN.CLEAR_IMAGES_BY_DEFAULT
|
||||||
help: PLUGIN_ADMIN.CLEAR_IMAGES_BY_DEFAULT_HELP
|
help: PLUGIN_ADMIN.CLEAR_IMAGES_BY_DEFAULT_HELP
|
||||||
highlight: 1
|
highlight: 0
|
||||||
options:
|
options:
|
||||||
1: PLUGIN_ADMIN.YES
|
1: PLUGIN_ADMIN.YES
|
||||||
0: PLUGIN_ADMIN.NO
|
0: PLUGIN_ADMIN.NO
|
||||||
@@ -730,6 +774,74 @@ form:
|
|||||||
size: small
|
size: small
|
||||||
label: PLUGIN_ADMIN.REDIS_PASSWORD
|
label: PLUGIN_ADMIN.REDIS_PASSWORD
|
||||||
|
|
||||||
|
cache.redis.database:
|
||||||
|
type: text
|
||||||
|
size: medium
|
||||||
|
label: PLUGIN_ADMIN.REDIS_DATABASE
|
||||||
|
help: PLUGIN_ADMIN.REDIS_DATABASE_HELP
|
||||||
|
placeholder: "0"
|
||||||
|
validate:
|
||||||
|
type: number
|
||||||
|
min: 0
|
||||||
|
|
||||||
|
flex_caching:
|
||||||
|
type: section
|
||||||
|
title: PLUGIN_ADMIN.FLEX_CACHING
|
||||||
|
|
||||||
|
flex.cache.index.enabled:
|
||||||
|
type: toggle
|
||||||
|
label: PLUGIN_ADMIN.FLEX_INDEX_CACHE_ENABLED
|
||||||
|
highlight: 1
|
||||||
|
default: 1
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.ENABLED
|
||||||
|
0: PLUGIN_ADMIN.DISABLED
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
flex.cache.index.lifetime:
|
||||||
|
type: text
|
||||||
|
label: PLUGIN_ADMIN.FLEX_INDEX_CACHE_LIFETIME
|
||||||
|
default: 60
|
||||||
|
validate:
|
||||||
|
type: int
|
||||||
|
|
||||||
|
flex.cache.object.enabled:
|
||||||
|
type: toggle
|
||||||
|
label: PLUGIN_ADMIN.FLEX_OBJECT_CACHE_ENABLED
|
||||||
|
highlight: 1
|
||||||
|
default: 1
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.ENABLED
|
||||||
|
0: PLUGIN_ADMIN.DISABLED
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
flex.cache.object.lifetime:
|
||||||
|
type: text
|
||||||
|
label: PLUGIN_ADMIN.FLEX_OBJECT_CACHE_LIFETIME
|
||||||
|
default: 600
|
||||||
|
validate:
|
||||||
|
type: int
|
||||||
|
|
||||||
|
flex.cache.render.enabled:
|
||||||
|
type: toggle
|
||||||
|
label: PLUGIN_ADMIN.FLEX_RENDER_CACHE_ENABLED
|
||||||
|
highlight: 1
|
||||||
|
default: 1
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.ENABLED
|
||||||
|
0: PLUGIN_ADMIN.DISABLED
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
flex.cache.render.lifetime:
|
||||||
|
type: text
|
||||||
|
label: PLUGIN_ADMIN.FLEX_RENDER_CACHE_LIFETIME
|
||||||
|
default: 600
|
||||||
|
validate:
|
||||||
|
type: int
|
||||||
|
|
||||||
twig:
|
twig:
|
||||||
type: tab
|
type: tab
|
||||||
title: PLUGIN_ADMIN.TWIG_TEMPLATING
|
title: PLUGIN_ADMIN.TWIG_TEMPLATING
|
||||||
@@ -777,7 +889,8 @@ form:
|
|||||||
type: toggle
|
type: toggle
|
||||||
label: PLUGIN_ADMIN.AUTOESCAPE_VARIABLES
|
label: PLUGIN_ADMIN.AUTOESCAPE_VARIABLES
|
||||||
help: PLUGIN_ADMIN.AUTOESCAPE_VARIABLES_HELP
|
help: PLUGIN_ADMIN.AUTOESCAPE_VARIABLES_HELP
|
||||||
highlight: 0
|
highlight: 1
|
||||||
|
default: 1
|
||||||
options:
|
options:
|
||||||
1: PLUGIN_ADMIN.YES
|
1: PLUGIN_ADMIN.YES
|
||||||
0: PLUGIN_ADMIN.NO
|
0: PLUGIN_ADMIN.NO
|
||||||
@@ -800,9 +913,45 @@ form:
|
|||||||
title: PLUGIN_ADMIN.ASSETS
|
title: PLUGIN_ADMIN.ASSETS
|
||||||
|
|
||||||
fields:
|
fields:
|
||||||
assets_section:
|
general_config_section:
|
||||||
type: section
|
type: section
|
||||||
title: PLUGIN_ADMIN.ASSETS
|
title: PLUGIN_ADMIN.GENERAL_CONFIG
|
||||||
|
underline: true
|
||||||
|
|
||||||
|
assets.enable_asset_timestamp:
|
||||||
|
type: toggle
|
||||||
|
label: PLUGIN_ADMIN.ENABLED_TIMESTAMPS_ON_ASSETS
|
||||||
|
help: PLUGIN_ADMIN.ENABLED_TIMESTAMPS_ON_ASSETS_HELP
|
||||||
|
highlight: 0
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
assets.enable_asset_sri:
|
||||||
|
type: toggle
|
||||||
|
label: PLUGIN_ADMIN.ENABLED_SRI_ON_ASSETS
|
||||||
|
help: PLUGIN_ADMIN.ENABLED_SRI_ON_ASSETS_HELP
|
||||||
|
highlight: 0
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
assets.collections:
|
||||||
|
type: multilevel
|
||||||
|
label: PLUGIN_ADMIN.COLLECTIONS
|
||||||
|
placeholder_key: collection_name
|
||||||
|
placeholder_value: collection_path
|
||||||
|
validate:
|
||||||
|
type: array
|
||||||
|
|
||||||
|
|
||||||
|
css_assets_section:
|
||||||
|
type: section
|
||||||
|
title: PLUGIN_ADMIN.CSS_ASSETS
|
||||||
underline: true
|
underline: true
|
||||||
|
|
||||||
assets.css_pipeline:
|
assets.css_pipeline:
|
||||||
@@ -871,6 +1020,11 @@ form:
|
|||||||
validate:
|
validate:
|
||||||
type: bool
|
type: bool
|
||||||
|
|
||||||
|
js_assets_section:
|
||||||
|
type: section
|
||||||
|
title: PLUGIN_ADMIN.JS_ASSETS
|
||||||
|
underline: true
|
||||||
|
|
||||||
assets.js_pipeline:
|
assets.js_pipeline:
|
||||||
type: toggle
|
type: toggle
|
||||||
label: PLUGIN_ADMIN.JAVASCRIPT_PIPELINE
|
label: PLUGIN_ADMIN.JAVASCRIPT_PIPELINE
|
||||||
@@ -915,10 +1069,15 @@ form:
|
|||||||
validate:
|
validate:
|
||||||
type: bool
|
type: bool
|
||||||
|
|
||||||
assets.enable_asset_timestamp:
|
js_module_assets_section:
|
||||||
|
type: section
|
||||||
|
title: PLUGIN_ADMIN.JS_MODULE_ASSETS
|
||||||
|
underline: true
|
||||||
|
|
||||||
|
assets.js_module_pipeline:
|
||||||
type: toggle
|
type: toggle
|
||||||
label: PLUGIN_ADMIN.ENABLED_TIMESTAMPS_ON_ASSETS
|
label: PLUGIN_ADMIN.JAVASCRIPT_MODULE_PIPELINE
|
||||||
help: PLUGIN_ADMIN.ENABLED_TIMESTAMPS_ON_ASSETS_HELP
|
help: PLUGIN_ADMIN.JAVASCRIPT_MODULE_PIPELINE_HELP
|
||||||
highlight: 0
|
highlight: 0
|
||||||
options:
|
options:
|
||||||
1: PLUGIN_ADMIN.YES
|
1: PLUGIN_ADMIN.YES
|
||||||
@@ -926,13 +1085,29 @@ form:
|
|||||||
validate:
|
validate:
|
||||||
type: bool
|
type: bool
|
||||||
|
|
||||||
assets.collections:
|
assets.js_module_pipeline_include_externals:
|
||||||
type: multilevel
|
type: toggle
|
||||||
label: PLUGIN_ADMIN.COLLECTIONS
|
label: PLUGIN_ADMIN.JAVASCRIPT_MODULE_PIPELINE_INCLUDE_EXTERNALS
|
||||||
placeholder_key: collection_name
|
help: PLUGIN_ADMIN.JAVASCRIPT_MODULE_PIPELINE_INCLUDE_EXTERNALS_HELP
|
||||||
placeholder_value: collection_path
|
highlight: 1
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
validate:
|
validate:
|
||||||
type: array
|
type: bool
|
||||||
|
|
||||||
|
assets.js_module_pipeline_before_excludes:
|
||||||
|
type: toggle
|
||||||
|
label: PLUGIN_ADMIN.JAVASCRIPT_MODULE_PIPELINE_BEFORE_EXCLUDES
|
||||||
|
help: PLUGIN_ADMIN.JAVASCRIPT_MODULE_PIPELINE_BEFORE_EXCLUDES_HELP
|
||||||
|
highlight: 1
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
errors:
|
errors:
|
||||||
type: tab
|
type: tab
|
||||||
@@ -1006,6 +1181,13 @@ form:
|
|||||||
local6: local6
|
local6: local6
|
||||||
local7: local7
|
local7: local7
|
||||||
|
|
||||||
|
log.syslog.tag:
|
||||||
|
type: text
|
||||||
|
size: small
|
||||||
|
label: PLUGIN_ADMIN.SYSLOG_TAG
|
||||||
|
help: PLUGIN_ADMIN.SYSLOG_TAG_HELP
|
||||||
|
placeholder: "grav"
|
||||||
|
|
||||||
debugger:
|
debugger:
|
||||||
type: tab
|
type: tab
|
||||||
title: PLUGIN_ADMIN.DEBUGGER
|
title: PLUGIN_ADMIN.DEBUGGER
|
||||||
@@ -1039,8 +1221,8 @@ form:
|
|||||||
|
|
||||||
debugger.censored:
|
debugger.censored:
|
||||||
type: toggle
|
type: toggle
|
||||||
label: PLUGIN_ADMIN.SHOW_SENSITIVE
|
label: PLUGIN_ADMIN.DEBUGGER_CENSORED
|
||||||
help: PLUGIN_ADMIN.SHOW_SENSITIVE_HELP
|
help: PLUGIN_ADMIN.DEBUGGER_CENSORED_HELP
|
||||||
highlight: 0
|
highlight: 0
|
||||||
options:
|
options:
|
||||||
1: PLUGIN_ADMIN.YES
|
1: PLUGIN_ADMIN.YES
|
||||||
@@ -1069,6 +1251,16 @@ form:
|
|||||||
title: PLUGIN_ADMIN.MEDIA
|
title: PLUGIN_ADMIN.MEDIA
|
||||||
underline: true
|
underline: true
|
||||||
|
|
||||||
|
images.adapter:
|
||||||
|
type: select
|
||||||
|
size: small
|
||||||
|
label: PLUGIN_ADMIN.IMAGE_ADAPTER
|
||||||
|
help: PLUGIN_ADMIN.IMAGE_ADAPTER_HELP
|
||||||
|
highlight: gd
|
||||||
|
options:
|
||||||
|
gd: GD (PHP built-in)
|
||||||
|
imagick: Imagick
|
||||||
|
|
||||||
images.default_image_quality:
|
images.default_image_quality:
|
||||||
type: range
|
type: range
|
||||||
append: '%'
|
append: '%'
|
||||||
@@ -1114,13 +1306,46 @@ form:
|
|||||||
type: toggle
|
type: toggle
|
||||||
label: PLUGIN_ADMIN.IMAGES_AUTO_FIX_ORIENTATION
|
label: PLUGIN_ADMIN.IMAGES_AUTO_FIX_ORIENTATION
|
||||||
help: PLUGIN_ADMIN.IMAGES_AUTO_FIX_ORIENTATION_HELP
|
help: PLUGIN_ADMIN.IMAGES_AUTO_FIX_ORIENTATION_HELP
|
||||||
highlight: 0
|
highlight: 1
|
||||||
options:
|
options:
|
||||||
1: PLUGIN_ADMIN.YES
|
1: PLUGIN_ADMIN.YES
|
||||||
0: PLUGIN_ADMIN.NO
|
0: PLUGIN_ADMIN.NO
|
||||||
validate:
|
validate:
|
||||||
type: bool
|
type: bool
|
||||||
|
|
||||||
|
images.defaults.loading:
|
||||||
|
type: select
|
||||||
|
size: small
|
||||||
|
label: PLUGIN_ADMIN.IMAGES_LOADING
|
||||||
|
help: PLUGIN_ADMIN.IMAGES_LOADING_HELP
|
||||||
|
highlight: auto
|
||||||
|
options:
|
||||||
|
auto: Auto
|
||||||
|
lazy: Lazy
|
||||||
|
eager: Eager
|
||||||
|
|
||||||
|
images.defaults.decoding:
|
||||||
|
type: select
|
||||||
|
size: small
|
||||||
|
label: PLUGIN_ADMIN.IMAGES_DECODING
|
||||||
|
help: PLUGIN_ADMIN.IMAGES_DECODING_HELP
|
||||||
|
highlight: auto
|
||||||
|
options:
|
||||||
|
auto: Auto
|
||||||
|
sync: Sync
|
||||||
|
async: Async
|
||||||
|
|
||||||
|
images.defaults.fetchpriority:
|
||||||
|
type: select
|
||||||
|
size: small
|
||||||
|
label: PLUGIN_ADMIN.IMAGES_FETCHPRIORITY
|
||||||
|
help: PLUGIN_ADMIN.IMAGES_FETCHPRIORITY_HELP
|
||||||
|
highlight: auto
|
||||||
|
options:
|
||||||
|
auto: Auto
|
||||||
|
high: High
|
||||||
|
low: Low
|
||||||
|
|
||||||
images.seofriendly:
|
images.seofriendly:
|
||||||
type: toggle
|
type: toggle
|
||||||
label: PLUGIN_ADMIN.IMAGES_SEOFRIENDLY
|
label: PLUGIN_ADMIN.IMAGES_SEOFRIENDLY
|
||||||
@@ -1154,7 +1379,6 @@ form:
|
|||||||
validate:
|
validate:
|
||||||
type: bool
|
type: bool
|
||||||
|
|
||||||
|
|
||||||
media.allowed_fallback_types:
|
media.allowed_fallback_types:
|
||||||
type: selectize
|
type: selectize
|
||||||
size: large
|
size: large
|
||||||
@@ -1173,6 +1397,45 @@ form:
|
|||||||
validate:
|
validate:
|
||||||
type: commalist
|
type: commalist
|
||||||
|
|
||||||
|
section_images_cls:
|
||||||
|
type: section
|
||||||
|
title: PLUGIN_ADMIN.IMAGES_CLS_TITLE
|
||||||
|
underline: true
|
||||||
|
|
||||||
|
images.cls.auto_sizes:
|
||||||
|
type: toggle
|
||||||
|
label: PLUGIN_ADMIN.IMAGES_CLS_AUTO_SIZES
|
||||||
|
help: PLUGIN_ADMIN.IMAGES_CLS_AUTO_SIZES_HELP
|
||||||
|
highlight: 0
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
images.cls.aspect_ratio:
|
||||||
|
type: toggle
|
||||||
|
label: PLUGIN_ADMIN.IMAGES_CLS_ASPECT_RATIO
|
||||||
|
help: PLUGIN_ADMIN.IMAGES_CLS_ASPECT_RATIO_HELP
|
||||||
|
highlight: 0
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
images.cls.retina_scale:
|
||||||
|
type: select
|
||||||
|
label: PLUGIN_ADMIN.IMAGES_CLS_RETINA_SCALE
|
||||||
|
help: PLUGIN_ADMIN.IMAGES_CLS_RETINA_SCALE_HELP
|
||||||
|
size: small
|
||||||
|
highlight: 1
|
||||||
|
options:
|
||||||
|
1: 1X
|
||||||
|
2: 2X
|
||||||
|
3: 3X
|
||||||
|
4: 4X
|
||||||
|
|
||||||
session:
|
session:
|
||||||
type: tab
|
type: tab
|
||||||
title: PLUGIN_ADMIN.SESSION
|
title: PLUGIN_ADMIN.SESSION
|
||||||
@@ -1246,6 +1509,18 @@ form:
|
|||||||
validate:
|
validate:
|
||||||
type: bool
|
type: bool
|
||||||
|
|
||||||
|
session.secure_https:
|
||||||
|
type: toggle
|
||||||
|
label: PLUGIN_ADMIN.SESSION_SECURE_HTTPS
|
||||||
|
help: PLUGIN_ADMIN.SESSION_SECURE_HTTPS_HELP
|
||||||
|
highlight: 1
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
|
default: true
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
session.httponly:
|
session.httponly:
|
||||||
type: toggle
|
type: toggle
|
||||||
label: PLUGIN_ADMIN.SESSION_HTTPONLY
|
label: PLUGIN_ADMIN.SESSION_HTTPONLY
|
||||||
@@ -1258,12 +1533,24 @@ form:
|
|||||||
validate:
|
validate:
|
||||||
type: bool
|
type: bool
|
||||||
|
|
||||||
|
session.domain:
|
||||||
|
type: text
|
||||||
|
size: small
|
||||||
|
label: PLUGIN_ADMIN.SESSION_DOMAIN
|
||||||
|
help: PLUGIN_ADMIN.SESSION_DOMAIN_HELP
|
||||||
|
|
||||||
session.path:
|
session.path:
|
||||||
type: text
|
type: text
|
||||||
size: small
|
size: small
|
||||||
label: PLUGIN_ADMIN.SESSION_PATH
|
label: PLUGIN_ADMIN.SESSION_PATH
|
||||||
help: PLUGIN_ADMIN.SESSION_PATH_HELP
|
help: PLUGIN_ADMIN.SESSION_PATH_HELP
|
||||||
|
|
||||||
|
session.samesite:
|
||||||
|
type: text
|
||||||
|
size: small
|
||||||
|
label: PLUGIN_ADMIN.SESSION_SAMESITE
|
||||||
|
help: PLUGIN_ADMIN.SESSION_SAMESITE_HELP
|
||||||
|
|
||||||
session.split:
|
session.split:
|
||||||
type: toggle
|
type: toggle
|
||||||
label: PLUGIN_ADMIN.SESSION_SPLIT
|
label: PLUGIN_ADMIN.SESSION_SPLIT
|
||||||
@@ -1286,6 +1573,10 @@ form:
|
|||||||
title: PLUGIN_ADMIN.ADVANCED
|
title: PLUGIN_ADMIN.ADVANCED
|
||||||
underline: true
|
underline: true
|
||||||
|
|
||||||
|
gpm_section:
|
||||||
|
type: section
|
||||||
|
title: PLUGIN_ADMIN.GPM_SECTION
|
||||||
|
|
||||||
gpm.releases:
|
gpm.releases:
|
||||||
type: toggle
|
type: toggle
|
||||||
label: PLUGIN_ADMIN.GPM_RELEASES
|
label: PLUGIN_ADMIN.GPM_RELEASES
|
||||||
@@ -1295,23 +1586,6 @@ form:
|
|||||||
stable: PLUGIN_ADMIN.STABLE
|
stable: PLUGIN_ADMIN.STABLE
|
||||||
testing: PLUGIN_ADMIN.TESTING
|
testing: PLUGIN_ADMIN.TESTING
|
||||||
|
|
||||||
gpm.proxy_url:
|
|
||||||
type: text
|
|
||||||
size: medium
|
|
||||||
placeholder: "e.g. 127.0.0.1:3128"
|
|
||||||
label: PLUGIN_ADMIN.PROXY_URL
|
|
||||||
help: PLUGIN_ADMIN.PROXY_URL_HELP
|
|
||||||
|
|
||||||
gpm.method:
|
|
||||||
type: toggle
|
|
||||||
label: PLUGIN_ADMIN.GPM_METHOD
|
|
||||||
highlight: auto
|
|
||||||
help: PLUGIN_ADMIN.GPM_METHOD_HELP
|
|
||||||
options:
|
|
||||||
auto: PLUGIN_ADMIN.AUTO
|
|
||||||
fopen: PLUGIN_ADMIN.FOPEN
|
|
||||||
curl: PLUGIN_ADMIN.CURL
|
|
||||||
|
|
||||||
gpm.official_gpm_only:
|
gpm.official_gpm_only:
|
||||||
type: toggle
|
type: toggle
|
||||||
label: PLUGIN_ADMIN.GPM_OFFICIAL_ONLY
|
label: PLUGIN_ADMIN.GPM_OFFICIAL_ONLY
|
||||||
@@ -1324,17 +1598,105 @@ form:
|
|||||||
validate:
|
validate:
|
||||||
type: bool
|
type: bool
|
||||||
|
|
||||||
gpm.verify_peer:
|
updates_section:
|
||||||
|
type: section
|
||||||
|
title: PLUGIN_ADMIN.UPDATES_SECTION
|
||||||
|
|
||||||
|
updates.safe_upgrade:
|
||||||
type: toggle
|
type: toggle
|
||||||
label: PLUGIN_ADMIN.GPM_VERIFY_PEER
|
label: PLUGIN_ADMIN.SAFE_UPGRADE
|
||||||
|
help: PLUGIN_ADMIN.SAFE_UPGRADE_HELP
|
||||||
highlight: 1
|
highlight: 1
|
||||||
help: PLUGIN_ADMIN.GPM_VERIFY_PEER_HELP
|
default: true
|
||||||
options:
|
options:
|
||||||
1: PLUGIN_ADMIN.YES
|
1: PLUGIN_ADMIN.YES
|
||||||
0: PLUGIN_ADMIN.NO
|
0: PLUGIN_ADMIN.NO
|
||||||
validate:
|
validate:
|
||||||
type: bool
|
type: bool
|
||||||
|
|
||||||
|
updates.safe_upgrade_snapshot_limit:
|
||||||
|
type: number
|
||||||
|
label: PLUGIN_ADMIN.SAFE_UPGRADE_SNAPSHOT_LIMIT
|
||||||
|
help: PLUGIN_ADMIN.SAFE_UPGRADE_SNAPSHOT_LIMIT_HELP
|
||||||
|
default: 5
|
||||||
|
validate:
|
||||||
|
type: int
|
||||||
|
min: 0
|
||||||
|
|
||||||
|
http_section:
|
||||||
|
type: section
|
||||||
|
title: PLUGIN_ADMIN.HTTP_SECTION
|
||||||
|
|
||||||
|
http.method:
|
||||||
|
type: toggle
|
||||||
|
label: PLUGIN_ADMIN.GPM_METHOD
|
||||||
|
highlight: auto
|
||||||
|
help: PLUGIN_ADMIN.GPM_METHOD_HELP
|
||||||
|
options:
|
||||||
|
auto: PLUGIN_ADMIN.AUTO
|
||||||
|
fopen: PLUGIN_ADMIN.FOPEN
|
||||||
|
curl: PLUGIN_ADMIN.CURL
|
||||||
|
|
||||||
|
http.enable_proxy:
|
||||||
|
type: toggle
|
||||||
|
label: PLUGIN_ADMIN.SSL_ENABLE_PROXY
|
||||||
|
highlight: 1
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
|
default: false
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
http.proxy_url:
|
||||||
|
type: text
|
||||||
|
size: medium
|
||||||
|
placeholder: "e.g. 127.0.0.1:3128"
|
||||||
|
label: PLUGIN_ADMIN.PROXY_URL
|
||||||
|
help: PLUGIN_ADMIN.PROXY_URL_HELP
|
||||||
|
|
||||||
|
http.proxy_cert_path:
|
||||||
|
type: text
|
||||||
|
size: medium
|
||||||
|
placeholder: "e.g. /Users/bob/certs/"
|
||||||
|
label: PLUGIN_ADMIN.PROXY_CERT
|
||||||
|
help: PLUGIN_ADMIN.PROXY_CERT_HELP
|
||||||
|
|
||||||
|
http.verify_peer:
|
||||||
|
type: toggle
|
||||||
|
label: PLUGIN_ADMIN.SSL_VERIFY_PEER
|
||||||
|
highlight: 1
|
||||||
|
help: PLUGIN_ADMIN.SSL_VERIFY_PEER_HELP
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
http.verify_host:
|
||||||
|
type: toggle
|
||||||
|
label: PLUGIN_ADMIN.SSL_VERIFY_HOST
|
||||||
|
highlight: 1
|
||||||
|
help: PLUGIN_ADMIN.SSL_VERIFY_HOST_HELP
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
http.concurrent_connections:
|
||||||
|
type: number
|
||||||
|
size: x-small
|
||||||
|
label: PLUGIN_ADMIN.HTTP_CONNECTIONS
|
||||||
|
help: PLUGIN_ADMIN.HTTP_CONNECTIONS_HELP
|
||||||
|
validate:
|
||||||
|
min: 1
|
||||||
|
max: 20
|
||||||
|
|
||||||
|
misc_section:
|
||||||
|
type: section
|
||||||
|
title: PLUGIN_ADMIN.MISC_SECTION
|
||||||
|
|
||||||
reverse_proxy_setup:
|
reverse_proxy_setup:
|
||||||
type: toggle
|
type: toggle
|
||||||
label: PLUGIN_ADMIN.REVERSE_PROXY
|
label: PLUGIN_ADMIN.REVERSE_PROXY
|
||||||
@@ -1432,17 +1794,68 @@ form:
|
|||||||
label: PLUGIN_ADMIN.CUSTOM_BASE_URL
|
label: PLUGIN_ADMIN.CUSTOM_BASE_URL
|
||||||
help: PLUGIN_ADMIN.CUSTOM_BASE_URL_HELP
|
help: PLUGIN_ADMIN.CUSTOM_BASE_URL_HELP
|
||||||
|
|
||||||
accounts.type:
|
http_x_forwarded.protocol:
|
||||||
type: hidden
|
type: toggle
|
||||||
|
label: HTTP_X_FORWARDED_PROTO Enabled
|
||||||
|
highlight: 1
|
||||||
|
default: 1
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
accounts.storage:
|
http_x_forwarded.host:
|
||||||
type: hidden
|
type: toggle
|
||||||
|
label: HTTP_X_FORWARDED_HOST Enabled
|
||||||
|
highlight: 0
|
||||||
|
default: 0
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
http_x_forwarded.port:
|
||||||
|
type: toggle
|
||||||
|
label: HTTP_X_FORWARDED_PORT Enabled
|
||||||
|
highlight: 1
|
||||||
|
default: 1
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
http_x_forwarded.ip:
|
||||||
|
type: toggle
|
||||||
|
label: HTTP_X_FORWARDED IP Enabled
|
||||||
|
highlight: 1
|
||||||
|
default: 1
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
|
||||||
|
strict_mode.blueprint_compat:
|
||||||
|
type: toggle
|
||||||
|
label: PLUGIN_ADMIN.STRICT_BLUEPRINT_COMPAT
|
||||||
|
highlight: 0
|
||||||
|
default: 0
|
||||||
|
help: PLUGIN_ADMIN.STRICT_BLUEPRINT_COMPAT_HELP
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
strict_mode.yaml_compat:
|
strict_mode.yaml_compat:
|
||||||
type: toggle
|
type: toggle
|
||||||
label: PLUGIN_ADMIN.STRICT_YAML_COMPAT
|
label: PLUGIN_ADMIN.STRICT_YAML_COMPAT
|
||||||
highlight: 1
|
highlight: 0
|
||||||
default: 1
|
default: 0
|
||||||
help: PLUGIN_ADMIN.STRICT_YAML_COMPAT_HELP
|
help: PLUGIN_ADMIN.STRICT_YAML_COMPAT_HELP
|
||||||
options:
|
options:
|
||||||
1: PLUGIN_ADMIN.YES
|
1: PLUGIN_ADMIN.YES
|
||||||
@@ -1453,8 +1866,8 @@ form:
|
|||||||
strict_mode.twig_compat:
|
strict_mode.twig_compat:
|
||||||
type: toggle
|
type: toggle
|
||||||
label: PLUGIN_ADMIN.STRICT_TWIG_COMPAT
|
label: PLUGIN_ADMIN.STRICT_TWIG_COMPAT
|
||||||
highlight: 1
|
highlight: 0
|
||||||
default: 1
|
default: 0
|
||||||
help: PLUGIN_ADMIN.STRICT_TWIG_COMPAT_HELP
|
help: PLUGIN_ADMIN.STRICT_TWIG_COMPAT_HELP
|
||||||
options:
|
options:
|
||||||
1: PLUGIN_ADMIN.YES
|
1: PLUGIN_ADMIN.YES
|
||||||
@@ -1462,24 +1875,15 @@ form:
|
|||||||
validate:
|
validate:
|
||||||
type: bool
|
type: bool
|
||||||
|
|
||||||
experimental:
|
|
||||||
|
accounts:
|
||||||
type: tab
|
type: tab
|
||||||
title: PLUGIN_ADMIN.EXPERIMENTAL
|
title: PLUGIN_ADMIN.ACCOUNTS
|
||||||
|
|
||||||
fields:
|
fields:
|
||||||
experimental_section:
|
flex_accounts:
|
||||||
type: section
|
type: section
|
||||||
title: PLUGIN_ADMIN.EXPERIMENTAL
|
title: User Accounts
|
||||||
underline: true
|
|
||||||
|
|
||||||
pages.type:
|
|
||||||
type: select
|
|
||||||
label: PLUGIN_ADMIN.PAGES_TYPE
|
|
||||||
highlight: stable
|
|
||||||
help: PLUGIN_ADMIN.PAGES_TYPE_HELP
|
|
||||||
options:
|
|
||||||
page: PLUGIN_ADMIN.REGULAR
|
|
||||||
flex: PLUGIN_ADMIN.FLEX
|
|
||||||
|
|
||||||
accounts.type:
|
accounts.type:
|
||||||
type: select
|
type: select
|
||||||
@@ -1487,7 +1891,7 @@ form:
|
|||||||
highlight: stable
|
highlight: stable
|
||||||
help: PLUGIN_ADMIN.ACCOUNTS_TYPE_HELP
|
help: PLUGIN_ADMIN.ACCOUNTS_TYPE_HELP
|
||||||
options:
|
options:
|
||||||
data: PLUGIN_ADMIN.REGULAR
|
regular: PLUGIN_ADMIN.REGULAR
|
||||||
flex: PLUGIN_ADMIN.FLEX
|
flex: PLUGIN_ADMIN.FLEX
|
||||||
|
|
||||||
accounts.storage:
|
accounts.storage:
|
||||||
@@ -1498,3 +1902,38 @@ form:
|
|||||||
options:
|
options:
|
||||||
file: PLUGIN_ADMIN.FILE
|
file: PLUGIN_ADMIN.FILE
|
||||||
folder: PLUGIN_ADMIN.FOLDER
|
folder: PLUGIN_ADMIN.FOLDER
|
||||||
|
|
||||||
|
accounts.avatar:
|
||||||
|
type: select
|
||||||
|
label: PLUGIN_ADMIN.AVATAR
|
||||||
|
default: gravatar
|
||||||
|
help: PLUGIN_ADMIN.AVATAR_HELP
|
||||||
|
options:
|
||||||
|
multiavatar: Multiavatar [local]
|
||||||
|
gravatar: Gravatar [external]
|
||||||
|
|
||||||
|
# experimental:
|
||||||
|
# type: tab
|
||||||
|
# title: PLUGIN_ADMIN.EXPERIMENTAL
|
||||||
|
#
|
||||||
|
# fields:
|
||||||
|
# experimental_section:
|
||||||
|
# type: section
|
||||||
|
# title: PLUGIN_ADMIN.EXPERIMENTAL
|
||||||
|
# underline: true
|
||||||
|
#
|
||||||
|
# flex_pages:
|
||||||
|
# type: section
|
||||||
|
# title: Flex Pages
|
||||||
|
#
|
||||||
|
# pages.type:
|
||||||
|
# type: select
|
||||||
|
# label: PLUGIN_ADMIN.PAGES_TYPE
|
||||||
|
# highlight: regular
|
||||||
|
# help: PLUGIN_ADMIN.PAGES_TYPE_HELP
|
||||||
|
# options:
|
||||||
|
# regular: PLUGIN_ADMIN.REGULAR
|
||||||
|
# flex: PLUGIN_ADMIN.FLEX
|
||||||
|
#
|
||||||
|
# pages.type:
|
||||||
|
# type: hidden
|
||||||
|
|||||||
@@ -1,77 +1,8 @@
|
|||||||
title: Flex Accounts
|
title: Flex User Accounts
|
||||||
description: Manage your User Accounts in Flex.
|
description: Manage your User Accounts in Flex.
|
||||||
type: flex-objects
|
type: flex-objects
|
||||||
|
|
||||||
|
# Deprecated in Grav 1.7.0-rc.4: file was renamed to user-accounts.yaml
|
||||||
extends@:
|
extends@:
|
||||||
type: account
|
type: user-accounts
|
||||||
context: blueprints://user
|
context: blueprints://flex
|
||||||
|
|
||||||
config:
|
|
||||||
admin:
|
|
||||||
menu:
|
|
||||||
list:
|
|
||||||
route: '/accounts'
|
|
||||||
title: PLUGIN_ADMIN.ACCOUNTS
|
|
||||||
icon: fa-users
|
|
||||||
authorize: ['admin.users', 'admin.accounts', 'admin.super']
|
|
||||||
priority: 6
|
|
||||||
|
|
||||||
template: grav-accounts
|
|
||||||
|
|
||||||
list:
|
|
||||||
fields:
|
|
||||||
username:
|
|
||||||
link: edit
|
|
||||||
search: true
|
|
||||||
email:
|
|
||||||
search: true
|
|
||||||
fullname:
|
|
||||||
search: true
|
|
||||||
options:
|
|
||||||
per_page: 20
|
|
||||||
order:
|
|
||||||
by: username
|
|
||||||
dir: asc
|
|
||||||
|
|
||||||
site:
|
|
||||||
hidden: true
|
|
||||||
templates:
|
|
||||||
collection:
|
|
||||||
paths:
|
|
||||||
- 'flex/{TYPE}/collection/{LAYOUT}{EXT}'
|
|
||||||
object:
|
|
||||||
paths:
|
|
||||||
- 'flex/{TYPE}/object/{LAYOUT}{EXT}'
|
|
||||||
defaults:
|
|
||||||
type: accounts
|
|
||||||
layout: default
|
|
||||||
|
|
||||||
data:
|
|
||||||
object: 'Grav\Common\User\FlexUser\User'
|
|
||||||
collection: 'Grav\Common\User\FlexUser\UserCollection'
|
|
||||||
index: 'Grav\Common\User\FlexUser\UserIndex'
|
|
||||||
storage:
|
|
||||||
class: 'Grav\Common\User\FlexUser\Storage\UserFileStorage'
|
|
||||||
options:
|
|
||||||
formatter:
|
|
||||||
class: 'Grav\Framework\File\Formatter\YamlFormatter'
|
|
||||||
folder: 'account://'
|
|
||||||
pattern: '{FOLDER}/{KEY}{EXT}'
|
|
||||||
key: storage_key
|
|
||||||
indexed: true
|
|
||||||
search:
|
|
||||||
options:
|
|
||||||
contains: 1
|
|
||||||
fields:
|
|
||||||
- key
|
|
||||||
- email
|
|
||||||
|
|
||||||
form:
|
|
||||||
fields:
|
|
||||||
username:
|
|
||||||
flex-disabled@: exists
|
|
||||||
disabled: false
|
|
||||||
flex-readonly@: exists
|
|
||||||
readonly: false
|
|
||||||
validate:
|
|
||||||
required: true
|
|
||||||
|
|||||||
17
system/blueprints/flex/configure/compat.yaml
Normal file
17
system/blueprints/flex/configure/compat.yaml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
form:
|
||||||
|
compatibility:
|
||||||
|
type: tab
|
||||||
|
title: Compatibility
|
||||||
|
fields:
|
||||||
|
object.compat.events:
|
||||||
|
type: toggle
|
||||||
|
toggleable: true
|
||||||
|
label: Admin event compatibility
|
||||||
|
help: Enables onAdminSave and onAdminAfterSave events for plugins
|
||||||
|
highlight: 1
|
||||||
|
default: 1
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.ENABLED
|
||||||
|
0: PLUGIN_ADMIN.DISABLED
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
@@ -1,24 +1,57 @@
|
|||||||
title: Flex Pages
|
title: Pages
|
||||||
description: Manage your Grav Pages in Flex.
|
description: Manage your Grav Pages in Flex.
|
||||||
type: flex-objects
|
type: flex-objects
|
||||||
|
|
||||||
|
# Extends a page (blueprint gets overridden inside the object)
|
||||||
extends@:
|
extends@:
|
||||||
type: default
|
type: default
|
||||||
context: blueprints://pages
|
context: blueprints://pages
|
||||||
|
|
||||||
|
#
|
||||||
|
# HIGHLY SPECIALIZED FLEX TYPE, AVOID USING PAGES AS BASE FOR YOUR OWN TYPE.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Flex configuration
|
||||||
config:
|
config:
|
||||||
|
# Administration Configuration (needs Flex Objects plugin)
|
||||||
admin:
|
admin:
|
||||||
|
# Admin router
|
||||||
|
router:
|
||||||
|
path: '/pages'
|
||||||
|
|
||||||
|
# Permissions
|
||||||
|
permissions:
|
||||||
|
# Primary permissions
|
||||||
|
admin.pages:
|
||||||
|
type: crudl
|
||||||
|
label: Pages
|
||||||
|
admin.configuration.pages:
|
||||||
|
type: default
|
||||||
|
label: Pages Configuration
|
||||||
|
|
||||||
|
# Admin menu
|
||||||
menu:
|
menu:
|
||||||
list:
|
list:
|
||||||
route: '/pages'
|
route: '/pages'
|
||||||
title: PLUGIN_ADMIN.PAGES
|
title: PLUGIN_ADMIN.PAGES
|
||||||
icon: fa-file-text
|
icon: fa-file-text
|
||||||
authorize: ['admin.pages', 'admin.super']
|
authorize: ['admin.pages.list', 'admin.super']
|
||||||
priority: 5
|
priority: 5
|
||||||
|
|
||||||
template: grav-pages
|
# Admin template type (folder)
|
||||||
|
template: pages
|
||||||
|
|
||||||
|
# Allowed admin actions
|
||||||
|
actions:
|
||||||
|
list: true
|
||||||
|
create: true
|
||||||
|
read: true
|
||||||
|
update: true
|
||||||
|
delete: true
|
||||||
|
|
||||||
|
# List view
|
||||||
list:
|
list:
|
||||||
|
# Fields shown in the list view
|
||||||
fields:
|
fields:
|
||||||
published:
|
published:
|
||||||
width: 8
|
width: 8
|
||||||
@@ -51,8 +84,11 @@ config:
|
|||||||
# updated_date:
|
# updated_date:
|
||||||
# alias: header.update_date
|
# alias: header.update_date
|
||||||
|
|
||||||
|
# Extra options
|
||||||
options:
|
options:
|
||||||
|
# Default number of records for pagination
|
||||||
per_page: 20
|
per_page: 20
|
||||||
|
# Default ordering
|
||||||
order:
|
order:
|
||||||
by: key
|
by: key
|
||||||
dir: asc
|
dir: asc
|
||||||
@@ -67,6 +103,9 @@ config:
|
|||||||
label: PLUGIN_ADMIN.ADD
|
label: PLUGIN_ADMIN.ADD
|
||||||
|
|
||||||
edit:
|
edit:
|
||||||
|
title:
|
||||||
|
template: "{% if object.root %}Root <small>( <root> )</small>{% else %}{{ (form.value('header.title') ?? form.value('folder'))|e }} <small>( {{ (object.getRoute().toString(false) ?: '/')|e }} )</small>{% endif %}"
|
||||||
|
|
||||||
# TODO: not used yet
|
# TODO: not used yet
|
||||||
buttons:
|
buttons:
|
||||||
back:
|
back:
|
||||||
@@ -95,45 +134,79 @@ config:
|
|||||||
preview:
|
preview:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|
||||||
|
# Configure view
|
||||||
|
configure:
|
||||||
|
authorize: 'admin.configuration.pages'
|
||||||
|
|
||||||
|
# Site Configuration
|
||||||
site:
|
site:
|
||||||
|
# Hide from flex types
|
||||||
hidden: true
|
hidden: true
|
||||||
templates:
|
templates:
|
||||||
collection:
|
collection:
|
||||||
|
# Lookup for the template layout files for collections of objects
|
||||||
paths:
|
paths:
|
||||||
- 'flex/{TYPE}/collection/{LAYOUT}{EXT}'
|
- 'flex/{TYPE}/collection/{LAYOUT}{EXT}'
|
||||||
object:
|
object:
|
||||||
|
# Lookup for the template layout files for objects
|
||||||
paths:
|
paths:
|
||||||
- 'flex/{TYPE}/object/{LAYOUT}{EXT}'
|
- 'flex/{TYPE}/object/{LAYOUT}{EXT}'
|
||||||
defaults:
|
defaults:
|
||||||
|
# Default template {TYPE}; overridden by filename of this blueprint if template folder exists
|
||||||
type: pages
|
type: pages
|
||||||
|
# Default template {LAYOUT}; can be overridden in render calls (usually Twig in templates)
|
||||||
layout: default
|
layout: default
|
||||||
|
|
||||||
|
# Default filters for frontend.
|
||||||
filter:
|
filter:
|
||||||
- withPublished
|
- withPublished
|
||||||
|
|
||||||
|
# Data Configuration
|
||||||
data:
|
data:
|
||||||
object: 'Grav\Common\Page\Flex\PageObject'
|
object: 'Grav\Common\Flex\Types\Pages\PageObject'
|
||||||
collection: 'Grav\Common\Page\Flex\PageCollection'
|
collection: 'Grav\Common\Flex\Types\Pages\PageCollection'
|
||||||
index: 'Grav\Common\Page\Flex\PageIndex'
|
index: 'Grav\Common\Flex\Types\Pages\PageIndex'
|
||||||
storage:
|
storage:
|
||||||
class: 'Grav\Common\Page\Flex\PageStorage'
|
class: 'Grav\Common\Flex\Types\Pages\Storage\PageStorage'
|
||||||
options:
|
options:
|
||||||
formatter:
|
formatter:
|
||||||
class: 'Grav\Framework\File\Formatter\MarkdownFormatter'
|
class: 'Grav\Framework\File\Formatter\MarkdownFormatter'
|
||||||
folder: 'page://'
|
folder: 'page://'
|
||||||
|
# Keep index file in filesystem to speed up lookups
|
||||||
indexed: true
|
indexed: true
|
||||||
|
# Set default ordering of the pages
|
||||||
ordering:
|
ordering:
|
||||||
key: ASC
|
storage_key: ASC
|
||||||
search:
|
search:
|
||||||
|
# Search options
|
||||||
options:
|
options:
|
||||||
contains: 1
|
contains: 1
|
||||||
|
# Fields to be searched
|
||||||
fields:
|
fields:
|
||||||
- key
|
- key
|
||||||
|
- slug
|
||||||
- menu
|
- menu
|
||||||
- title
|
- title
|
||||||
- name
|
|
||||||
|
|
||||||
|
blueprints:
|
||||||
|
configure:
|
||||||
|
fields:
|
||||||
|
import@:
|
||||||
|
type: configure/compat
|
||||||
|
context: blueprints://flex
|
||||||
|
|
||||||
|
# Regular form definition
|
||||||
form:
|
form:
|
||||||
fields:
|
fields:
|
||||||
lang:
|
lang:
|
||||||
type: hidden
|
type: hidden
|
||||||
value: ''
|
value: ''
|
||||||
|
|
||||||
|
tabs:
|
||||||
|
fields:
|
||||||
|
security:
|
||||||
|
type: tab
|
||||||
|
title: PLUGIN_ADMIN.SECURITY
|
||||||
|
import@:
|
||||||
|
type: partials/security
|
||||||
|
context: blueprints://pages
|
||||||
|
|||||||
70
system/blueprints/flex/shared/configure.yaml
Normal file
70
system/blueprints/flex/shared/configure.yaml
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
form:
|
||||||
|
validation: loose
|
||||||
|
|
||||||
|
fields:
|
||||||
|
tabs:
|
||||||
|
type: tabs
|
||||||
|
fields:
|
||||||
|
cache:
|
||||||
|
type: tab
|
||||||
|
title: Caching
|
||||||
|
fields:
|
||||||
|
object.cache.index.enabled:
|
||||||
|
type: toggle
|
||||||
|
toggleable: true
|
||||||
|
label: PLUGIN_ADMIN.FLEX_INDEX_CACHE_ENABLED
|
||||||
|
highlight: 1
|
||||||
|
config-default@: system.flex.cache.index.enabled
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.ENABLED
|
||||||
|
0: PLUGIN_ADMIN.DISABLED
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
object.cache.index.lifetime:
|
||||||
|
type: text
|
||||||
|
toggleable: true
|
||||||
|
label: PLUGIN_ADMIN.FLEX_INDEX_CACHE_LIFETIME
|
||||||
|
config-default@: system.flex.cache.index.lifetime
|
||||||
|
validate:
|
||||||
|
type: int
|
||||||
|
|
||||||
|
object.cache.object.enabled:
|
||||||
|
type: toggle
|
||||||
|
toggleable: true
|
||||||
|
label: PLUGIN_ADMIN.FLEX_OBJECT_CACHE_ENABLED
|
||||||
|
highlight: 1
|
||||||
|
config-default@: system.flex.cache.object.enabled
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.ENABLED
|
||||||
|
0: PLUGIN_ADMIN.DISABLED
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
object.cache.object.lifetime:
|
||||||
|
type: text
|
||||||
|
toggleable: true
|
||||||
|
label: PLUGIN_ADMIN.FLEX_OBJECT_CACHE_LIFETIME
|
||||||
|
config-default@: system.flex.cache.object.lifetime
|
||||||
|
validate:
|
||||||
|
type: int
|
||||||
|
|
||||||
|
object.cache.render.enabled:
|
||||||
|
type: toggle
|
||||||
|
toggleable: true
|
||||||
|
label: PLUGIN_ADMIN.FLEX_RENDER_CACHE_ENABLED
|
||||||
|
highlight: 1
|
||||||
|
config-default@: system.flex.cache.render.enabled
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.ENABLED
|
||||||
|
0: PLUGIN_ADMIN.DISABLED
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
object.cache.render.lifetime:
|
||||||
|
type: text
|
||||||
|
toggleable: true
|
||||||
|
label: PLUGIN_ADMIN.FLEX_RENDER_CACHE_LIFETIME
|
||||||
|
config-default@: system.flex.cache.render.lifetime
|
||||||
|
validate:
|
||||||
|
type: int
|
||||||
155
system/blueprints/flex/user-accounts.yaml
Normal file
155
system/blueprints/flex/user-accounts.yaml
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
title: User Accounts
|
||||||
|
description: Manage your User Accounts in Flex.
|
||||||
|
type: flex-objects
|
||||||
|
|
||||||
|
# Extends user account
|
||||||
|
extends@:
|
||||||
|
type: account
|
||||||
|
context: blueprints://user
|
||||||
|
|
||||||
|
#
|
||||||
|
# HIGHLY SPECIALIZED FLEX TYPE, AVOID USING USER ACCOUNTS AS BASE FOR YOUR OWN TYPE.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Flex configuration
|
||||||
|
config:
|
||||||
|
# Administration Configuration (needs Flex Objects plugin)
|
||||||
|
admin:
|
||||||
|
# Admin router
|
||||||
|
router:
|
||||||
|
path: '/accounts/users'
|
||||||
|
actions:
|
||||||
|
configure:
|
||||||
|
path: '/accounts/configure'
|
||||||
|
redirects:
|
||||||
|
'/user': '/accounts/users'
|
||||||
|
'/accounts': '/accounts/users'
|
||||||
|
|
||||||
|
# Permissions
|
||||||
|
permissions:
|
||||||
|
# Primary permissions
|
||||||
|
admin.users:
|
||||||
|
type: crudl
|
||||||
|
label: User Accounts
|
||||||
|
admin.configuration.users:
|
||||||
|
type: default
|
||||||
|
label: Accounts Configuration
|
||||||
|
|
||||||
|
# Admin menu
|
||||||
|
menu:
|
||||||
|
base:
|
||||||
|
location: '/accounts'
|
||||||
|
route: '/accounts/users'
|
||||||
|
index: 0
|
||||||
|
title: PLUGIN_ADMIN.ACCOUNTS
|
||||||
|
icon: fa-users
|
||||||
|
authorize: ['admin.users.list', 'admin.super']
|
||||||
|
priority: 6
|
||||||
|
|
||||||
|
# Admin template type (folder)
|
||||||
|
template: user-accounts
|
||||||
|
|
||||||
|
# List view
|
||||||
|
list:
|
||||||
|
# Fields shown in the list view
|
||||||
|
fields:
|
||||||
|
username:
|
||||||
|
link: edit
|
||||||
|
search: true
|
||||||
|
field:
|
||||||
|
label: PLUGIN_ADMIN.USERNAME
|
||||||
|
email:
|
||||||
|
search: true
|
||||||
|
fullname:
|
||||||
|
search: true
|
||||||
|
# Extra options
|
||||||
|
options:
|
||||||
|
per_page: 20
|
||||||
|
order:
|
||||||
|
by: username
|
||||||
|
dir: asc
|
||||||
|
|
||||||
|
# Edit view
|
||||||
|
edit:
|
||||||
|
title:
|
||||||
|
template: "{{ form.value('fullname') ?? form.value('username') }} <{{ form.value('email') }}>"
|
||||||
|
|
||||||
|
# Configure view
|
||||||
|
configure:
|
||||||
|
hidden: true
|
||||||
|
authorize: 'admin.configuration.users'
|
||||||
|
form: 'accounts'
|
||||||
|
title:
|
||||||
|
template: "{{ 'PLUGIN_ADMIN.ACCOUNTS'|tu }} {{ 'PLUGIN_ADMIN.CONFIGURATION'|tu }}"
|
||||||
|
|
||||||
|
# Site Configuration
|
||||||
|
site:
|
||||||
|
# Hide from flex types
|
||||||
|
hidden: true
|
||||||
|
templates:
|
||||||
|
collection:
|
||||||
|
# Lookup for the template layout files for collections of objects
|
||||||
|
paths:
|
||||||
|
- 'flex/{TYPE}/collection/{LAYOUT}{EXT}'
|
||||||
|
object:
|
||||||
|
# Lookup for the template layout files for objects
|
||||||
|
paths:
|
||||||
|
- 'flex/{TYPE}/object/{LAYOUT}{EXT}'
|
||||||
|
defaults:
|
||||||
|
# Default template {TYPE}; overridden by filename of this blueprint if template folder exists
|
||||||
|
type: user-accounts
|
||||||
|
# Default template {LAYOUT}; can be overridden in render calls (usually Twig in templates)
|
||||||
|
layout: default
|
||||||
|
|
||||||
|
# Data Configuration
|
||||||
|
data:
|
||||||
|
object: 'Grav\Common\Flex\Types\Users\UserObject'
|
||||||
|
collection: 'Grav\Common\Flex\Types\Users\UserCollection'
|
||||||
|
index: 'Grav\Common\Flex\Types\Users\UserIndex'
|
||||||
|
storage:
|
||||||
|
class: 'Grav\Common\Flex\Types\Users\Storage\UserFileStorage'
|
||||||
|
options:
|
||||||
|
formatter:
|
||||||
|
class: 'Grav\Framework\File\Formatter\YamlFormatter'
|
||||||
|
folder: 'account://'
|
||||||
|
pattern: '{FOLDER}/{KEY}{EXT}'
|
||||||
|
indexed: true
|
||||||
|
key: username
|
||||||
|
case_sensitive: false
|
||||||
|
search:
|
||||||
|
options:
|
||||||
|
contains: 1
|
||||||
|
fields:
|
||||||
|
- key
|
||||||
|
- email
|
||||||
|
- username
|
||||||
|
- fullname
|
||||||
|
|
||||||
|
relationships:
|
||||||
|
media:
|
||||||
|
type: media
|
||||||
|
cardinality: to-many
|
||||||
|
avatar:
|
||||||
|
type: media
|
||||||
|
cardinality: to-one
|
||||||
|
# roles:
|
||||||
|
# type: user-groups
|
||||||
|
# cardinality: to-many
|
||||||
|
|
||||||
|
blueprints:
|
||||||
|
configure:
|
||||||
|
fields:
|
||||||
|
import@:
|
||||||
|
type: configure/compat
|
||||||
|
context: blueprints://flex
|
||||||
|
|
||||||
|
# Regular form definition
|
||||||
|
form:
|
||||||
|
fields:
|
||||||
|
username:
|
||||||
|
flex-disabled@: exists
|
||||||
|
disabled: false
|
||||||
|
flex-readonly@: exists
|
||||||
|
readonly: false
|
||||||
|
validate:
|
||||||
|
required: true
|
||||||
124
system/blueprints/flex/user-groups.yaml
Normal file
124
system/blueprints/flex/user-groups.yaml
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
title: User Groups
|
||||||
|
description: Manage your User Groups in Flex.
|
||||||
|
type: flex-objects
|
||||||
|
|
||||||
|
# Extends user group
|
||||||
|
extends@:
|
||||||
|
type: group
|
||||||
|
context: blueprints://user
|
||||||
|
|
||||||
|
# Flex configuration
|
||||||
|
config:
|
||||||
|
# Administration Configuration (needs Flex Objects plugin)
|
||||||
|
admin:
|
||||||
|
# Admin router
|
||||||
|
router:
|
||||||
|
path: '/accounts/groups'
|
||||||
|
actions:
|
||||||
|
configure:
|
||||||
|
path: '/accounts/configure'
|
||||||
|
redirects:
|
||||||
|
'/groups': '/accounts/groups'
|
||||||
|
'/accounts': '/accounts/groups'
|
||||||
|
|
||||||
|
# Permissions
|
||||||
|
permissions:
|
||||||
|
# Primary permissions
|
||||||
|
admin.users:
|
||||||
|
type: crudl
|
||||||
|
label: User Accounts
|
||||||
|
admin.configuration.users:
|
||||||
|
type: default
|
||||||
|
label: Accounts Configuration
|
||||||
|
|
||||||
|
# Admin menu
|
||||||
|
menu:
|
||||||
|
base:
|
||||||
|
location: '/accounts'
|
||||||
|
route: '/accounts/groups'
|
||||||
|
index: 1
|
||||||
|
title: PLUGIN_ADMIN.ACCOUNTS
|
||||||
|
icon: fa-users
|
||||||
|
authorize: ['admin.users.list', 'admin.super']
|
||||||
|
priority: 6
|
||||||
|
|
||||||
|
# Admin template type (folder)
|
||||||
|
template: user-groups
|
||||||
|
|
||||||
|
# List view
|
||||||
|
list:
|
||||||
|
# Fields shown in the list view
|
||||||
|
fields:
|
||||||
|
groupname:
|
||||||
|
link: edit
|
||||||
|
search: true
|
||||||
|
readableName:
|
||||||
|
search: true
|
||||||
|
description:
|
||||||
|
search: true
|
||||||
|
# Extra options
|
||||||
|
options:
|
||||||
|
per_page: 20
|
||||||
|
order:
|
||||||
|
by: groupname
|
||||||
|
dir: asc
|
||||||
|
|
||||||
|
# Edit view
|
||||||
|
edit:
|
||||||
|
title:
|
||||||
|
template: "{{ form.value('readableName') ?? form.value('groupname') }}"
|
||||||
|
|
||||||
|
# Configure view
|
||||||
|
configure:
|
||||||
|
hidden: true
|
||||||
|
authorize: 'admin.configuration.users'
|
||||||
|
form: 'accounts'
|
||||||
|
title:
|
||||||
|
template: "{{ 'PLUGIN_ADMIN.ACCOUNTS'|tu }} {{ 'PLUGIN_ADMIN.CONFIGURATION'|tu }}"
|
||||||
|
|
||||||
|
# Site Configuration
|
||||||
|
site:
|
||||||
|
# Hide from flex types
|
||||||
|
hidden: true
|
||||||
|
templates:
|
||||||
|
collection:
|
||||||
|
# Lookup for the template layout files for collections of objects
|
||||||
|
paths:
|
||||||
|
- 'flex/{TYPE}/collection/{LAYOUT}{EXT}'
|
||||||
|
object:
|
||||||
|
# Lookup for the template layout files for objects
|
||||||
|
paths:
|
||||||
|
- 'flex/{TYPE}/object/{LAYOUT}{EXT}'
|
||||||
|
defaults:
|
||||||
|
# Default template {TYPE}; overridden by filename of this blueprint if template folder exists
|
||||||
|
type: user-groups
|
||||||
|
# Default template {LAYOUT}; can be overridden in render calls (usually Twig in templates)
|
||||||
|
layout: default
|
||||||
|
|
||||||
|
# Data Configuration
|
||||||
|
data:
|
||||||
|
object: 'Grav\Common\Flex\Types\UserGroups\UserGroupObject'
|
||||||
|
collection: 'Grav\Common\Flex\Types\UserGroups\UserGroupCollection'
|
||||||
|
index: 'Grav\Common\Flex\Types\UserGroups\UserGroupIndex'
|
||||||
|
storage:
|
||||||
|
class: 'Grav\Framework\Flex\Storage\SimpleStorage'
|
||||||
|
options:
|
||||||
|
formatter:
|
||||||
|
class: 'Grav\Framework\File\Formatter\YamlFormatter'
|
||||||
|
folder: 'user://config/groups.yaml'
|
||||||
|
key: groupname
|
||||||
|
search:
|
||||||
|
options:
|
||||||
|
contains: 1
|
||||||
|
fields:
|
||||||
|
- key
|
||||||
|
- groupname
|
||||||
|
- readableName
|
||||||
|
- description
|
||||||
|
|
||||||
|
blueprints:
|
||||||
|
configure:
|
||||||
|
fields:
|
||||||
|
import@:
|
||||||
|
type: configure/compat
|
||||||
|
context: blueprints://flex
|
||||||
@@ -121,7 +121,7 @@ form:
|
|||||||
underline: true
|
underline: true
|
||||||
|
|
||||||
folder:
|
folder:
|
||||||
type: text
|
type: folder-slug
|
||||||
label: PLUGIN_ADMIN.FOLDER_NAME
|
label: PLUGIN_ADMIN.FOLDER_NAME
|
||||||
validate:
|
validate:
|
||||||
rule: slug
|
rule: slug
|
||||||
@@ -320,6 +320,18 @@ form:
|
|||||||
|
|
||||||
fields:
|
fields:
|
||||||
|
|
||||||
|
header.redirect_default_route:
|
||||||
|
type: toggle
|
||||||
|
toggleable: true
|
||||||
|
label: PLUGIN_ADMIN.REDIRECT_DEFAULT_ROUTE
|
||||||
|
help: PLUGIN_ADMIN.REDIRECT_DEFAULT_ROUTE_HELP
|
||||||
|
config-highlight@: system.pages.redirect_default_route
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
header.routes.default:
|
header.routes.default:
|
||||||
type: text
|
type: text
|
||||||
toggleable: true
|
toggleable: true
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
title: PLUGIN_ADMIN:EXTERNAL
|
title: PLUGIN_ADMIN.EXTERNAL
|
||||||
extends@:
|
extends@:
|
||||||
type: default
|
type: default
|
||||||
context: blueprints://pages
|
context: blueprints://pages
|
||||||
|
|
||||||
form:
|
form:
|
||||||
validation: loose
|
validation: loose
|
||||||
@@ -29,16 +29,16 @@ form:
|
|||||||
unset@: true
|
unset@: true
|
||||||
|
|
||||||
header.external_url:
|
header.external_url:
|
||||||
type: text
|
type: text
|
||||||
label: PLUGIN_ADMIN.EXTERNAL_URL
|
label: PLUGIN_ADMIN.EXTERNAL_URL
|
||||||
placeholder: https://getgrav.org
|
placeholder: https://getgrav.org
|
||||||
validate:
|
validate:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
options:
|
options:
|
||||||
fields:
|
fields:
|
||||||
|
|
||||||
publishing:
|
publishing:
|
||||||
|
|
||||||
fields:
|
fields:
|
||||||
|
|
||||||
header.date:
|
header.date:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
title: PLUGIN_ADMIN.MODULAR
|
title: PLUGIN_ADMIN.MODULE
|
||||||
extends@: default
|
extends@: default
|
||||||
|
|
||||||
form:
|
form:
|
||||||
@@ -13,7 +13,7 @@ form:
|
|||||||
|
|
||||||
modular_title:
|
modular_title:
|
||||||
type: spacer
|
type: spacer
|
||||||
title: PLUGIN_ADMIN.MODULAR_SETUP
|
title: PLUGIN_ADMIN.MODULE_SETUP
|
||||||
|
|
||||||
header.content.items:
|
header.content.items:
|
||||||
type: text
|
type: text
|
||||||
@@ -34,5 +34,3 @@ form:
|
|||||||
help: '"desc" or "asc" are valid values'
|
help: '"desc" or "asc" are valid values'
|
||||||
placeholder: desc
|
placeholder: desc
|
||||||
size: small
|
size: small
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
67
system/blueprints/pages/partials/security.yaml
Normal file
67
system/blueprints/pages/partials/security.yaml
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
form:
|
||||||
|
fields:
|
||||||
|
_site:
|
||||||
|
type: section
|
||||||
|
title: PLUGIN_ADMIN.PAGE_ACCESS
|
||||||
|
underline: true
|
||||||
|
|
||||||
|
fields:
|
||||||
|
|
||||||
|
header.login.visibility_requires_access:
|
||||||
|
type: toggle
|
||||||
|
toggleable: true
|
||||||
|
label: PLUGIN_ADMIN.PAGE_VISIBILITY_REQUIRES_ACCESS
|
||||||
|
help: PLUGIN_ADMIN.PAGE_VISIBILITY_REQUIRES_ACCESS_HELP
|
||||||
|
highlight: 0
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
|
||||||
|
header.access:
|
||||||
|
type: acl_picker
|
||||||
|
label: PLUGIN_ADMIN.PAGE_ACCESS
|
||||||
|
help: PLUGIN_ADMIN.PAGE_ACCESS_HELP
|
||||||
|
ignore_empty: true
|
||||||
|
data_type: access
|
||||||
|
validate:
|
||||||
|
type: array
|
||||||
|
value_type: bool
|
||||||
|
|
||||||
|
_admin:
|
||||||
|
security@: {or: [admin.super, admin.configuration.pages]}
|
||||||
|
type: section
|
||||||
|
title: PLUGIN_ADMIN.PAGE PERMISSIONS
|
||||||
|
underline: true
|
||||||
|
|
||||||
|
fields:
|
||||||
|
|
||||||
|
header.permissions.inherit:
|
||||||
|
type: toggle
|
||||||
|
toggleable: true
|
||||||
|
label: PLUGIN_ADMIN.PAGE_INHERIT_PERMISSIONS
|
||||||
|
help: PLUGIN_ADMIN.PAGE_INHERIT_PERMISSIONS_HELP
|
||||||
|
highlight: 1
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
|
header.permissions.authors:
|
||||||
|
type: array
|
||||||
|
toggleable: true
|
||||||
|
value_only: true
|
||||||
|
placeholder_value: PLUGIN_ADMIN.USERNAME
|
||||||
|
label: PLUGIN_ADMIN.PAGE_AUTHORS
|
||||||
|
help: PLUGIN_ADMIN.PAGE_AUTHORS_HELP
|
||||||
|
|
||||||
|
header.permissions.groups:
|
||||||
|
ignore@: true
|
||||||
|
type: acl_picker
|
||||||
|
label: PLUGIN_ADMIN.PAGE_GROUPS
|
||||||
|
help: PLUGIN_ADMIN.PAGE_GROUPS_HELP
|
||||||
|
ignore_empty: true
|
||||||
|
data_type: permissions
|
||||||
16
system/blueprints/pages/root.yaml
Normal file
16
system/blueprints/pages/root.yaml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
title: PLUGIN_ADMIN.ROOT
|
||||||
|
|
||||||
|
rules:
|
||||||
|
slug:
|
||||||
|
pattern: '[a-zA-Zа-яA-Я0-9_\-]+'
|
||||||
|
min: 1
|
||||||
|
max: 200
|
||||||
|
|
||||||
|
form:
|
||||||
|
validation: loose
|
||||||
|
|
||||||
|
fields:
|
||||||
|
|
||||||
|
tabs:
|
||||||
|
type: tabs
|
||||||
|
active: 1
|
||||||
@@ -11,10 +11,21 @@ form:
|
|||||||
avatar:
|
avatar:
|
||||||
type: file
|
type: file
|
||||||
size: large
|
size: large
|
||||||
destination: 'user://accounts/avatars'
|
destination: 'account://avatars'
|
||||||
multiple: false
|
multiple: false
|
||||||
random_name: true
|
random_name: true
|
||||||
|
|
||||||
|
multiavatar_only:
|
||||||
|
type: conditional
|
||||||
|
condition: config.system.accounts.avatar == 'multiavatar'
|
||||||
|
fields:
|
||||||
|
avatar_hash:
|
||||||
|
type: text
|
||||||
|
label: ''
|
||||||
|
placeholder: 'e.g. dceaadcfda491f4e45'
|
||||||
|
description: PLUGIN_ADMIN.AVATAR_HASH
|
||||||
|
size: large
|
||||||
|
|
||||||
content:
|
content:
|
||||||
type: section
|
type: section
|
||||||
title: PLUGIN_ADMIN.ACCOUNT
|
title: PLUGIN_ADMIN.ACCOUNT
|
||||||
@@ -67,6 +78,15 @@ form:
|
|||||||
default: 'en'
|
default: 'en'
|
||||||
help: PLUGIN_ADMIN.LANGUAGE_HELP
|
help: PLUGIN_ADMIN.LANGUAGE_HELP
|
||||||
|
|
||||||
|
content_editor:
|
||||||
|
type: select
|
||||||
|
label: PLUGIN_ADMIN.CONTENT_EDITOR
|
||||||
|
size: medium
|
||||||
|
classes: fancy
|
||||||
|
data-options@: 'Grav\Plugin\Admin\Admin::contentEditor'
|
||||||
|
default: 'default'
|
||||||
|
help: PLUGIN_ADMIN.CONTENT_EDITOR_HELP
|
||||||
|
|
||||||
twofa_check:
|
twofa_check:
|
||||||
type: conditional
|
type: conditional
|
||||||
condition: config.plugins.admin.twofa_enabled
|
condition: config.plugins.admin.twofa_enabled
|
||||||
@@ -98,6 +118,14 @@ form:
|
|||||||
label: PLUGIN_ADMIN.2FA_SECRET
|
label: PLUGIN_ADMIN.2FA_SECRET
|
||||||
sublabel: PLUGIN_ADMIN.2FA_SECRET_HELP
|
sublabel: PLUGIN_ADMIN.2FA_SECRET_HELP
|
||||||
|
|
||||||
|
yubikey_id:
|
||||||
|
type: text
|
||||||
|
label: PLUGIN_ADMIN.YUBIKEY_ID
|
||||||
|
description: PLUGIN_ADMIN.YUBIKEY_HELP
|
||||||
|
size: small
|
||||||
|
maxlength: 12
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
security:
|
security:
|
||||||
security@: admin.super
|
security@: admin.super
|
||||||
@@ -121,7 +149,9 @@ form:
|
|||||||
access:
|
access:
|
||||||
security@: admin.super
|
security@: admin.super
|
||||||
type: permissions
|
type: permissions
|
||||||
|
check_authorize: true
|
||||||
label: PLUGIN_ADMIN.PERMISSIONS
|
label: PLUGIN_ADMIN.PERMISSIONS
|
||||||
ignore_empty: true
|
ignore_empty: true
|
||||||
validate:
|
validate:
|
||||||
type: array
|
type: array
|
||||||
|
value_type: bool
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ form:
|
|||||||
label: PLUGIN_ADMIN.USERNAME
|
label: PLUGIN_ADMIN.USERNAME
|
||||||
help: PLUGIN_ADMIN.USERNAME_HELP
|
help: PLUGIN_ADMIN.USERNAME_HELP
|
||||||
unset-disabled@: true
|
unset-disabled@: true
|
||||||
unset-readonly@: true
|
unset-readonly@: true
|
||||||
validate:
|
validate:
|
||||||
required: true
|
required: true
|
||||||
|
|||||||
@@ -1,37 +1,55 @@
|
|||||||
title: Group
|
title: Group
|
||||||
|
rules:
|
||||||
|
slug:
|
||||||
|
pattern: '[a-zA-Zа-яA-Я0-9_\-]+'
|
||||||
|
min: 1
|
||||||
|
max: 200
|
||||||
|
|
||||||
form:
|
form:
|
||||||
validation: loose
|
validation: loose
|
||||||
|
|
||||||
fields:
|
fields:
|
||||||
spacer:
|
groupname:
|
||||||
type: spacer
|
type: text
|
||||||
text: '<br>'
|
size: large
|
||||||
|
label: PLUGIN_ADMIN.GROUP_NAME
|
||||||
|
flex-disabled@: exists
|
||||||
|
flex-readonly@: exists
|
||||||
|
validate:
|
||||||
|
required: true
|
||||||
|
rule: slug
|
||||||
|
|
||||||
groupname:
|
readableName:
|
||||||
type: text
|
type: text
|
||||||
size: large
|
size: large
|
||||||
label: PLUGIN_ADMIN.NAME
|
label: PLUGIN_ADMIN.DISPLAY_NAME
|
||||||
disabled: true
|
|
||||||
readonly: true
|
|
||||||
|
|
||||||
readableName:
|
description:
|
||||||
type: text
|
type: text
|
||||||
size: large
|
size: large
|
||||||
label: PLUGIN_ADMIN_PRO.READABLE_NAME
|
label: PLUGIN_ADMIN.DESCRIPTION
|
||||||
|
|
||||||
description:
|
icon:
|
||||||
type: text
|
type: text
|
||||||
size: large
|
size: small
|
||||||
label: PLUGIN_ADMIN.DESCRIPTION
|
label: PLUGIN_ADMIN.ICON
|
||||||
|
|
||||||
icon:
|
enabled:
|
||||||
type: text
|
type: toggle
|
||||||
size: small
|
label: PLUGIN_ADMIN.ENABLED
|
||||||
label: PLUGIN_ADMIN_PRO.ICON
|
highlight: 1
|
||||||
|
default: 1
|
||||||
|
options:
|
||||||
|
1: PLUGIN_ADMIN.YES
|
||||||
|
0: PLUGIN_ADMIN.NO
|
||||||
|
validate:
|
||||||
|
type: bool
|
||||||
|
|
||||||
access:
|
access:
|
||||||
type: permissions
|
type: permissions
|
||||||
label: PLUGIN_ADMIN.PERMISSIONS
|
check_authorize: false
|
||||||
ignore_empty: true
|
label: PLUGIN_ADMIN.PERMISSIONS
|
||||||
validate:
|
ignore_empty: true
|
||||||
type: array
|
validate:
|
||||||
|
type: array
|
||||||
|
value_type: bool
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
title: PLUGIN_ADMIN_PRO.ADD_GROUP
|
title: PLUGIN_ADMIN_PRO.ADD_GROUP
|
||||||
|
|
||||||
|
rules:
|
||||||
|
slug:
|
||||||
|
pattern: '[a-zA-Zа-яA-Я0-9_\-]+'
|
||||||
|
min: 1
|
||||||
|
max: 200
|
||||||
|
|
||||||
form:
|
form:
|
||||||
validation: loose
|
validation: loose
|
||||||
fields:
|
fields:
|
||||||
@@ -14,3 +20,4 @@ form:
|
|||||||
help: PLUGIN_ADMIN_PRO.GROUP_NAME_HELP
|
help: PLUGIN_ADMIN_PRO.GROUP_NAME_HELP
|
||||||
validate:
|
validate:
|
||||||
required: true
|
required: true
|
||||||
|
rule: slug
|
||||||
|
|||||||
@@ -24,6 +24,14 @@ types:
|
|||||||
type: image
|
type: image
|
||||||
thumb: media/thumb-png.png
|
thumb: media/thumb-png.png
|
||||||
mime: image/png
|
mime: image/png
|
||||||
|
webp:
|
||||||
|
type: image
|
||||||
|
thumb: media/thumb-webp.png
|
||||||
|
mime: image/webp
|
||||||
|
avif:
|
||||||
|
type: image
|
||||||
|
thumb: media/thumb.png
|
||||||
|
mime: image/avif
|
||||||
gif:
|
gif:
|
||||||
type: animated
|
type: animated
|
||||||
thumb: media/thumb-gif.png
|
thumb: media/thumb-gif.png
|
||||||
@@ -87,7 +95,7 @@ types:
|
|||||||
aif:
|
aif:
|
||||||
type: audio
|
type: audio
|
||||||
thumb: media/thumb-aif.png
|
thumb: media/thumb-aif.png
|
||||||
mime: audio/aif
|
mime: audio/aiff
|
||||||
txt:
|
txt:
|
||||||
type: file
|
type: file
|
||||||
thumb: media/thumb-txt.png
|
thumb: media/thumb-txt.png
|
||||||
@@ -103,7 +111,7 @@ types:
|
|||||||
docx:
|
docx:
|
||||||
type: file
|
type: file
|
||||||
thumb: media/thumb-docx.png
|
thumb: media/thumb-docx.png
|
||||||
mime: application/msword
|
mime: application/vnd.openxmlformats-officedocument.wordprocessingml.document
|
||||||
xls:
|
xls:
|
||||||
type: file
|
type: file
|
||||||
thumb: media/thumb-xls.png
|
thumb: media/thumb-xls.png
|
||||||
@@ -111,7 +119,7 @@ types:
|
|||||||
xlsx:
|
xlsx:
|
||||||
type: file
|
type: file
|
||||||
thumb: media/thumb-xlsx.png
|
thumb: media/thumb-xlsx.png
|
||||||
mime: application/vnd.ms-excel
|
mime: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
|
||||||
ppt:
|
ppt:
|
||||||
type: file
|
type: file
|
||||||
thumb: media/thumb-ppt.png
|
thumb: media/thumb-ppt.png
|
||||||
@@ -119,7 +127,7 @@ types:
|
|||||||
pptx:
|
pptx:
|
||||||
type: file
|
type: file
|
||||||
thumb: media/thumb-pptx.png
|
thumb: media/thumb-pptx.png
|
||||||
mime: application/vnd.ms-powerpoint
|
mime: application/vnd.openxmlformats-officedocument.presentationml.presentation
|
||||||
pps:
|
pps:
|
||||||
type: file
|
type: file
|
||||||
thumb: media/thumb-pps.png
|
thumb: media/thumb-pps.png
|
||||||
@@ -191,7 +199,7 @@ types:
|
|||||||
gz:
|
gz:
|
||||||
type: file
|
type: file
|
||||||
thumb: media/thumb-gz.png
|
thumb: media/thumb-gz.png
|
||||||
mime: application/gzip
|
mime: application/x-gzip
|
||||||
tar:
|
tar:
|
||||||
type: file
|
type: file
|
||||||
thumb: media/thumb-tar.png
|
thumb: media/thumb-tar.png
|
||||||
@@ -203,8 +211,13 @@ types:
|
|||||||
js:
|
js:
|
||||||
type: file
|
type: file
|
||||||
thumb: media/thumb-js.png
|
thumb: media/thumb-js.png
|
||||||
mime: application/javascript
|
mime: text/javascript
|
||||||
json:
|
json:
|
||||||
type: file
|
type: file
|
||||||
thumb: media/thumb-json.png
|
thumb: media/thumb-json.png
|
||||||
mime: application/json
|
mime: application/json
|
||||||
|
vcf:
|
||||||
|
type: file
|
||||||
|
thumb: media/thumb-vcf.png
|
||||||
|
mime: text/x-vcard
|
||||||
|
|
||||||
|
|||||||
1986
system/config/mime.yaml
Normal file
1986
system/config/mime.yaml
Normal file
File diff suppressed because it is too large
Load Diff
53
system/config/permissions.yaml
Normal file
53
system/config/permissions.yaml
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
actions:
|
||||||
|
site:
|
||||||
|
type: access
|
||||||
|
label: Site
|
||||||
|
admin:
|
||||||
|
type: access
|
||||||
|
label: Admin
|
||||||
|
admin.pages:
|
||||||
|
type: access
|
||||||
|
label: Pages
|
||||||
|
admin.users:
|
||||||
|
type: access
|
||||||
|
label: User Accounts
|
||||||
|
|
||||||
|
types:
|
||||||
|
default:
|
||||||
|
type: access
|
||||||
|
|
||||||
|
crud:
|
||||||
|
type: compact
|
||||||
|
letters:
|
||||||
|
c:
|
||||||
|
action: create
|
||||||
|
label: PLUGIN_ADMIN.CREATE
|
||||||
|
r:
|
||||||
|
action: read
|
||||||
|
label: PLUGIN_ADMIN.READ
|
||||||
|
u:
|
||||||
|
action: update
|
||||||
|
label: PLUGIN_ADMIN.UPDATE
|
||||||
|
d:
|
||||||
|
action: delete
|
||||||
|
label: PLUGIN_ADMIN.DELETE
|
||||||
|
|
||||||
|
crudp:
|
||||||
|
type: crud
|
||||||
|
letters:
|
||||||
|
p:
|
||||||
|
action: publish
|
||||||
|
label: PLUGIN_ADMIN.PUBLISH
|
||||||
|
|
||||||
|
crudl:
|
||||||
|
type: crud
|
||||||
|
letters:
|
||||||
|
l:
|
||||||
|
action: list
|
||||||
|
label: PLUGIN_ADMIN.LIST
|
||||||
|
|
||||||
|
crudpl:
|
||||||
|
type: crud
|
||||||
|
use:
|
||||||
|
- crudp
|
||||||
|
- crudl
|
||||||
68
system/config/scheduler.yaml
Normal file
68
system/config/scheduler.yaml
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
# Grav Scheduler Configuration
|
||||||
|
|
||||||
|
# Default scheduler settings (backward compatible)
|
||||||
|
defaults:
|
||||||
|
output: true
|
||||||
|
output_type: file
|
||||||
|
email: null
|
||||||
|
|
||||||
|
# Status of individual jobs (enabled/disabled)
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
# Custom scheduled jobs
|
||||||
|
custom_jobs: {}
|
||||||
|
|
||||||
|
# Modern scheduler features (disabled by default for backward compatibility)
|
||||||
|
modern:
|
||||||
|
# Enable modern scheduler features
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
# Number of concurrent workers (1 = sequential execution like legacy)
|
||||||
|
workers: 1
|
||||||
|
|
||||||
|
# Job retry configuration
|
||||||
|
retry:
|
||||||
|
enabled: true
|
||||||
|
max_attempts: 3
|
||||||
|
backoff: exponential # 'linear' or 'exponential'
|
||||||
|
|
||||||
|
# Job queue configuration
|
||||||
|
queue:
|
||||||
|
path: user-data://scheduler/queue
|
||||||
|
max_size: 1000
|
||||||
|
|
||||||
|
# Webhook trigger configuration
|
||||||
|
webhook:
|
||||||
|
enabled: false
|
||||||
|
token: null # Set a secure token to enable webhook triggers
|
||||||
|
path: /scheduler/webhook
|
||||||
|
|
||||||
|
# Health check endpoint
|
||||||
|
health:
|
||||||
|
enabled: true
|
||||||
|
path: /scheduler/health
|
||||||
|
|
||||||
|
# Job execution history
|
||||||
|
history:
|
||||||
|
enabled: true
|
||||||
|
retention_days: 30
|
||||||
|
path: user-data://scheduler/history
|
||||||
|
|
||||||
|
# Performance settings
|
||||||
|
performance:
|
||||||
|
job_timeout: 300 # Default timeout in seconds
|
||||||
|
lock_timeout: 10 # Lock acquisition timeout in seconds
|
||||||
|
|
||||||
|
# Monitoring and alerts
|
||||||
|
monitoring:
|
||||||
|
enabled: false
|
||||||
|
alert_on_failure: true
|
||||||
|
alert_email: null
|
||||||
|
webhook_url: null
|
||||||
|
|
||||||
|
# Trigger detection methods
|
||||||
|
triggers:
|
||||||
|
check_cron: true
|
||||||
|
check_systemd: true
|
||||||
|
check_webhook: true
|
||||||
|
check_external: true
|
||||||
@@ -32,8 +32,16 @@ xss_dangerous_tags:
|
|||||||
- base
|
- base
|
||||||
uploads_dangerous_extensions:
|
uploads_dangerous_extensions:
|
||||||
- php
|
- php
|
||||||
|
- php2
|
||||||
|
- php3
|
||||||
|
- php4
|
||||||
|
- php5
|
||||||
|
- phar
|
||||||
|
- phtml
|
||||||
- html
|
- html
|
||||||
- htm
|
- htm
|
||||||
|
- shtml
|
||||||
|
- shtm
|
||||||
- js
|
- js
|
||||||
- exe
|
- exe
|
||||||
sanitize_svg: true
|
sanitize_svg: true
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ routes:
|
|||||||
# '/new/(.*)': '/blog/$1' # Regex any /new/my-page URL to /blog/my-page Route
|
# '/new/(.*)': '/blog/$1' # Regex any /new/my-page URL to /blog/my-page Route
|
||||||
|
|
||||||
blog:
|
blog:
|
||||||
route: '/blog' # Custom value added (accessible via system.blog.route)
|
route: '/blog' # Custom value added (accessible via site.blog.route)
|
||||||
|
|
||||||
#menu: # Menu Example
|
#menu: # Menu Example
|
||||||
# - text: Source
|
# - text: Source
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
schemes:
|
|
||||||
image:
|
|
||||||
type: Stream
|
|
||||||
paths:
|
|
||||||
- user://images
|
|
||||||
- system://images
|
|
||||||
|
|
||||||
page:
|
|
||||||
type: ReadOnlyStream
|
|
||||||
paths:
|
|
||||||
- user://pages
|
|
||||||
|
|
||||||
account:
|
|
||||||
type: ReadOnlyStream
|
|
||||||
paths:
|
|
||||||
- user://accounts
|
|
||||||
@@ -10,24 +10,33 @@ custom_base_url: '' # Set the base_url manually, e.
|
|||||||
username_regex: '^[a-z0-9_-]{3,16}$' # Only lowercase chars, digits, dashes, underscores. 3 - 16 chars
|
username_regex: '^[a-z0-9_-]{3,16}$' # Only lowercase chars, digits, dashes, underscores. 3 - 16 chars
|
||||||
pwd_regex: '(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}' # At least one number, one uppercase and lowercase letter, and be at least 8+ chars
|
pwd_regex: '(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}' # At least one number, one uppercase and lowercase letter, and be at least 8+ chars
|
||||||
intl_enabled: true # Special logic for PHP International Extension (mod_intl)
|
intl_enabled: true # Special logic for PHP International Extension (mod_intl)
|
||||||
|
http_x_forwarded: # Configuration options for the various HTTP_X_FORWARD headers
|
||||||
|
protocol: true
|
||||||
|
host: false
|
||||||
|
port: true
|
||||||
|
ip: true
|
||||||
|
|
||||||
languages:
|
languages:
|
||||||
supported: [] # List of languages supported. eg: [en, fr, de]
|
supported: [] # List of languages supported. eg: [en, fr, de]
|
||||||
default_lang: # Default is the first supported language. Must be one of the supported languages
|
default_lang: # Default is the first supported language. Must be one of the supported languages
|
||||||
include_default_lang: true # Include the default lang prefix in all URLs
|
include_default_lang: true # Include the default lang prefix in all URLs
|
||||||
pages_fallback_only: false # Only fallback to find page content through supported languages
|
include_default_lang_file_extension: true # If true, include language code for the default language in file extension: default.en.md
|
||||||
translations: true # Enable translations by default
|
translations: true # If false, translation keys are used instead of translated strings
|
||||||
translations_fallback: true # Fallback through supported translations if active lang doesn't exist
|
translations_fallback: true # Fallback through supported translations if active lang doesn't exist
|
||||||
session_store_active: false # Store active language in session
|
session_store_active: false # Store active language in session
|
||||||
http_accept_language: false # Attempt to set the language based on http_accept_language header in the browser
|
http_accept_language: false # Attempt to set the language based on http_accept_language header in the browser
|
||||||
override_locale: false # Override the default or system locale with language specific one
|
override_locale: false # Override the default or system locale with language specific one
|
||||||
|
content_fallback: {} # Custom language fallbacks. eg: {fr: ['fr', 'en']}
|
||||||
|
pages_fallback_only: false # DEPRECATED: Use `content_fallback` instead
|
||||||
|
debug: false # Debug language detection
|
||||||
|
|
||||||
home:
|
home:
|
||||||
alias: '/home' # Default path for home, ie /
|
alias: '/home' # Default path for home, ie /
|
||||||
hide_in_urls: false # Hide the home route in URLs
|
hide_in_urls: false # Hide the home route in URLs
|
||||||
|
|
||||||
pages:
|
pages:
|
||||||
type: page # EXPERIMENTAL: Page type: page or flex
|
type: regular # EXPERIMENTAL: Page type: regular or flex
|
||||||
|
dirs: ['page://'] # Advanced functionality, allows for multiple page paths
|
||||||
theme: quark # Default theme (defaults to "quark" theme)
|
theme: quark # Default theme (defaults to "quark" theme)
|
||||||
order:
|
order:
|
||||||
by: default # Order pages by "default", "alpha" or "date"
|
by: default # Order pages by "default", "alpha" or "date"
|
||||||
@@ -55,16 +64,22 @@ pages:
|
|||||||
special_chars: # List of special characters to automatically convert to entities
|
special_chars: # List of special characters to automatically convert to entities
|
||||||
'>': 'gt'
|
'>': 'gt'
|
||||||
'<': 'lt'
|
'<': 'lt'
|
||||||
|
valid_link_attributes: # Valid attributes to pass through via markdown links
|
||||||
|
- rel
|
||||||
|
- target
|
||||||
|
- id
|
||||||
|
- class
|
||||||
|
- classes
|
||||||
types: [html,htm,xml,txt,json,rss,atom] # list of valid page types
|
types: [html,htm,xml,txt,json,rss,atom] # list of valid page types
|
||||||
append_url_extension: '' # Append page's extension in Page urls (e.g. '.html' results in /path/page.html)
|
append_url_extension: '' # Append page's extension in Page urls (e.g. '.html' results in /path/page.html)
|
||||||
expires: 604800 # Page expires time in seconds (604800 seconds = 7 days)
|
expires: 604800 # Page expires time in seconds (604800 seconds = 7 days)
|
||||||
cache_control: # Can be blank for no setting, or a valid `cache-control` text value
|
cache_control: # Can be blank for no setting, or a valid `cache-control` text value
|
||||||
last_modified: false # Set the last modified date header based on file modification timestamp
|
last_modified: false # Set the last modified date header based on file modification timestamp
|
||||||
etag: false # Set the etag header tag
|
etag: true # Set the etag header tag
|
||||||
vary_accept_encoding: false # Add `Vary: Accept-Encoding` header
|
vary_accept_encoding: false # Add `Vary: Accept-Encoding` header
|
||||||
redirect_default_route: false # Automatically redirect to a page's default route
|
redirect_default_code: 302 # Default code to use for redirects: 301|302|303
|
||||||
redirect_default_code: 302 # Default code to use for redirects
|
redirect_trailing_slash: 1 # Always redirect trailing slash with redirect code 0|1|301|302 (0: no redirect, 1: use default code)
|
||||||
redirect_trailing_slash: true # Handle automatically or 302 redirect a trailing / URL
|
redirect_default_route: 0 # Always redirect to page's default route using code 0|1|301|302, also removes .htm and .html extensions
|
||||||
ignore_files: [.DS_Store] # Files to ignore in Pages
|
ignore_files: [.DS_Store] # Files to ignore in Pages
|
||||||
ignore_folders: [.git, .idea] # Folders to ignore in Pages
|
ignore_folders: [.git, .idea] # Folders to ignore in Pages
|
||||||
ignore_hidden: true # Ignore all Hidden files and folders
|
ignore_hidden: true # Ignore all Hidden files and folders
|
||||||
@@ -83,21 +98,26 @@ cache:
|
|||||||
purge_at: '0 4 * * *' # How often to purge old file cache (using new scheduler)
|
purge_at: '0 4 * * *' # How often to purge old file cache (using new scheduler)
|
||||||
clear_at: '0 3 * * *' # How often to clear cache (using new scheduler)
|
clear_at: '0 3 * * *' # How often to clear cache (using new scheduler)
|
||||||
clear_job_type: 'standard' # Type to clear when processing the scheduled clear job `standard`|`all`
|
clear_job_type: 'standard' # Type to clear when processing the scheduled clear job `standard`|`all`
|
||||||
clear_images_by_default: true # By default grav will include processed images in cache clear, this can be disabled
|
clear_images_by_default: false # By default grav does not include processed images in cache clear, this can be enabled
|
||||||
cli_compatibility: false # Ensures only non-volatile drivers are used (file, redis, memcache, etc.)
|
cli_compatibility: false # Ensures only non-volatile drivers are used (file, redis, memcache, etc.)
|
||||||
lifetime: 604800 # Lifetime of cached data in seconds (0 = infinite)
|
lifetime: 604800 # Lifetime of cached data in seconds (0 = infinite)
|
||||||
|
purge_max_age_days: 30 # Maximum age of cache items in days before they are purged
|
||||||
gzip: false # GZip compress the page output
|
gzip: false # GZip compress the page output
|
||||||
allow_webserver_gzip: false # If true, `content-encoding: identity` but connection isn't closed before `onShutDown()` event
|
allow_webserver_gzip: false # If true, `content-encoding: identity` but connection isn't closed before `onShutDown()` event
|
||||||
redis:
|
redis:
|
||||||
socket: false # Path to redis unix socket (e.g. /var/run/redis/redis.sock), false = use server and port to connect
|
socket: false # Path to redis unix socket (e.g. /var/run/redis/redis.sock), false = use server and port to connect
|
||||||
|
password: # Optional password
|
||||||
|
database: # Optional database ID
|
||||||
|
|
||||||
twig:
|
twig:
|
||||||
cache: true # Set to true to enable Twig caching
|
cache: true # Set to true to enable Twig caching
|
||||||
debug: true # Enable Twig debug
|
debug: true # Enable Twig debug
|
||||||
auto_reload: true # Refresh cache on changes
|
auto_reload: true # Refresh cache on changes
|
||||||
autoescape: false # Autoescape Twig vars (DEPRECATED, always enabled in strict mode)
|
autoescape: true # Autoescape Twig vars (DEPRECATED, always enabled in strict mode)
|
||||||
undefined_functions: true # Allow undefined functions
|
undefined_functions: true # Allow undefined functions
|
||||||
undefined_filters: true # Allow undefined filters
|
undefined_filters: true # Allow undefined filters
|
||||||
|
safe_functions: [] # List of PHP functions which are allowed to be used as Twig functions
|
||||||
|
safe_filters: [] # List of PHP functions which are allowed to be used as Twig filters
|
||||||
umask_fix: false # By default Twig creates cached files as 755, fix switches this to 775
|
umask_fix: false # By default Twig creates cached files as 755, fix switches this to 775
|
||||||
|
|
||||||
assets: # Configuration for Assets Manager (JS, CSS)
|
assets: # Configuration for Assets Manager (JS, CSS)
|
||||||
@@ -110,10 +130,14 @@ assets: # Configuration for Assets Mana
|
|||||||
js_pipeline: false # The JS pipeline is the unification of multiple JS resources into one file
|
js_pipeline: false # The JS pipeline is the unification of multiple JS resources into one file
|
||||||
js_pipeline_include_externals: true # Include external URLs in the pipeline by default
|
js_pipeline_include_externals: true # Include external URLs in the pipeline by default
|
||||||
js_pipeline_before_excludes: true # Render the pipeline before any excluded files
|
js_pipeline_before_excludes: true # Render the pipeline before any excluded files
|
||||||
|
js_module_pipeline: false # The JS Module pipeline is the unification of multiple JS Module resources into one file
|
||||||
|
js_module_pipeline_include_externals: true # Include external URLs in the pipeline by default
|
||||||
|
js_module_pipeline_before_excludes: true # Render the pipeline before any excluded files
|
||||||
js_minify: true # Minify the JS during pipelining
|
js_minify: true # Minify the JS during pipelining
|
||||||
enable_asset_timestamp: false # Enable asset timestamps
|
enable_asset_timestamp: false # Enable asset timestamps
|
||||||
|
enable_asset_sri: false # Enable asset SRI
|
||||||
collections:
|
collections:
|
||||||
jquery: system://assets/jquery/jquery-2.x.min.js
|
jquery: system://assets/jquery/jquery-3.x.min.js
|
||||||
|
|
||||||
errors:
|
errors:
|
||||||
display: 0 # Display either (1) Full backtrace | (0) Simple Error | (-1) System Error
|
display: 0 # Display either (1) Full backtrace | (0) Simple Error | (-1) System Error
|
||||||
@@ -123,6 +147,7 @@ log:
|
|||||||
handler: file # Log handler. Currently supported: file | syslog
|
handler: file # Log handler. Currently supported: file | syslog
|
||||||
syslog:
|
syslog:
|
||||||
facility: local6 # Syslog facilities output
|
facility: local6 # Syslog facilities output
|
||||||
|
tag: grav # Syslog tag. Default: "grav".
|
||||||
|
|
||||||
debugger:
|
debugger:
|
||||||
enabled: false # Enable Grav debugger and following settings
|
enabled: false # Enable Grav debugger and following settings
|
||||||
@@ -132,12 +157,27 @@ debugger:
|
|||||||
close_connection: true # Close the connection before calling onShutdown(). false for debugging
|
close_connection: true # Close the connection before calling onShutdown(). false for debugging
|
||||||
|
|
||||||
images:
|
images:
|
||||||
|
adapter: gd # Image adapter to use: gd | imagick
|
||||||
default_image_quality: 85 # Default image quality to use when resampling images (85%)
|
default_image_quality: 85 # Default image quality to use when resampling images (85%)
|
||||||
cache_all: false # Cache all image by default
|
cache_all: false # Cache all image by default
|
||||||
cache_perms: '0755' # MUST BE IN QUOTES!! Default cache folder perms. Usually '0755' or '0775'
|
cache_perms: '0755' # MUST BE IN QUOTES!! Default cache folder perms. Usually '0755' or '0775'
|
||||||
debug: false # Show an overlay over images indicating the pixel depth of the image when working with retina for example
|
debug: false # Show an overlay over images indicating the pixel depth of the image when working with retina for example
|
||||||
auto_fix_orientation: false # Automatically fix the image orientation based on the Exif data
|
auto_fix_orientation: true # Automatically fix the image orientation based on the Exif data
|
||||||
seofriendly: false # SEO-friendly processed image names
|
seofriendly: false # SEO-friendly processed image names
|
||||||
|
cls: # Cumulative Layout Shift: See https://web.dev/optimize-cls/
|
||||||
|
auto_sizes: false # Automatically add height/width to image
|
||||||
|
aspect_ratio: false # Reserve space with aspect ratio style
|
||||||
|
retina_scale: 1 # scale to adjust auto-sizes for better handling of HiDPI resolutions
|
||||||
|
defaults:
|
||||||
|
loading: auto # Let browser pick [auto|lazy|eager]
|
||||||
|
decoding: auto # Let browser pick [auto|sync|async]
|
||||||
|
fetchpriority: auto # Let browser pick [auto|high|low]
|
||||||
|
watermark:
|
||||||
|
image: 'system://images/watermark.png' # Path to a watermark image
|
||||||
|
position_y: 'center' # top|center|bottom
|
||||||
|
position_x: 'center' # left|center|right
|
||||||
|
scale: 33 # percentage of watermark scale
|
||||||
|
watermark_all: false # automatically watermark all images
|
||||||
|
|
||||||
media:
|
media:
|
||||||
enable_media_timestamp: false # Enable media timestamps
|
enable_media_timestamp: false # Enable media timestamps
|
||||||
@@ -152,21 +192,48 @@ session:
|
|||||||
name: grav-site # Name prefix of the session cookie. Use alphanumeric, dashes or underscores only. Do not use dots in the session name
|
name: grav-site # Name prefix of the session cookie. Use alphanumeric, dashes or underscores only. Do not use dots in the session name
|
||||||
uniqueness: path # Should sessions be `path` based or `security.salt` based
|
uniqueness: path # Should sessions be `path` based or `security.salt` based
|
||||||
secure: false # Set session secure. If true, indicates that communication for this cookie must be over an encrypted transmission. Enable this only on sites that run exclusively on HTTPS
|
secure: false # Set session secure. If true, indicates that communication for this cookie must be over an encrypted transmission. Enable this only on sites that run exclusively on HTTPS
|
||||||
|
secure_https: true # Set session secure on HTTPS but not on HTTP. Has no effect if you have `session.secure: true`. Set to false if your site jumps between HTTP and HTTPS.
|
||||||
httponly: true # Set session HTTP only. If true, indicates that cookies should be used only over HTTP, and JavaScript modification is not allowed.
|
httponly: true # Set session HTTP only. If true, indicates that cookies should be used only over HTTP, and JavaScript modification is not allowed.
|
||||||
|
samesite: Lax # Set session SameSite. Possible values are Lax, Strict and None. See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
|
||||||
split: true # Sessions should be independent between site and plugins (such as admin)
|
split: true # Sessions should be independent between site and plugins (such as admin)
|
||||||
path:
|
domain: # Domain used by sessions.
|
||||||
|
path: # Path used by sessions.
|
||||||
|
|
||||||
gpm:
|
gpm:
|
||||||
releases: testing # Set to either 'stable' or 'testing'
|
releases: stable # Set to either 'stable' or 'testing'
|
||||||
proxy_url: # Configure a manual proxy URL for GPM (eg 127.0.0.1:3128)
|
|
||||||
method: 'auto' # Either 'curl', 'fopen' or 'auto'. 'auto' will try fopen first and if not available cURL
|
|
||||||
verify_peer: true # Sometimes on some systems (Windows most commonly) GPM is unable to connect because the SSL certificate cannot be verified. Disabling this setting might help.
|
|
||||||
official_gpm_only: true # By default GPM direct-install will only allow URLs via the official GPM proxy to ensure security
|
official_gpm_only: true # By default GPM direct-install will only allow URLs via the official GPM proxy to ensure security
|
||||||
|
|
||||||
|
updates:
|
||||||
|
safe_upgrade: true # Enable guarded staging+rollback pipeline for Grav self-updates
|
||||||
|
safe_upgrade_snapshot_limit: 5 # Maximum number of safe-upgrade snapshots to retain (0 = unlimited)
|
||||||
|
|
||||||
|
http:
|
||||||
|
method: auto # Either 'curl', 'fopen' or 'auto'. 'auto' will try fopen first and if not available cURL
|
||||||
|
enable_proxy: true # Enable proxy server configuration
|
||||||
|
proxy_url: # Configure a manual proxy URL for GPM (eg 127.0.0.1:3128)
|
||||||
|
proxy_cert_path: # Local path to proxy certificate folder containing pem files
|
||||||
|
concurrent_connections: 5 # Concurrent HTTP connections when multiplexing
|
||||||
|
verify_peer: true # Enable/Disable SSL verification of peer certificates
|
||||||
|
verify_host: true # Enable/Disable SSL verification of host certificates
|
||||||
|
|
||||||
accounts:
|
accounts:
|
||||||
type: data # EXPERIMENTAL: Account type: data or flex
|
type: regular # EXPERIMENTAL: Account type: regular or flex
|
||||||
storage: file # EXPERIMENTAL: Flex storage type: file or folder
|
storage: file # EXPERIMENTAL: Flex storage type: file or folder
|
||||||
|
avatar: gravatar # Avatar generator [multiavatar|gravatar]
|
||||||
|
|
||||||
|
flex:
|
||||||
|
cache:
|
||||||
|
index:
|
||||||
|
enabled: true # Set to true to enable Flex index caching. Is used to cache timestamps in files
|
||||||
|
lifetime: 60 # Lifetime of cached index in seconds (0 = infinite)
|
||||||
|
object:
|
||||||
|
enabled: true # Set to true to enable Flex object caching. Is used to cache object data
|
||||||
|
lifetime: 600 # Lifetime of cached objects in seconds (0 = infinite)
|
||||||
|
render:
|
||||||
|
enabled: true # Set to true to enable Flex render caching. Is used to cache rendered output
|
||||||
|
lifetime: 600 # Lifetime of cached HTML in seconds (0 = infinite)
|
||||||
|
|
||||||
strict_mode:
|
strict_mode:
|
||||||
yaml_compat: true # Grav 1.5+: Enables YAML backwards compatibility
|
yaml_compat: false # Set to true to enable YAML backwards compatibility
|
||||||
twig_compat: true # Grav 1.5+: Enables deprecated Twig autoescape setting (autoescape: false)
|
twig_compat: false # Set to true to enable deprecated Twig settings (autoescape: false)
|
||||||
|
blueprint_compat: false # Set to true to enable backward compatible strict support for blueprints
|
||||||
|
|||||||
@@ -1,42 +1,90 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package Grav\Core
|
* @package Grav\Core
|
||||||
*
|
*
|
||||||
* @copyright Copyright (C) 2015 - 2019 Trilby Media, LLC. All rights reserved.
|
* @copyright Copyright (c) 2015 - 2025 Trilby Media, LLC. All rights reserved.
|
||||||
* @license MIT License; see LICENSE file for details.
|
* @license MIT License; see LICENSE file for details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Some standard defines
|
// Some standard defines
|
||||||
define('GRAV', true);
|
define('GRAV', true);
|
||||||
define('GRAV_VERSION', '1.7.0-rc.1');
|
define('GRAV_VERSION', '1.7.50.9');
|
||||||
define('GRAV_TESTING', true);
|
define('GRAV_SCHEMA', '1.7.0_2020-11-20_1');
|
||||||
define('DS', '/');
|
define('GRAV_TESTING', false);
|
||||||
|
|
||||||
|
// PHP minimum requirement
|
||||||
if (!defined('GRAV_PHP_MIN')) {
|
if (!defined('GRAV_PHP_MIN')) {
|
||||||
define('GRAV_PHP_MIN', '7.1.3');
|
define('GRAV_PHP_MIN', '7.3.6');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Directories and Paths
|
// Directory separator
|
||||||
if (!defined('GRAV_ROOT')) {
|
if (!defined('DS')) {
|
||||||
define('GRAV_ROOT', str_replace(DIRECTORY_SEPARATOR, DS, getcwd()));
|
define('DS', '/');
|
||||||
}
|
}
|
||||||
define('ROOT_DIR', GRAV_ROOT . '/');
|
|
||||||
define('USER_PATH', 'user/');
|
// Absolute path to Grav root. This is where Grav is installed into.
|
||||||
define('USER_DIR', ROOT_DIR . USER_PATH);
|
if (!defined('GRAV_ROOT')) {
|
||||||
define('CACHE_DIR', ROOT_DIR . 'cache/');
|
$path = rtrim(str_replace(DIRECTORY_SEPARATOR, DS, getenv('GRAV_ROOT') ?: getcwd()), DS);
|
||||||
|
define('GRAV_ROOT', $path ?: DS);
|
||||||
|
}
|
||||||
|
// Absolute path to Grav webroot. This is the path where your site is located in.
|
||||||
|
if (!defined('GRAV_WEBROOT')) {
|
||||||
|
$path = rtrim(getenv('GRAV_WEBROOT') ?: GRAV_ROOT, DS);
|
||||||
|
define('GRAV_WEBROOT', $path ?: DS);
|
||||||
|
}
|
||||||
|
// Relative path to user folder. This path needs to be located under GRAV_WEBROOT.
|
||||||
|
if (!defined('GRAV_USER_PATH')) {
|
||||||
|
$path = rtrim(getenv('GRAV_USER_PATH') ?: 'user', DS);
|
||||||
|
define('GRAV_USER_PATH', $path);
|
||||||
|
}
|
||||||
|
// Absolute or relative path to system folder. Defaults to GRAV_ROOT/system
|
||||||
|
// If system folder is outside of webroot, see https://github.com/getgrav/grav/issues/3297#issuecomment-810294972
|
||||||
|
if (!defined('GRAV_SYSTEM_PATH')) {
|
||||||
|
$path = rtrim(getenv('GRAV_SYSTEM_PATH') ?: 'system', DS);
|
||||||
|
define('GRAV_SYSTEM_PATH', $path);
|
||||||
|
}
|
||||||
|
// Absolute or relative path to cache folder. Defaults to GRAV_ROOT/cache
|
||||||
|
if (!defined('GRAV_CACHE_PATH')) {
|
||||||
|
$path = rtrim(getenv('GRAV_CACHE_PATH') ?: 'cache', DS);
|
||||||
|
define('GRAV_CACHE_PATH', $path);
|
||||||
|
}
|
||||||
|
// Absolute or relative path to logs folder. Defaults to GRAV_ROOT/logs
|
||||||
|
if (!defined('GRAV_LOG_PATH')) {
|
||||||
|
$path = rtrim(getenv('GRAV_LOG_PATH') ?: 'logs', DS);
|
||||||
|
define('GRAV_LOG_PATH', $path);
|
||||||
|
}
|
||||||
|
// Absolute or relative path to tmp folder. Defaults to GRAV_ROOT/tmp
|
||||||
|
if (!defined('GRAV_TMP_PATH')) {
|
||||||
|
$path = rtrim(getenv('GRAV_TMP_PATH') ?: 'tmp', DS);
|
||||||
|
define('GRAV_TMP_PATH', $path);
|
||||||
|
}
|
||||||
|
// Absolute or relative path to backup folder. Defaults to GRAV_ROOT/backup
|
||||||
|
if (!defined('GRAV_BACKUP_PATH')) {
|
||||||
|
$path = rtrim(getenv('GRAV_BACKUP_PATH') ?: 'backup', DS);
|
||||||
|
define('GRAV_BACKUP_PATH', $path);
|
||||||
|
}
|
||||||
|
unset($path);
|
||||||
|
|
||||||
|
// INTERNAL: Do not use!
|
||||||
|
define('USER_DIR', GRAV_WEBROOT . '/' . GRAV_USER_PATH . '/');
|
||||||
|
define('CACHE_DIR', (!preg_match('`^(/|[a-z]:[\\\/])`ui', GRAV_CACHE_PATH) ? GRAV_ROOT . '/' : '') . GRAV_CACHE_PATH . '/');
|
||||||
|
|
||||||
// DEPRECATED: Do not use!
|
// DEPRECATED: Do not use!
|
||||||
define('ASSETS_DIR', ROOT_DIR . 'assets/');
|
define('CACHE_PATH', GRAV_CACHE_PATH . DS);
|
||||||
define('IMAGES_DIR', ROOT_DIR . 'images/');
|
define('USER_PATH', GRAV_USER_PATH . DS);
|
||||||
define('ACCOUNTS_DIR', USER_DIR .'accounts/');
|
define('ROOT_DIR', GRAV_ROOT . DS);
|
||||||
define('PAGES_DIR', USER_DIR .'pages/');
|
define('ASSETS_DIR', GRAV_WEBROOT . '/assets/');
|
||||||
define('DATA_DIR', USER_DIR .'data/');
|
define('IMAGES_DIR', GRAV_WEBROOT . '/images/');
|
||||||
define('SYSTEM_DIR', ROOT_DIR .'system/');
|
define('ACCOUNTS_DIR', USER_DIR . 'accounts/');
|
||||||
define('LIB_DIR', SYSTEM_DIR .'src/');
|
define('PAGES_DIR', USER_DIR . 'pages/');
|
||||||
define('PLUGINS_DIR', USER_DIR .'plugins/');
|
define('DATA_DIR', USER_DIR . 'data/');
|
||||||
define('THEMES_DIR', USER_DIR .'themes/');
|
define('PLUGINS_DIR', USER_DIR . 'plugins/');
|
||||||
define('VENDOR_DIR', ROOT_DIR .'vendor/');
|
define('THEMES_DIR', USER_DIR . 'themes/');
|
||||||
define('LOG_DIR', ROOT_DIR .'logs/');
|
define('SYSTEM_DIR', (!preg_match('`^(/|[a-z]:[\\\/])`ui', GRAV_SYSTEM_PATH) ? GRAV_ROOT . '/' : '') . GRAV_SYSTEM_PATH . '/');
|
||||||
|
define('LIB_DIR', SYSTEM_DIR . 'src/');
|
||||||
|
define('VENDOR_DIR', GRAV_ROOT . '/vendor/');
|
||||||
|
define('LOG_DIR', (!preg_match('`^(/|[a-z]:[\\\/])`ui', GRAV_LOG_PATH) ? GRAV_ROOT . '/' : '') . GRAV_LOG_PATH . '/');
|
||||||
// END DEPRECATED
|
// END DEPRECATED
|
||||||
|
|
||||||
// Some extensions
|
// Some extensions
|
||||||
@@ -51,3 +99,6 @@ define('RAW_CONTENT', 1);
|
|||||||
define('TWIG_CONTENT', 2);
|
define('TWIG_CONTENT', 2);
|
||||||
define('TWIG_CONTENT_LIST', 3);
|
define('TWIG_CONTENT_LIST', 3);
|
||||||
define('TWIG_TEMPLATES', 4);
|
define('TWIG_TEMPLATES', 4);
|
||||||
|
|
||||||
|
// Filters
|
||||||
|
define('GRAV_SANITIZE_STRING', 5001);
|
||||||
|
|||||||
BIN
system/images/watermark.png
Normal file
BIN
system/images/watermark.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 94 KiB |
@@ -2,7 +2,7 @@
|
|||||||
/**
|
/**
|
||||||
* @package Grav\Core
|
* @package Grav\Core
|
||||||
*
|
*
|
||||||
* @copyright Copyright (C) 2015 - 2019 Trilby Media, LLC. All rights reserved.
|
* @copyright Copyright (c) 2015 - 2025 Trilby Media, LLC. All rights reserved.
|
||||||
* @license MIT License; see LICENSE file for details.
|
* @license MIT License; see LICENSE file for details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -10,8 +10,43 @@ if (!defined('GRAV_ROOT')) {
|
|||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
use Grav\Installer\Install;
|
// Check if Install class is already loaded (from an older Grav version)
|
||||||
|
// This happens when upgrading from older versions where the OLD Install class
|
||||||
|
// was loaded via autoloader before extracting the update package (e.g., via Install::forceSafeUpgrade())
|
||||||
|
$logInstallerSource = static function ($install, string $source) {
|
||||||
|
$sourceLabel = $source === 'extracted update package' ? 'update package' : 'existing installation';
|
||||||
|
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
|
||||||
|
echo sprintf(" |- Using installer from %s\n", $sourceLabel);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (class_exists('Grav\\Installer\\Install', false)) {
|
||||||
|
// OLD Install class is already loaded. We cannot load the NEW one due to PHP limitations.
|
||||||
|
// However, we can work around this by:
|
||||||
|
// 1. Using a different class name for the NEW installer
|
||||||
|
// 2. Or, accepting that the OLD Install class will run but ensuring it can still upgrade properly
|
||||||
|
|
||||||
|
// For now, use the OLD Install class but set its location to this extracted package
|
||||||
|
// so it processes files from here
|
||||||
|
$install = Grav\Installer\Install::instance();
|
||||||
|
|
||||||
|
// Use reflection to update the location property to point to this package
|
||||||
|
$reflection = new \ReflectionClass($install);
|
||||||
|
if ($reflection->hasProperty('location')) {
|
||||||
|
$locationProp = $reflection->getProperty('location');
|
||||||
|
$locationProp->setAccessible(true);
|
||||||
|
$locationProp->setValue($install, __DIR__ . '/..');
|
||||||
|
}
|
||||||
|
|
||||||
|
$logInstallerSource($install, 'existing installation');
|
||||||
|
|
||||||
|
return $install;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Normal case: Install class not yet loaded, load the NEW one
|
||||||
require_once __DIR__ . '/src/Grav/Installer/Install.php';
|
require_once __DIR__ . '/src/Grav/Installer/Install.php';
|
||||||
|
|
||||||
return Install::instance();
|
$install = Grav\Installer\Install::instance();
|
||||||
|
$logInstallerSource($install, 'extracted update package');
|
||||||
|
|
||||||
|
return $install;
|
||||||
|
|||||||
@@ -1,6 +1,17 @@
|
|||||||
---
|
---
|
||||||
GRAV:
|
GRAV:
|
||||||
FRONTMATTER_ERROR_PAGE: "---\nالعنوان: %1$s\n---\n# خطأ: مادة أمامية غير صحيحة\n\nمسار: '%2$s'\n\n**%3$s**\n\n, , ,\n\n%4$s\n, , ,"
|
FRONTMATTER_ERROR_PAGE: "---\nالعنوان: %1$s\n---\n# خطأ: مادة أمامية غير صحيحة\n\nمسار: '%2$s'\n\n**%3$s**\n\n, , ,\n\n%4$s\n, , ,"
|
||||||
|
INFLECTOR_UNCOUNTABLE:
|
||||||
|
- 'معدّات'
|
||||||
|
- 'معلومات'
|
||||||
|
- 'أرز'
|
||||||
|
- 'مال'
|
||||||
|
- 'نوع'
|
||||||
|
- 'سلسلة'
|
||||||
|
- 'سمك'
|
||||||
|
- 'خروف'
|
||||||
|
INFLECTOR_IRREGULAR:
|
||||||
|
'person': 'أشخاص'
|
||||||
NICETIME:
|
NICETIME:
|
||||||
NO_DATE_PROVIDED: لم يتم تقديم التاريخ
|
NO_DATE_PROVIDED: لم يتم تقديم التاريخ
|
||||||
BAD_DATE: تاريخ خاطئ
|
BAD_DATE: تاريخ خاطئ
|
||||||
@@ -37,9 +48,10 @@ GRAV:
|
|||||||
YR_PLURAL: سنوات
|
YR_PLURAL: سنوات
|
||||||
DEC_PLURAL: عقود
|
DEC_PLURAL: عقود
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>فشل التحقق من صحة:</b>
|
VALIDATION_FAIL: '<b>فشل التحقق من صحة:</b>'
|
||||||
INVALID_INPUT: إدخال غير صحيح في
|
INVALID_INPUT: 'إدخال غير صحيح في'
|
||||||
MISSING_REQUIRED_FIELD: 'حقل مطلوب مفقود:'
|
MISSING_REQUIRED_FIELD: 'حقل مطلوب مفقود:'
|
||||||
|
XSS_ISSUES: "مشاكل XSS محتملة تم اكتشافها في حقل '%s' '"
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'كانون الثاني'
|
- 'كانون الثاني'
|
||||||
- 'شباط'
|
- 'شباط'
|
||||||
@@ -61,3 +73,21 @@ GRAV:
|
|||||||
- 'الجمعة'
|
- 'الجمعة'
|
||||||
- 'السبت'
|
- 'السبت'
|
||||||
- 'الأحد'
|
- 'الأحد'
|
||||||
|
YES: "نعم"
|
||||||
|
NO: "لا"
|
||||||
|
CRON:
|
||||||
|
EVERY: كل
|
||||||
|
EVERY_HOUR: كل ساعة
|
||||||
|
EVERY_MINUTE: كل دقيقة
|
||||||
|
EVERY_DAY_OF_WEEK: كل يوم في الأسبوع
|
||||||
|
EVERY_DAY_OF_MONTH: كل يوم في الشهر
|
||||||
|
EVERY_MONTH: ' كل شهر'
|
||||||
|
TEXT_PERIOD: كل <b />
|
||||||
|
TEXT_MINS: ' في <b /> دقيقة(دقائق) بعد الساعة'
|
||||||
|
TEXT_TIME: ' في <b />:<b />'
|
||||||
|
TEXT_DOW: ' في <b />'
|
||||||
|
TEXT_MONTH: ' من <b />'
|
||||||
|
TEXT_DOM: ' في <b />'
|
||||||
|
ERROR1: الوسم %s غير مدعوم!
|
||||||
|
ERROR2: عدد عناصر غير صالح.
|
||||||
|
ERROR4: تعبير غير معروف
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ GRAV:
|
|||||||
BAD_DATE: Невалидна дата
|
BAD_DATE: Невалидна дата
|
||||||
AGO: преди
|
AGO: преди
|
||||||
FROM_NOW: от сега
|
FROM_NOW: от сега
|
||||||
|
JUST_NOW: току що
|
||||||
SECOND: секунда
|
SECOND: секунда
|
||||||
MINUTE: минута
|
MINUTE: минута
|
||||||
HOUR: час
|
HOUR: час
|
||||||
@@ -36,8 +37,8 @@ GRAV:
|
|||||||
YR_PLURAL: г
|
YR_PLURAL: г
|
||||||
DEC_PLURAL: дстлт
|
DEC_PLURAL: дстлт
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Неуспешна проверка:</b>
|
VALIDATION_FAIL: '<b>Неуспешна проверка:</b>'
|
||||||
INVALID_INPUT: Невалидно въвеждане в
|
INVALID_INPUT: 'Невалидно въвеждане в'
|
||||||
MISSING_REQUIRED_FIELD: 'Липсва задължително поле:'
|
MISSING_REQUIRED_FIELD: 'Липсва задължително поле:'
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'януари'
|
- 'януари'
|
||||||
@@ -60,3 +61,12 @@ GRAV:
|
|||||||
- 'петък'
|
- 'петък'
|
||||||
- 'събота'
|
- 'събота'
|
||||||
- 'неделя'
|
- 'неделя'
|
||||||
|
YES: "Да"
|
||||||
|
NO: "Не"
|
||||||
|
CRON:
|
||||||
|
EVERY: всеки
|
||||||
|
EVERY_HOUR: Всеки час
|
||||||
|
EVERY_MINUTE: Всяка минута
|
||||||
|
EVERY_DAY_OF_WEEK: Всеки ден от седмицата
|
||||||
|
EVERY_DAY_OF_MONTH: Всеки ден от месеца
|
||||||
|
EVERY_MONTH: Всеки месец
|
||||||
|
|||||||
@@ -1,11 +1,21 @@
|
|||||||
---
|
---
|
||||||
GRAV:
|
GRAV:
|
||||||
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# S'ha produït un error: Frontmatter invàlid\n\nRuta: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# S'ha produït un error: Frontmatter invàlid\n\nRuta: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
|
INFLECTOR_UNCOUNTABLE:
|
||||||
|
- ''
|
||||||
|
- 'informació'
|
||||||
|
- ''
|
||||||
|
- ''
|
||||||
|
- ''
|
||||||
|
- ''
|
||||||
|
- ''
|
||||||
|
- ''
|
||||||
NICETIME:
|
NICETIME:
|
||||||
NO_DATE_PROVIDED: No s'ha proporcionat data
|
NO_DATE_PROVIDED: No s'ha proporcionat data
|
||||||
BAD_DATE: Data invàlida
|
BAD_DATE: Data invàlida
|
||||||
AGO: abans
|
AGO: abans
|
||||||
FROM_NOW: des d'ara
|
FROM_NOW: des d'ara
|
||||||
|
JUST_NOW: Ara mateix
|
||||||
SECOND: segon
|
SECOND: segon
|
||||||
MINUTE: minut
|
MINUTE: minut
|
||||||
HOUR: hora
|
HOUR: hora
|
||||||
@@ -36,9 +46,10 @@ GRAV:
|
|||||||
YR_PLURAL: anys
|
YR_PLURAL: anys
|
||||||
DEC_PLURAL: dèc.
|
DEC_PLURAL: dèc.
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Ha fallat la validació:</b>
|
VALIDATION_FAIL: '<b>Ha fallat la validació:</b>'
|
||||||
INVALID_INPUT: Entrada no vàlida a
|
INVALID_INPUT: 'Entrada no vàlida a'
|
||||||
MISSING_REQUIRED_FIELD: 'Falta camp obligatori:'
|
MISSING_REQUIRED_FIELD: 'Falta camp obligatori:'
|
||||||
|
XSS_ISSUES: "Detectats potencials problemes XSS al camp '%s'"
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'Gener'
|
- 'Gener'
|
||||||
- 'Febrer'
|
- 'Febrer'
|
||||||
@@ -60,3 +71,17 @@ GRAV:
|
|||||||
- 'Divendres'
|
- 'Divendres'
|
||||||
- 'Dissabte'
|
- 'Dissabte'
|
||||||
- 'Diumenge'
|
- 'Diumenge'
|
||||||
|
YES: "Sí"
|
||||||
|
NO: "No"
|
||||||
|
CRON:
|
||||||
|
EVERY: cada
|
||||||
|
EVERY_HOUR: cada hora
|
||||||
|
EVERY_MINUTE: cada minut
|
||||||
|
EVERY_DAY_OF_WEEK: cada dia de la setmana
|
||||||
|
EVERY_DAY_OF_MONTH: cada dia del mes
|
||||||
|
EVERY_MONTH: cada mes
|
||||||
|
TEXT_PERIOD: Cada <b />
|
||||||
|
ERROR1: L'etiqueta %s no està suportada!
|
||||||
|
ERROR2: Nombre d'elements incorrecte
|
||||||
|
ERROR3: El jquery_element s'ha d'establir a la configuració de jqCron
|
||||||
|
ERROR4: Expressió no reconeguda
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
GRAV:
|
GRAV:
|
||||||
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# Chyba: Chybný frontmatter\n\nPath: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# Chyba: Chybná hlavička\n\nCesta: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
INFLECTOR_PLURALS:
|
INFLECTOR_PLURALS:
|
||||||
'/(quiz)$/i': '\1zes'
|
'/(quiz)$/i': '\1zes'
|
||||||
'/^(ox)$/i': '\1en'
|
'/^(ox)$/i': '\1en'
|
||||||
@@ -101,9 +101,10 @@ GRAV:
|
|||||||
YR_PLURAL: r
|
YR_PLURAL: r
|
||||||
DEC_PLURAL: dek
|
DEC_PLURAL: dek
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Ověření se nezdařilo:</b>
|
VALIDATION_FAIL: '<b>Ověření se nezdařilo:</b>'
|
||||||
INVALID_INPUT: Neplatný vstup v
|
INVALID_INPUT: 'Neplatný vstup v'
|
||||||
MISSING_REQUIRED_FIELD: 'Chybí požadované pole:'
|
MISSING_REQUIRED_FIELD: 'Chybí požadované pole:'
|
||||||
|
XSS_ISSUES: "Byly zjištěny možné problémy XSS v poli '%s'"
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'leden'
|
- 'leden'
|
||||||
- 'únor'
|
- 'únor'
|
||||||
@@ -125,6 +126,8 @@ GRAV:
|
|||||||
- 'pátek'
|
- 'pátek'
|
||||||
- 'sobota'
|
- 'sobota'
|
||||||
- 'neděle'
|
- 'neděle'
|
||||||
|
YES: "Ano"
|
||||||
|
NO: "Ne"
|
||||||
CRON:
|
CRON:
|
||||||
EVERY: každý
|
EVERY: každý
|
||||||
EVERY_HOUR: každou hodinu
|
EVERY_HOUR: každou hodinu
|
||||||
|
|||||||
@@ -1,11 +1,27 @@
|
|||||||
---
|
---
|
||||||
GRAV:
|
GRAV:
|
||||||
FRONTMATTER_ERROR_PAGE: "---\nTitel: %1$s\n---\n\n# Fejl: Ugyldigt frontmatter\n\nSti: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
FRONTMATTER_ERROR_PAGE: "---\nTitel: %1$s\n---\n\n# Fejl: Ugyldigt frontmatter\n\nSti: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
|
INFLECTOR_UNCOUNTABLE:
|
||||||
|
- 'udstyr'
|
||||||
|
- 'information'
|
||||||
|
- 'ris'
|
||||||
|
- 'penge'
|
||||||
|
- 'arter'
|
||||||
|
- 'Serier'
|
||||||
|
- 'fisk'
|
||||||
|
- 'får'
|
||||||
|
INFLECTOR_IRREGULAR:
|
||||||
|
'person': 'personer'
|
||||||
|
'man': 'mænd'
|
||||||
|
'child': 'børn'
|
||||||
|
'sex': 'køn'
|
||||||
|
'move': 'flyt'
|
||||||
NICETIME:
|
NICETIME:
|
||||||
NO_DATE_PROVIDED: Ingen dato angivet
|
NO_DATE_PROVIDED: Ingen dato angivet
|
||||||
BAD_DATE: Ugyldig dato
|
BAD_DATE: Ugyldig dato
|
||||||
AGO: siden
|
AGO: siden
|
||||||
FROM_NOW: fra nu
|
FROM_NOW: fra nu
|
||||||
|
JUST_NOW: lige nu
|
||||||
SECOND: sekund
|
SECOND: sekund
|
||||||
MINUTE: minut
|
MINUTE: minut
|
||||||
HOUR: time
|
HOUR: time
|
||||||
@@ -15,6 +31,7 @@ GRAV:
|
|||||||
YEAR: år
|
YEAR: år
|
||||||
DECADE: årti
|
DECADE: årti
|
||||||
SEC: sek
|
SEC: sek
|
||||||
|
MIN: min.
|
||||||
HR: t
|
HR: t
|
||||||
WK: u
|
WK: u
|
||||||
MO: md
|
MO: md
|
||||||
@@ -36,8 +53,8 @@ GRAV:
|
|||||||
YR_PLURAL: år
|
YR_PLURAL: år
|
||||||
DEC_PLURAL: årtier
|
DEC_PLURAL: årtier
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Validering mislykkedes:</b>
|
VALIDATION_FAIL: '<b>Validering mislykkedes:</b>'
|
||||||
INVALID_INPUT: Ugyldigt input i
|
INVALID_INPUT: 'Ugyldigt input i'
|
||||||
MISSING_REQUIRED_FIELD: 'Mangler obligatorisk felt:'
|
MISSING_REQUIRED_FIELD: 'Mangler obligatorisk felt:'
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'januar'
|
- 'januar'
|
||||||
@@ -60,3 +77,14 @@ GRAV:
|
|||||||
- 'fredag'
|
- 'fredag'
|
||||||
- 'lørdag'
|
- 'lørdag'
|
||||||
- 'søndag'
|
- 'søndag'
|
||||||
|
CRON:
|
||||||
|
EVERY: hver
|
||||||
|
EVERY_HOUR: hver time
|
||||||
|
EVERY_MINUTE: hvert minut
|
||||||
|
EVERY_DAY_OF_WEEK: alle ugens dage
|
||||||
|
EVERY_DAY_OF_MONTH: alle dage i måneden
|
||||||
|
EVERY_MONTH: hver måned
|
||||||
|
TEXT_PERIOD: Hver <b />
|
||||||
|
TEXT_MINS: ' ved <b /> minut(ter) over timen'
|
||||||
|
ERROR1: Tagget %s understøttes ikke!
|
||||||
|
ERROR2: Ugyldigt antal elementer
|
||||||
|
|||||||
@@ -101,9 +101,10 @@ GRAV:
|
|||||||
YR_PLURAL: Jahre
|
YR_PLURAL: Jahre
|
||||||
DEC_PLURAL: Jahrzehnten
|
DEC_PLURAL: Jahrzehnten
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Überprüfung fehlgeschlagen:</b>
|
VALIDATION_FAIL: '<b>Überprüfung fehlgeschlagen:</b>'
|
||||||
INVALID_INPUT: Ungültige Eingabe in
|
INVALID_INPUT: 'Ungültige Eingabe in'
|
||||||
MISSING_REQUIRED_FIELD: 'Erforderliches Feld fehlt:'
|
MISSING_REQUIRED_FIELD: 'Erforderliches Feld fehlt:'
|
||||||
|
XSS_ISSUES: "Potenzielle XSS-Probleme im Feld '%s' erkannt"
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'Januar'
|
- 'Januar'
|
||||||
- 'Februar'
|
- 'Februar'
|
||||||
@@ -125,6 +126,8 @@ GRAV:
|
|||||||
- 'Freitag'
|
- 'Freitag'
|
||||||
- 'Samstag'
|
- 'Samstag'
|
||||||
- 'Sonntag'
|
- 'Sonntag'
|
||||||
|
YES: "Ja"
|
||||||
|
NO: "Nein"
|
||||||
CRON:
|
CRON:
|
||||||
EVERY: jede
|
EVERY: jede
|
||||||
EVERY_HOUR: jede Stunde
|
EVERY_HOUR: jede Stunde
|
||||||
|
|||||||
@@ -1,11 +1,75 @@
|
|||||||
---
|
---
|
||||||
GRAV:
|
GRAV:
|
||||||
FRONTMATTER_ERROR_PAGE: "---\nΤίτλος: %1$s\n---\n\n# Σφάλμα: Μη έγκυρη διαδρομή Frontmatter\n\nΔιαδρομή: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
FRONTMATTER_ERROR_PAGE: "---\nΤίτλος: %1$s\n---\n\n# Σφάλμα: Μη έγκυρη διαδρομή Frontmatter\n\nΔιαδρομή: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
|
INFLECTOR_PLURALS:
|
||||||
|
'/(quiz)$/i': '\1zes'
|
||||||
|
'/^(ox)$/i': '\1en'
|
||||||
|
'/([m|l])ouse$/i': '\1ice'
|
||||||
|
'/(matr|vert|ind)ix|ex$/i': '\1ices'
|
||||||
|
'/(x|ch|ss|sh)$/i': '\1es'
|
||||||
|
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||||
|
'/([^aeiouy]|qu)y$/i': '\1ies'
|
||||||
|
'/(hive)$/i': '\1s'
|
||||||
|
'/(?:([^f])fe|([lr])f)$/i': '\1\2ves'
|
||||||
|
'/sis$/i': 'ses'
|
||||||
|
'/([ti])um$/i': '\1a'
|
||||||
|
'/(buffal|tomat)o$/i': '\1oes'
|
||||||
|
'/(bu)s$/i': '\1ses'
|
||||||
|
'/(alias|status)/i': '\1es'
|
||||||
|
'/(octop|vir)us$/i': '\1i'
|
||||||
|
'/(ax|test)is$/i': '\1es'
|
||||||
|
'/s$/i': 's'
|
||||||
|
'/$/': 's'
|
||||||
|
INFLECTOR_SINGULAR:
|
||||||
|
'/(quiz)zes$/i': '\1'
|
||||||
|
'/(matr)ices$/i': '\1ix'
|
||||||
|
'/(vert|ind)ices$/i': '\1ex'
|
||||||
|
'/^(ox)en/i': '\1'
|
||||||
|
'/(alias|status)es$/i': '\1'
|
||||||
|
'/([octop|vir])i$/i': '\1us'
|
||||||
|
'/(cris|ax|test)es$/i': '\1is'
|
||||||
|
'/(shoe)s$/i': '\1'
|
||||||
|
'/(o)es$/i': '\1'
|
||||||
|
'/(bus)es$/i': '\1'
|
||||||
|
'/([m|l])ice$/i': '\1ouse'
|
||||||
|
'/(x|ch|ss|sh)es$/i': '\1'
|
||||||
|
'/(m)ovies$/i': '\1ovie'
|
||||||
|
'/(s)eries$/i': '\1eries'
|
||||||
|
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||||
|
'/([lr])ves$/i': '\1f'
|
||||||
|
'/(tive)s$/i': '\1'
|
||||||
|
'/(hive)s$/i': '\1'
|
||||||
|
'/([^f])ves$/i': '\1fe'
|
||||||
|
'/(^analy)ses$/i': '\1sis'
|
||||||
|
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2sis'
|
||||||
|
'/([ti])a$/i': '\1um'
|
||||||
|
'/(n)ews$/i': '\1ews'
|
||||||
|
INFLECTOR_UNCOUNTABLE:
|
||||||
|
- 'εξοπλισμός'
|
||||||
|
- 'πληροφοριες'
|
||||||
|
- 'rice'
|
||||||
|
- 'χρήματα'
|
||||||
|
- 'είδη'
|
||||||
|
- 'σειρές'
|
||||||
|
- 'ψάρι'
|
||||||
|
- 'πρόβατο'
|
||||||
|
INFLECTOR_IRREGULAR:
|
||||||
|
'person': 'άνθρωποι'
|
||||||
|
'man': 'άνδρες'
|
||||||
|
'child': 'παιδιά'
|
||||||
|
'sex': 'φύλο'
|
||||||
|
'move': 'κινήσεις'
|
||||||
|
INFLECTOR_ORDINALS:
|
||||||
|
'default': 'th'
|
||||||
|
'first': 'st'
|
||||||
|
'second': 'nd'
|
||||||
|
'third': 'rd'
|
||||||
NICETIME:
|
NICETIME:
|
||||||
NO_DATE_PROVIDED: Δεν δόθηκε καμία ημερομηνία
|
NO_DATE_PROVIDED: Δεν δόθηκε καμία ημερομηνία
|
||||||
BAD_DATE: Εσφαλμένη ημερομηνία
|
BAD_DATE: Εσφαλμένη ημερομηνία
|
||||||
AGO: πρίν
|
AGO: πρίν
|
||||||
FROM_NOW: από τώρα
|
FROM_NOW: από τώρα
|
||||||
|
JUST_NOW: μόλις τώρα
|
||||||
SECOND: δευτερόλεπτο
|
SECOND: δευτερόλεπτο
|
||||||
MINUTE: λεπτό
|
MINUTE: λεπτό
|
||||||
HOUR: ώρα
|
HOUR: ώρα
|
||||||
@@ -37,8 +101,8 @@ GRAV:
|
|||||||
YR_PLURAL: έτη
|
YR_PLURAL: έτη
|
||||||
DEC_PLURAL: δεκαετίες
|
DEC_PLURAL: δεκαετίες
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Η επικύρωση απέτυχε:</b>
|
VALIDATION_FAIL: '<b>Η επικύρωση απέτυχε:</b>'
|
||||||
INVALID_INPUT: Μη έγκυρα δεδομένα σε
|
INVALID_INPUT: 'Μη έγκυρα δεδομένα σε'
|
||||||
MISSING_REQUIRED_FIELD: 'Λείπει το απαιτούμενο πεδίο:'
|
MISSING_REQUIRED_FIELD: 'Λείπει το απαιτούμενο πεδίο:'
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'Ιανουάριος'
|
- 'Ιανουάριος'
|
||||||
@@ -61,3 +125,20 @@ GRAV:
|
|||||||
- 'Παρασκευή'
|
- 'Παρασκευή'
|
||||||
- 'Σάββατο'
|
- 'Σάββατο'
|
||||||
- 'Κυριακή'
|
- 'Κυριακή'
|
||||||
|
CRON:
|
||||||
|
EVERY: κάθε
|
||||||
|
EVERY_HOUR: κάθε ώρα
|
||||||
|
EVERY_MINUTE: κάθε λεπτό
|
||||||
|
EVERY_DAY_OF_WEEK: κάθε μέρα της εβδομάδος
|
||||||
|
EVERY_DAY_OF_MONTH: κάθε μέρα του μήνα
|
||||||
|
EVERY_MONTH: κάθε μήνα
|
||||||
|
TEXT_PERIOD: Κάθε <b />
|
||||||
|
TEXT_MINS: ' κατά <b /> λεπτό(ά) μετά την ώρα'
|
||||||
|
TEXT_TIME: ' στο <b />:<b />'
|
||||||
|
TEXT_DOW: ' στις <b />'
|
||||||
|
TEXT_MONTH: ' από <b />'
|
||||||
|
TEXT_DOM: ' στις <b />'
|
||||||
|
ERROR1: Η ετικέτα %s δεν υποστηρίζεται!
|
||||||
|
ERROR2: Μη έγκυρος αριθμός στοιχείων
|
||||||
|
ERROR3: Το jquery_element θα έπρεπε να οριστεί στις ρυθμίσεις του jqCron
|
||||||
|
ERROR4: Μη αναγνωρισμένη έκφραση
|
||||||
|
|||||||
@@ -94,9 +94,10 @@ GRAV:
|
|||||||
YR_PLURAL: yrs
|
YR_PLURAL: yrs
|
||||||
DEC_PLURAL: decs
|
DEC_PLURAL: decs
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Validation failed:</b>
|
VALIDATION_FAIL: '<b>Validation failed:</b>'
|
||||||
INVALID_INPUT: Invalid input in
|
INVALID_INPUT: 'Invalid input in'
|
||||||
MISSING_REQUIRED_FIELD: Missing required field:
|
MISSING_REQUIRED_FIELD: 'Missing required field:'
|
||||||
|
XSS_ISSUES: "Potential XSS issues detected in '%s' field"
|
||||||
MONTHS_OF_THE_YEAR: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
|
MONTHS_OF_THE_YEAR: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
|
||||||
DAYS_OF_THE_WEEK: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
|
DAYS_OF_THE_WEEK: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
|
||||||
YES: "Yes"
|
YES: "Yes"
|
||||||
@@ -118,3 +119,10 @@ GRAV:
|
|||||||
ERROR2: Bad number of elements
|
ERROR2: Bad number of elements
|
||||||
ERROR3: The jquery_element should be set into jqCron settings
|
ERROR3: The jquery_element should be set into jqCron settings
|
||||||
ERROR4: Unrecognized expression
|
ERROR4: Unrecognized expression
|
||||||
|
|
||||||
|
PLUGIN_ADMIN:
|
||||||
|
UPDATES_SECTION: Updates
|
||||||
|
SAFE_UPGRADE: Safe self-upgrade
|
||||||
|
SAFE_UPGRADE_HELP: When enabled, Grav core updates use staged installation with automatic rollback support.
|
||||||
|
SAFE_UPGRADE_SNAPSHOT_LIMIT: Safe-upgrade snapshots to keep
|
||||||
|
SAFE_UPGRADE_SNAPSHOT_LIMIT_HELP: Maximum number of snapshots to retain for safe upgrades (0 disables pruning).
|
||||||
|
|||||||
40
system/languages/eo.yaml
Normal file
40
system/languages/eo.yaml
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
---
|
||||||
|
GRAV:
|
||||||
|
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# Eraro: Nevalida Frontmatter\n\nVojo: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
|
INFLECTOR_PLURALS:
|
||||||
|
'/sis$/i': 'j'
|
||||||
|
NICETIME:
|
||||||
|
FROM_NOW: ekde nun
|
||||||
|
JUST_NOW: Ĝuste nun
|
||||||
|
SECOND: sekundo
|
||||||
|
MINUTE: minuto
|
||||||
|
HOUR: horo
|
||||||
|
DAY: tago
|
||||||
|
WEEK: semajno
|
||||||
|
MONTH: monato
|
||||||
|
YEAR: jaro
|
||||||
|
DECADE: jardeko
|
||||||
|
SEC: sek.
|
||||||
|
MIN: min.
|
||||||
|
HR: horo
|
||||||
|
SECOND_PLURAL: sekundoj
|
||||||
|
MINUTE_PLURAL: minutoj
|
||||||
|
HOUR_PLURAL: horoj
|
||||||
|
DAY_PLURAL: tagoj
|
||||||
|
WEEK_PLURAL: semajnoj
|
||||||
|
MONTH_PLURAL: monatoj
|
||||||
|
YEAR_PLURAL: jaroj
|
||||||
|
DECADE_PLURAL: jardekoj
|
||||||
|
MONTHS_OF_THE_YEAR:
|
||||||
|
- 'januaro'
|
||||||
|
- 'februaro'
|
||||||
|
- 'marto'
|
||||||
|
- 'aprilo'
|
||||||
|
- ''
|
||||||
|
- ''
|
||||||
|
- ''
|
||||||
|
- ''
|
||||||
|
- ''
|
||||||
|
- ''
|
||||||
|
- ''
|
||||||
|
- ''
|
||||||
@@ -1,23 +1,29 @@
|
|||||||
---
|
---
|
||||||
GRAV:
|
GRAV:
|
||||||
FRONTMATTER_ERROR_PAGE: "---\ntítulo: %1$s\n---\n\n# Error: Frontmatter no válido\n\nRuta: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
FRONTMATTER_ERROR_PAGE: "---\ntítulo: %1$s\n---\n\n# Error: Prefacio no válido\n\nRuta: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
|
INFLECTOR_PLURALS:
|
||||||
|
'/(quiz)$/i': '\1ios'
|
||||||
|
'/s$/i': 's'
|
||||||
|
'/$/': 's'
|
||||||
INFLECTOR_UNCOUNTABLE:
|
INFLECTOR_UNCOUNTABLE:
|
||||||
- 'equipo'
|
- 'equipamiento'
|
||||||
- 'información'
|
- 'información'
|
||||||
- 'rice'
|
- 'arroz'
|
||||||
- 'dinero'
|
- 'dinero'
|
||||||
- 'species'
|
- 'especies'
|
||||||
- 'series'
|
- 'series'
|
||||||
- 'pescado'
|
- 'pescado'
|
||||||
- 'oveja'
|
- 'oveja'
|
||||||
INFLECTOR_IRREGULAR:
|
INFLECTOR_IRREGULAR:
|
||||||
|
'person': 'personas'
|
||||||
'man': 'hombres'
|
'man': 'hombres'
|
||||||
'child': 'niños'
|
'child': 'niños'
|
||||||
'sex': 'sexos'
|
'sex': 'sexos'
|
||||||
|
'move': 'movido'
|
||||||
INFLECTOR_ORDINALS:
|
INFLECTOR_ORDINALS:
|
||||||
'first': 'ro'
|
'first': '.º'
|
||||||
'second': 'do'
|
'second': '.º'
|
||||||
'third': 'ro'
|
'third': '.º'
|
||||||
NICETIME:
|
NICETIME:
|
||||||
NO_DATE_PROVIDED: No se proporcionó fecha
|
NO_DATE_PROVIDED: No se proporcionó fecha
|
||||||
BAD_DATE: Fecha errónea
|
BAD_DATE: Fecha errónea
|
||||||
@@ -33,10 +39,12 @@ GRAV:
|
|||||||
YEAR: año
|
YEAR: año
|
||||||
DECADE: década
|
DECADE: década
|
||||||
SEC: seg
|
SEC: seg
|
||||||
|
MIN: min
|
||||||
HR: h
|
HR: h
|
||||||
WK: sem
|
WK: sem
|
||||||
MO: mes
|
MO: mes
|
||||||
YR: año
|
YR: año
|
||||||
|
DEC: déc
|
||||||
SECOND_PLURAL: segundos
|
SECOND_PLURAL: segundos
|
||||||
MINUTE_PLURAL: minutos
|
MINUTE_PLURAL: minutos
|
||||||
HOUR_PLURAL: horas
|
HOUR_PLURAL: horas
|
||||||
@@ -46,6 +54,7 @@ GRAV:
|
|||||||
YEAR_PLURAL: años
|
YEAR_PLURAL: años
|
||||||
DECADE_PLURAL: décadas
|
DECADE_PLURAL: décadas
|
||||||
SEC_PLURAL: segs
|
SEC_PLURAL: segs
|
||||||
|
MIN_PLURAL: mins
|
||||||
HR_PLURAL: hs
|
HR_PLURAL: hs
|
||||||
WK_PLURAL: sem
|
WK_PLURAL: sem
|
||||||
MO_PLURAL: mes
|
MO_PLURAL: mes
|
||||||
@@ -55,6 +64,7 @@ GRAV:
|
|||||||
VALIDATION_FAIL: '<b>Falló la validación: </b>'
|
VALIDATION_FAIL: '<b>Falló la validación: </b>'
|
||||||
INVALID_INPUT: 'Dato inválido en: '
|
INVALID_INPUT: 'Dato inválido en: '
|
||||||
MISSING_REQUIRED_FIELD: 'Falta el campo requerido: '
|
MISSING_REQUIRED_FIELD: 'Falta el campo requerido: '
|
||||||
|
XSS_ISSUES: "Se detectaron potenciales problemas XSS en el campo '%s'"
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'Enero'
|
- 'Enero'
|
||||||
- 'Febrero'
|
- 'Febrero'
|
||||||
@@ -76,6 +86,8 @@ GRAV:
|
|||||||
- 'Viernes'
|
- 'Viernes'
|
||||||
- 'Sábado'
|
- 'Sábado'
|
||||||
- 'Domingo'
|
- 'Domingo'
|
||||||
|
YES: "Sí"
|
||||||
|
NO: "No"
|
||||||
CRON:
|
CRON:
|
||||||
EVERY: cada
|
EVERY: cada
|
||||||
EVERY_HOUR: cada hora
|
EVERY_HOUR: cada hora
|
||||||
@@ -84,12 +96,12 @@ GRAV:
|
|||||||
EVERY_DAY_OF_MONTH: cada día del mes
|
EVERY_DAY_OF_MONTH: cada día del mes
|
||||||
EVERY_MONTH: cada mes
|
EVERY_MONTH: cada mes
|
||||||
TEXT_PERIOD: Cada <b />
|
TEXT_PERIOD: Cada <b />
|
||||||
TEXT_MINS: ' a <b /> minuto(s) despues de la hora'
|
TEXT_MINS: ' a <b /> minuto(s) después de la hora'
|
||||||
TEXT_TIME: ' a <b />:<b />'
|
TEXT_TIME: ' a <b />:<b />'
|
||||||
TEXT_DOW: ' en <b />'
|
TEXT_DOW: ' en <b />'
|
||||||
TEXT_MONTH: ' de<b />'
|
TEXT_MONTH: ' de<b />'
|
||||||
TEXT_DOM: ' en<b />'
|
TEXT_DOM: ' en<b />'
|
||||||
ERROR1: La etiqueta %s no está soportada!
|
ERROR1: No se admite la etiqueta %s.
|
||||||
ERROR2: El número de elementos es erroneo
|
ERROR2: El número de elementos es erróneo
|
||||||
ERROR3: El jquery_element debería establecerse en la configuración del jqCron
|
ERROR3: El jquery_element debería establecerse en la configuración del jqCron
|
||||||
ERROR4: Expresión no reconocida
|
ERROR4: Expresión no reconocida
|
||||||
|
|||||||
@@ -1,13 +1,24 @@
|
|||||||
---
|
---
|
||||||
GRAV:
|
GRAV:
|
||||||
FRONTMATTER_ERROR_PAGE: "---\npealkiri: %1$s\n---\n\n# Viga: vigane Frontmatter'i\n\nasukoht: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
FRONTMATTER_ERROR_PAGE: "---\npealkiri: %1$s\n---\n\n# Viga: vigane Frontmatter'i\n\nasukoht: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
|
INFLECTOR_PLURALS:
|
||||||
|
'/(octop|vir)us$/i': '\1i'
|
||||||
|
INFLECTOR_SINGULAR:
|
||||||
|
'/^(ox)en/i': '\1'
|
||||||
|
'/(alias|status)es$/i': '\1'
|
||||||
|
'/(shoe)s$/i': '\1'
|
||||||
|
'/(o)es$/i': '\1'
|
||||||
|
'/(bus)es$/i': '\1'
|
||||||
|
'/(x|ch|ss|sh)es$/i': '\1'
|
||||||
|
'/(tive)s$/i': '\1'
|
||||||
|
'/(hive)s$/i': '\1'
|
||||||
INFLECTOR_UNCOUNTABLE:
|
INFLECTOR_UNCOUNTABLE:
|
||||||
- 'equipment'
|
- ''
|
||||||
- 'informatsioon'
|
- 'informatsioon'
|
||||||
- 'rice'
|
- 'riis'
|
||||||
- 'money'
|
- 'raha'
|
||||||
- 'species'
|
- ''
|
||||||
- 'series'
|
- ''
|
||||||
- 'kala'
|
- 'kala'
|
||||||
- 'lammas'
|
- 'lammas'
|
||||||
INFLECTOR_IRREGULAR:
|
INFLECTOR_IRREGULAR:
|
||||||
@@ -34,6 +45,7 @@ GRAV:
|
|||||||
YEAR: aasta
|
YEAR: aasta
|
||||||
DECADE: 10 aastat
|
DECADE: 10 aastat
|
||||||
SEC: sek
|
SEC: sek
|
||||||
|
MIN: min
|
||||||
HR: t
|
HR: t
|
||||||
WK: näd
|
WK: näd
|
||||||
MO: k.
|
MO: k.
|
||||||
@@ -55,9 +67,10 @@ GRAV:
|
|||||||
YR_PLURAL: aastat
|
YR_PLURAL: aastat
|
||||||
DEC_PLURAL: dek.
|
DEC_PLURAL: dek.
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Kinnitamine nurjus:</b>
|
VALIDATION_FAIL: '<b>Kinnitamine nurjus:</b>'
|
||||||
INVALID_INPUT: 'Vigane sisend:'
|
INVALID_INPUT: 'Vigane sisend:'
|
||||||
MISSING_REQUIRED_FIELD: 'Nõutud väli puudub:'
|
MISSING_REQUIRED_FIELD: 'Nõutud väli puudub:'
|
||||||
|
XSS_ISSUES: "Tuvastasime '%s' väljal võimaliku XSS-riski"
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'jaanuar'
|
- 'jaanuar'
|
||||||
- 'veebruar'
|
- 'veebruar'
|
||||||
@@ -79,7 +92,17 @@ GRAV:
|
|||||||
- 'reede'
|
- 'reede'
|
||||||
- 'laupäev'
|
- 'laupäev'
|
||||||
- 'pühapäev'
|
- 'pühapäev'
|
||||||
|
YES: "Jah"
|
||||||
|
NO: "Ei"
|
||||||
CRON:
|
CRON:
|
||||||
EVERY: iga
|
EVERY: iga
|
||||||
|
EVERY_HOUR: iga tund
|
||||||
|
EVERY_MINUTE: iga minut
|
||||||
|
EVERY_DAY_OF_WEEK: nädala igal päeval
|
||||||
|
EVERY_DAY_OF_MONTH: kuu igal päeval
|
||||||
EVERY_MONTH: iga kuu
|
EVERY_MONTH: iga kuu
|
||||||
TEXT_PERIOD: Iga <b />
|
TEXT_PERIOD: Iga <b />
|
||||||
|
ERROR1: Silt %s pole toetatud!
|
||||||
|
ERROR2: Vale elementide arv
|
||||||
|
ERROR3: jqCron seadetes peaks olema määratud jquery_element
|
||||||
|
ERROR4: Tundmatu väljend
|
||||||
|
|||||||
@@ -36,8 +36,8 @@ GRAV:
|
|||||||
YR_PLURAL: urt
|
YR_PLURAL: urt
|
||||||
DEC_PLURAL: ham
|
DEC_PLURAL: ham
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Balidazioak huts egin du</b>
|
VALIDATION_FAIL: '<b>Balidazioak huts egin du</b>'
|
||||||
INVALID_INPUT: Baliogabeko sarrera
|
INVALID_INPUT: 'Baliogabeko sarrera'
|
||||||
MISSING_REQUIRED_FIELD: 'Derrigorrezko eremua bete gabe:'
|
MISSING_REQUIRED_FIELD: 'Derrigorrezko eremua bete gabe:'
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'Urtarrila'
|
- 'Urtarrila'
|
||||||
|
|||||||
@@ -36,8 +36,8 @@ GRAV:
|
|||||||
YR_PLURAL: سال
|
YR_PLURAL: سال
|
||||||
DEC_PLURAL: دهه
|
DEC_PLURAL: دهه
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>سنجش اعتبار ناموفق بود</b>
|
VALIDATION_FAIL: '<b>سنجش اعتبار ناموفق بود</b>'
|
||||||
INVALID_INPUT: ورودی نامعتبر در
|
INVALID_INPUT: 'ورودی نامعتبر در'
|
||||||
MISSING_REQUIRED_FIELD: 'قسمت ضروری جا افتاده:'
|
MISSING_REQUIRED_FIELD: 'قسمت ضروری جا افتاده:'
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'ژانویه'
|
- 'ژانویه'
|
||||||
|
|||||||
@@ -45,12 +45,12 @@ GRAV:
|
|||||||
'/([ti])a$/i': '\1um'
|
'/([ti])a$/i': '\1um'
|
||||||
'/(n)ews$/i': '\1ews'
|
'/(n)ews$/i': '\1ews'
|
||||||
INFLECTOR_UNCOUNTABLE:
|
INFLECTOR_UNCOUNTABLE:
|
||||||
- 'equipment'
|
- ''
|
||||||
- 'information'
|
- ''
|
||||||
- 'riisi'
|
- 'riisi'
|
||||||
- 'raha'
|
- 'raha'
|
||||||
- 'lajit'
|
- 'lajit'
|
||||||
- 'series'
|
- ''
|
||||||
- 'kala'
|
- 'kala'
|
||||||
- 'lammas'
|
- 'lammas'
|
||||||
INFLECTOR_IRREGULAR:
|
INFLECTOR_IRREGULAR:
|
||||||
@@ -100,8 +100,8 @@ GRAV:
|
|||||||
YR_PLURAL: v
|
YR_PLURAL: v
|
||||||
DEC_PLURAL: vuosikymmentä
|
DEC_PLURAL: vuosikymmentä
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Vahvistus epäonnistui:</b>
|
VALIDATION_FAIL: '<b>Vahvistus epäonnistui:</b>'
|
||||||
INVALID_INPUT: Syöte ei kelpaa
|
INVALID_INPUT: 'Syöte ei kelpaa'
|
||||||
MISSING_REQUIRED_FIELD: 'Puuttuva pakollinen kenttä:'
|
MISSING_REQUIRED_FIELD: 'Puuttuva pakollinen kenttä:'
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'Tammikuu'
|
- 'Tammikuu'
|
||||||
|
|||||||
@@ -16,13 +16,34 @@ GRAV:
|
|||||||
'/(buffal|tomat)o$/i': '\1es'
|
'/(buffal|tomat)o$/i': '\1es'
|
||||||
'/(bu)s$/i': 'Bus'
|
'/(bu)s$/i': 'Bus'
|
||||||
'/(alias|status)/i': 'alias|status'
|
'/(alias|status)/i': 'alias|status'
|
||||||
|
'/(octop|vir)us$/i': 'virus'
|
||||||
'/(ax|test)is$/i': '\1s'
|
'/(ax|test)is$/i': '\1s'
|
||||||
'/s$/i': 's'
|
'/s$/i': 's'
|
||||||
'/$/': 's'
|
'/$/': 's'
|
||||||
INFLECTOR_SINGULAR:
|
INFLECTOR_SINGULAR:
|
||||||
'/(quiz)zes$/i': '\1'
|
'/(quiz)zes$/i': '\1'
|
||||||
|
'/(matr)ices$/i': '\1ix'
|
||||||
|
'/(vert|ind)ices$/i': '\1ex'
|
||||||
|
'/^(ox)en/i': '\1'
|
||||||
'/(alias|status)es$/i': '\1'
|
'/(alias|status)es$/i': '\1'
|
||||||
'/([octop|vir])i$/i': '\1us'
|
'/([octop|vir])i$/i': '\1us'
|
||||||
|
'/(cris|ax|test)es$/i': '\1is'
|
||||||
|
'/(shoe)s$/i': '\1'
|
||||||
|
'/(o)es$/i': '\1'
|
||||||
|
'/(bus)es$/i': '\1'
|
||||||
|
'/([m|l])ice$/i': '\1ouse'
|
||||||
|
'/(x|ch|ss|sh)es$/i': '\1'
|
||||||
|
'/(m)ovies$/i': '\1ovie'
|
||||||
|
'/(s)eries$/i': '\1eries'
|
||||||
|
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||||
|
'/([lr])ves$/i': '\1f'
|
||||||
|
'/(tive)s$/i': '\1'
|
||||||
|
'/(hive)s$/i': '\1'
|
||||||
|
'/([^f])ves$/i': '\1fe'
|
||||||
|
'/(^analy)ses$/i': '\1sis'
|
||||||
|
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2sis'
|
||||||
|
'/([ti])a$/i': '\1um'
|
||||||
|
'/(n)ews$/i': '\1ouvelles'
|
||||||
INFLECTOR_UNCOUNTABLE:
|
INFLECTOR_UNCOUNTABLE:
|
||||||
- 'équipement'
|
- 'équipement'
|
||||||
- 'information'
|
- 'information'
|
||||||
@@ -57,10 +78,10 @@ GRAV:
|
|||||||
MONTH: mois
|
MONTH: mois
|
||||||
YEAR: année
|
YEAR: année
|
||||||
DECADE: décennie
|
DECADE: décennie
|
||||||
SEC: s
|
SEC: sec.
|
||||||
MIN: m
|
MIN: min.
|
||||||
HR: h
|
HR: hr.
|
||||||
WK: sem
|
WK: sem.
|
||||||
MO: m
|
MO: m
|
||||||
YR: an
|
YR: an
|
||||||
DEC: déc
|
DEC: déc
|
||||||
@@ -80,30 +101,33 @@ GRAV:
|
|||||||
YR_PLURAL: a
|
YR_PLURAL: a
|
||||||
DEC_PLURAL: décs
|
DEC_PLURAL: décs
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>La validation a échoué :</b>
|
VALIDATION_FAIL: '<b>La validation a échoué :</b>'
|
||||||
INVALID_INPUT: Saisie non valide
|
INVALID_INPUT: 'Saisie non valide'
|
||||||
MISSING_REQUIRED_FIELD: 'Champ obligatoire manquant :'
|
MISSING_REQUIRED_FIELD: 'Champ obligatoire manquant :'
|
||||||
|
XSS_ISSUES: "Erreurs XSS probablement détectées dans le champ '%s'"
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'Janvier'
|
- 'janvier'
|
||||||
- 'Février'
|
- 'février'
|
||||||
- 'Mars'
|
- 'mars'
|
||||||
- 'Avril'
|
- 'avril'
|
||||||
- 'Mai'
|
- 'mai'
|
||||||
- 'Juin'
|
- 'juin'
|
||||||
- 'Juillet'
|
- 'juillet'
|
||||||
- 'Août'
|
- 'août'
|
||||||
- 'Septembre'
|
- 'septembre'
|
||||||
- 'Octobre'
|
- 'octobre'
|
||||||
- 'Novembre'
|
- 'novembre'
|
||||||
- 'Décembre'
|
- 'décembre'
|
||||||
DAYS_OF_THE_WEEK:
|
DAYS_OF_THE_WEEK:
|
||||||
- 'Lundi'
|
- 'lundi'
|
||||||
- 'Mardi'
|
- 'mardi'
|
||||||
- 'Mercredi'
|
- 'mercredi'
|
||||||
- 'Jeudi'
|
- 'jeudi'
|
||||||
- 'Vendredi'
|
- 'vendredi'
|
||||||
- 'Samedi'
|
- 'samedi'
|
||||||
- 'Dimanche'
|
- 'dimanche'
|
||||||
|
YES: "Oui"
|
||||||
|
NO: "Non"
|
||||||
CRON:
|
CRON:
|
||||||
EVERY: chaque
|
EVERY: chaque
|
||||||
EVERY_HOUR: toutes les heures
|
EVERY_HOUR: toutes les heures
|
||||||
@@ -117,7 +141,7 @@ GRAV:
|
|||||||
TEXT_DOW: ' sur <b/>'
|
TEXT_DOW: ' sur <b/>'
|
||||||
TEXT_MONTH: ' de <b />'
|
TEXT_MONTH: ' de <b />'
|
||||||
TEXT_DOM: ' sur <b/>'
|
TEXT_DOM: ' sur <b/>'
|
||||||
ERROR1: La balise %s n'est pas supportée!
|
ERROR1: La balise %s n'est pas prise en charge !
|
||||||
ERROR2: Nombre invalide d'éléments
|
ERROR2: Nombre invalide d'éléments
|
||||||
ERROR3: L'élément jquery_element doit être défini dans les paramètres jqCron
|
ERROR3: L'élément jquery_element doit être défini dans les paramètres jqCron
|
||||||
ERROR4: Expression non reconnue
|
ERROR4: Expression non reconnue
|
||||||
|
|||||||
147
system/languages/gl.yaml
Normal file
147
system/languages/gl.yaml
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
---
|
||||||
|
GRAV:
|
||||||
|
FRONTMATTER_ERROR_PAGE: "---\ntítulo: %1$s\n---\n\n# Erro: Limiar incorrecto\n\nRuta: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
|
INFLECTOR_PLURALS:
|
||||||
|
'/(quiz)$/i': '\1zes'
|
||||||
|
'/^(ox)$/i': '\1en'
|
||||||
|
'/([m|l])ouse$/i': '\1ice'
|
||||||
|
'/(matr|vert|ind)ix|ex$/i': '\1ices'
|
||||||
|
'/(x|ch|ss|sh)$/i': '\1es'
|
||||||
|
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||||
|
'/([^aeiouy]|qu)y$/i': '\1ies'
|
||||||
|
'/(hive)$/i': '\1s'
|
||||||
|
'/(?:([^f])fe|([lr])f)$/i': '\1\2ves'
|
||||||
|
'/sis$/i': 'ses'
|
||||||
|
'/([ti])um$/i': '\1a'
|
||||||
|
'/(buffal|tomat)o$/i': '\1oes'
|
||||||
|
'/(bu)s$/i': '\1ses'
|
||||||
|
'/(alias|status)/i': '\1'
|
||||||
|
'/(octop|vir)us$/i': '\1'
|
||||||
|
'/(ax|test)is$/i': '\1es'
|
||||||
|
'/s$/i': 's'
|
||||||
|
'/$/': 's'
|
||||||
|
INFLECTOR_SINGULAR:
|
||||||
|
'/(quiz)zes$/i': '\1ces'
|
||||||
|
'/(matr)ices$/i': '\1ix'
|
||||||
|
'/(vert|ind)ices$/i': '\1ex'
|
||||||
|
'/^(ox)en/i': '\1'
|
||||||
|
'/(alias|status)es$/i': '\1'
|
||||||
|
'/([octop|vir])i$/i': '\1'
|
||||||
|
'/(cris|ax|test)es$/i': '\1es'
|
||||||
|
'/(shoe)s$/i': '\1'
|
||||||
|
'/(o)es$/i': '\1'
|
||||||
|
'/(bus)es$/i': '\1'
|
||||||
|
'/([m|l])ice$/i': '\1ouse'
|
||||||
|
'/(x|ch|ss|sh)es$/i': '\1'
|
||||||
|
'/(m)ovies$/i': '\1ovie'
|
||||||
|
'/(s)eries$/i': '\1eries'
|
||||||
|
'/([^aeiouy]|qu)ies$/i': '\1'
|
||||||
|
'/([lr])ves$/i': '\1f'
|
||||||
|
'/(tive)s$/i': '\1'
|
||||||
|
'/(hive)s$/i': '\1'
|
||||||
|
'/([^f])ves$/i': '\1fe'
|
||||||
|
'/(^analy)ses$/i': '\1se'
|
||||||
|
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2se'
|
||||||
|
'/([ti])a$/i': '\1um'
|
||||||
|
'/(n)ews$/i': '\1ews'
|
||||||
|
INFLECTOR_UNCOUNTABLE:
|
||||||
|
- 'equipo'
|
||||||
|
- 'información'
|
||||||
|
- 'arroz'
|
||||||
|
- 'diñeiro'
|
||||||
|
- 'especies'
|
||||||
|
- 'series'
|
||||||
|
- 'peixe'
|
||||||
|
- 'ovella'
|
||||||
|
INFLECTOR_IRREGULAR:
|
||||||
|
'person': 'xente'
|
||||||
|
'man': 'home'
|
||||||
|
'child': 'neno'
|
||||||
|
'sex': 'sexos'
|
||||||
|
'move': 'move'
|
||||||
|
INFLECTOR_ORDINALS:
|
||||||
|
'default': 'º'
|
||||||
|
'first': 'º'
|
||||||
|
'second': 'º'
|
||||||
|
'third': 'º'
|
||||||
|
NICETIME:
|
||||||
|
NO_DATE_PROVIDED: Non fornece unha data
|
||||||
|
BAD_DATE: Data errada
|
||||||
|
AGO: hai
|
||||||
|
FROM_NOW: dende agora
|
||||||
|
JUST_NOW: xusto agora
|
||||||
|
SECOND: segundo
|
||||||
|
MINUTE: minuto
|
||||||
|
HOUR: hora
|
||||||
|
DAY: día
|
||||||
|
WEEK: semana
|
||||||
|
MONTH: mes
|
||||||
|
YEAR: ano
|
||||||
|
DECADE: década
|
||||||
|
SEC: seg
|
||||||
|
MIN: min
|
||||||
|
HR: hr
|
||||||
|
WK: Sem
|
||||||
|
MO: m
|
||||||
|
YR: a
|
||||||
|
DEC: dec
|
||||||
|
SECOND_PLURAL: segundos
|
||||||
|
MINUTE_PLURAL: minutos
|
||||||
|
HOUR_PLURAL: horas
|
||||||
|
DAY_PLURAL: días
|
||||||
|
WEEK_PLURAL: semanas
|
||||||
|
MONTH_PLURAL: meses
|
||||||
|
YEAR_PLURAL: anos
|
||||||
|
DECADE_PLURAL: décadas
|
||||||
|
SEC_PLURAL: segs
|
||||||
|
MIN_PLURAL: mins
|
||||||
|
HR_PLURAL: hrs
|
||||||
|
WK_PLURAL: sem
|
||||||
|
MO_PLURAL: mes
|
||||||
|
YR_PLURAL: a
|
||||||
|
DEC_PLURAL: deca
|
||||||
|
FORM:
|
||||||
|
VALIDATION_FAIL: '<b>Fallou a validación:</b>'
|
||||||
|
INVALID_INPUT: 'Entrada incorrecta en'
|
||||||
|
MISSING_REQUIRED_FIELD: 'Falta un campo requirido:'
|
||||||
|
XSS_ISSUES: "Detectáronse posibles problemas XSS no campo '% s'"
|
||||||
|
MONTHS_OF_THE_YEAR:
|
||||||
|
- 'xaneiro'
|
||||||
|
- 'febreiro'
|
||||||
|
- 'marzo'
|
||||||
|
- 'abril'
|
||||||
|
- 'maio'
|
||||||
|
- 'xuño'
|
||||||
|
- 'xullo'
|
||||||
|
- 'agosto'
|
||||||
|
- 'setembro'
|
||||||
|
- 'outubro'
|
||||||
|
- 'novembro'
|
||||||
|
- 'decembro'
|
||||||
|
DAYS_OF_THE_WEEK:
|
||||||
|
- 'luns'
|
||||||
|
- 'martes'
|
||||||
|
- 'mércores'
|
||||||
|
- 'xoves'
|
||||||
|
- 'venres'
|
||||||
|
- 'sábado'
|
||||||
|
- 'domingo'
|
||||||
|
YES: "Si"
|
||||||
|
NO: "Non"
|
||||||
|
CRON:
|
||||||
|
EVERY: cada
|
||||||
|
EVERY_HOUR: Cada hora
|
||||||
|
EVERY_MINUTE: Cada minuto
|
||||||
|
EVERY_DAY_OF_WEEK: cada día da semana
|
||||||
|
EVERY_DAY_OF_MONTH: cada día do mes
|
||||||
|
EVERY_MONTH: cada mes
|
||||||
|
TEXT_PERIOD: Cada <b />
|
||||||
|
TEXT_MINS: ' dentro de <b /> minuto(s) despois da hora'
|
||||||
|
TEXT_TIME: ' dentro <b />:<b />'
|
||||||
|
TEXT_DOW: ' o <b />'
|
||||||
|
TEXT_MONTH: ' de <b />'
|
||||||
|
TEXT_DOM: ' o <b />'
|
||||||
|
ERROR1: A etiqueta %s non é compatíbel!
|
||||||
|
ERROR2: Mal número de elementos
|
||||||
|
ERROR3: O jquery_element debería estar determinado na configuración de jqCron
|
||||||
|
ERROR4: Expresión non recoñecida
|
||||||
@@ -1,11 +1,27 @@
|
|||||||
---
|
---
|
||||||
GRAV:
|
GRAV:
|
||||||
FRONTMATTER_ERROR_PAGE: "---\nכותרת: %1$s\n---\n# שגיאה: Fronmatter לא חוקי\nנתיב: `%2$s`\n**%3$s**\n```\n%4$s\n```"
|
FRONTMATTER_ERROR_PAGE: "---\nכותרת: %1$s\n---\n# שגיאה: Fronmatter לא חוקי\nנתיב: `%2$s`\n**%3$s**\n```\n%4$s\n```"
|
||||||
|
INFLECTOR_UNCOUNTABLE:
|
||||||
|
- 'ציוד'
|
||||||
|
- 'מידע'
|
||||||
|
- 'אורז'
|
||||||
|
- 'כסף'
|
||||||
|
- 'מינים'
|
||||||
|
- 'סדרה'
|
||||||
|
- 'דג'
|
||||||
|
- 'כבשה'
|
||||||
|
INFLECTOR_IRREGULAR:
|
||||||
|
'person': 'אנשים'
|
||||||
|
'man': 'גברים'
|
||||||
|
'child': 'ילדים'
|
||||||
|
'sex': 'מינים'
|
||||||
|
'move': 'מהלכים'
|
||||||
NICETIME:
|
NICETIME:
|
||||||
NO_DATE_PROVIDED: לא סופק תאריך
|
NO_DATE_PROVIDED: לא סופק תאריך
|
||||||
BAD_DATE: תאריך פגום
|
BAD_DATE: תאריך פגום
|
||||||
AGO: לפני
|
AGO: לפני
|
||||||
FROM_NOW: כרגע
|
FROM_NOW: כרגע
|
||||||
|
JUST_NOW: כרגע
|
||||||
SECOND: שנייה
|
SECOND: שנייה
|
||||||
MINUTE: דקה
|
MINUTE: דקה
|
||||||
HOUR: שעה
|
HOUR: שעה
|
||||||
@@ -37,9 +53,10 @@ GRAV:
|
|||||||
YR_PLURAL: שני'
|
YR_PLURAL: שני'
|
||||||
DEC_PLURAL: עש'
|
DEC_PLURAL: עש'
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>האימות נכשל:</b>
|
VALIDATION_FAIL: '<b>האימות נכשל:</b>'
|
||||||
INVALID_INPUT: קלט לא חוקי
|
INVALID_INPUT: 'קלט לא חוקי'
|
||||||
MISSING_REQUIRED_FIELD: 'שדות חובה חסרים:'
|
MISSING_REQUIRED_FIELD: 'שדות חובה חסרים:'
|
||||||
|
XSS_ISSUES: "בעיות XSS פוטנציאליות זוהו בשדה '%s'"
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'ינואר'
|
- 'ינואר'
|
||||||
- 'פברואר'
|
- 'פברואר'
|
||||||
@@ -61,3 +78,22 @@ GRAV:
|
|||||||
- 'שישי'
|
- 'שישי'
|
||||||
- 'שבת'
|
- 'שבת'
|
||||||
- 'ראשון'
|
- 'ראשון'
|
||||||
|
YES: "כן"
|
||||||
|
NO: "לא"
|
||||||
|
CRON:
|
||||||
|
EVERY: בכל
|
||||||
|
EVERY_HOUR: בכל שעה
|
||||||
|
EVERY_MINUTE: כל דקה
|
||||||
|
EVERY_DAY_OF_WEEK: כל יום בשבוע
|
||||||
|
EVERY_DAY_OF_MONTH: בכל יום בחודש
|
||||||
|
EVERY_MONTH: כל חודש
|
||||||
|
TEXT_PERIOD: כל <b />
|
||||||
|
TEXT_MINS: 'ב <b /> דקות אחרי השעה'
|
||||||
|
TEXT_TIME: 'ב <b />:<b />'
|
||||||
|
TEXT_DOW: 'ב <b />'
|
||||||
|
TEXT_MONTH: 'של <b />'
|
||||||
|
TEXT_DOM: 'ב <b />'
|
||||||
|
ERROR1: התגית %s אינו נתמכת
|
||||||
|
ERROR2: מספר לא חוקי של משתנים.
|
||||||
|
ERROR3: יש להגדיר את ה-jquery_element להגדרות jqCron
|
||||||
|
ERROR4: ביטוי לא מזוהה
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
---
|
---
|
||||||
GRAV:
|
GRAV:
|
||||||
|
FRONTMATTER_ERROR_PAGE: "---\nnaslov: %1$s\n---\n\n# Pogreška: nevažeći frontmatter\n\nPutanja datoteke: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
INFLECTOR_UNCOUNTABLE:
|
INFLECTOR_UNCOUNTABLE:
|
||||||
- 'oprema'
|
- 'oprema'
|
||||||
- 'informacije'
|
- 'informacija'
|
||||||
- 'riža'
|
- 'riža'
|
||||||
- 'novac'
|
- 'novac'
|
||||||
- 'vrsta'
|
- 'vrsta'
|
||||||
@@ -15,11 +16,17 @@ GRAV:
|
|||||||
'child': 'djeca'
|
'child': 'djeca'
|
||||||
'sex': 'spolovi'
|
'sex': 'spolovi'
|
||||||
'move': 'Pomakni'
|
'move': 'Pomakni'
|
||||||
|
INFLECTOR_ORDINALS:
|
||||||
|
'default': '.'
|
||||||
|
'first': '.'
|
||||||
|
'second': '.'
|
||||||
|
'third': '.'
|
||||||
NICETIME:
|
NICETIME:
|
||||||
NO_DATE_PROVIDED: Datum nije upisan
|
NO_DATE_PROVIDED: Datum nije upisan
|
||||||
BAD_DATE: Pogrešan datum
|
BAD_DATE: Pogrešan datum
|
||||||
AGO: prije
|
AGO: prije
|
||||||
FROM_NOW: od sada
|
FROM_NOW: od sada
|
||||||
|
JUST_NOW: upravo sad
|
||||||
SECOND: sekunda
|
SECOND: sekunda
|
||||||
MINUTE: minuta
|
MINUTE: minuta
|
||||||
HOUR: sat
|
HOUR: sat
|
||||||
@@ -29,6 +36,7 @@ GRAV:
|
|||||||
YEAR: godina
|
YEAR: godina
|
||||||
DECADE: desetljeće
|
DECADE: desetljeće
|
||||||
SEC: sek
|
SEC: sek
|
||||||
|
MIN: min
|
||||||
HR: sat
|
HR: sat
|
||||||
WK: t
|
WK: t
|
||||||
MO: m
|
MO: m
|
||||||
@@ -50,9 +58,10 @@ GRAV:
|
|||||||
YR_PLURAL: g
|
YR_PLURAL: g
|
||||||
DEC_PLURAL: des
|
DEC_PLURAL: des
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Validacija nije uspjela:</b>
|
VALIDATION_FAIL: '<b>Validacija nije uspjela:</b>'
|
||||||
INVALID_INPUT: Pogrešan unos u
|
INVALID_INPUT: 'Pogrešan unos u'
|
||||||
MISSING_REQUIRED_FIELD: 'Nedostaje obavezno polje:'
|
MISSING_REQUIRED_FIELD: 'Nedostaje obavezno polje:'
|
||||||
|
XSS_ISSUES: "Potencijalni XSS problemi otkriveni u polju '%s'"
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'Siječanj'
|
- 'Siječanj'
|
||||||
- 'Veljača'
|
- 'Veljača'
|
||||||
@@ -74,3 +83,22 @@ GRAV:
|
|||||||
- 'Petak'
|
- 'Petak'
|
||||||
- 'Subota'
|
- 'Subota'
|
||||||
- 'Nedjelja'
|
- 'Nedjelja'
|
||||||
|
YES: "Da"
|
||||||
|
NO: "Ne"
|
||||||
|
CRON:
|
||||||
|
EVERY: svaki
|
||||||
|
EVERY_HOUR: svaki sat
|
||||||
|
EVERY_MINUTE: svake minute
|
||||||
|
EVERY_DAY_OF_WEEK: svaki dan u tjednu
|
||||||
|
EVERY_DAY_OF_MONTH: svaki dan u mjesecu
|
||||||
|
EVERY_MONTH: svaki mjesec
|
||||||
|
TEXT_PERIOD: Svakih <b />
|
||||||
|
TEXT_MINS: ' u <b /> minut(e) nakon sata'
|
||||||
|
TEXT_TIME: ' u <b />:<b />'
|
||||||
|
TEXT_DOW: ' na <b />'
|
||||||
|
TEXT_MONTH: ' <b />'
|
||||||
|
TEXT_DOM: ' na <b />'
|
||||||
|
ERROR1: Oznaka %s nije podržana!
|
||||||
|
ERROR2: Pogrešan broj elemenata.
|
||||||
|
ERROR3: jquery_element treba postaviti u postavke jqCron
|
||||||
|
ERROR4: Izraz nije prepoznat
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ GRAV:
|
|||||||
YR_PLURAL: év
|
YR_PLURAL: év
|
||||||
DEC_PLURAL: évt
|
DEC_PLURAL: évt
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Érvényesítés nem sikerült:</b>
|
VALIDATION_FAIL: '<b>Érvényesítés nem sikerült:</b>'
|
||||||
INVALID_INPUT: 'A megadott érték érvénytelen:'
|
INVALID_INPUT: 'A megadott érték érvénytelen:'
|
||||||
MISSING_REQUIRED_FIELD: 'Ez a kötelező mező nincs kitöltve:'
|
MISSING_REQUIRED_FIELD: 'Ez a kötelező mező nincs kitöltve:'
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
|
|||||||
@@ -1,26 +1,74 @@
|
|||||||
---
|
---
|
||||||
GRAV:
|
GRAV:
|
||||||
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# Error: Frontmatter tidak valid\n\nLokasi: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# Error: Frontmatter tidak valid\n\nLokasi: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
|
INFLECTOR_PLURALS:
|
||||||
|
'/(quiz)$/i': '\1zes'
|
||||||
|
'/^(ox)$/i': '\1en'
|
||||||
|
'/([m|l])ouse$/i': '\1ice'
|
||||||
|
'/(matr|vert|ind)ix|ex$/i': '\1ices'
|
||||||
|
'/(x|ch|ss|sh)$/i': '\1es'
|
||||||
|
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||||
|
'/([^aeiouy]|qu)y$/i': '\1ies'
|
||||||
|
'/(hive)$/i': '\1s'
|
||||||
|
'/(?:([^f])fe|([lr])f)$/i': '\1\2ves'
|
||||||
|
'/sis$/i': 'ses'
|
||||||
|
'/([ti])um$/i': '\1a'
|
||||||
|
'/(buffal|tomat)o$/i': '\1oes'
|
||||||
|
'/(bu)s$/i': '\1ses'
|
||||||
|
'/(alias|status)/i': '\1es'
|
||||||
|
'/(octop|vir)us$/i': '\1i'
|
||||||
|
'/(ax|test)is$/i': '\1es'
|
||||||
|
'/s$/i': 's'
|
||||||
|
'/$/': 's'
|
||||||
|
INFLECTOR_SINGULAR:
|
||||||
|
'/(quiz)zes$/i': '\1'
|
||||||
|
'/(matr)ices$/i': '\1ix'
|
||||||
|
'/(vert|ind)ices$/i': '\1ex'
|
||||||
|
'/^(ox)en/i': '\1'
|
||||||
|
'/(alias|status)es$/i': '\1'
|
||||||
|
'/([octop|vir])i$/i': '\1us'
|
||||||
|
'/(cris|ax|test)es$/i': '\1is'
|
||||||
|
'/(shoe)s$/i': '\1'
|
||||||
|
'/(o)es$/i': '\1'
|
||||||
|
'/(bus)es$/i': '\1'
|
||||||
|
'/([m|l])ice$/i': '\1ouse'
|
||||||
|
'/(x|ch|ss|sh)es$/i': '\1'
|
||||||
|
'/(m)ovies$/i': '\1ovie'
|
||||||
|
'/(s)eries$/i': '\1eries'
|
||||||
|
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||||
|
'/([lr])ves$/i': '\1f'
|
||||||
|
'/(tive)s$/i': '\1'
|
||||||
|
'/(hive)s$/i': '\1'
|
||||||
|
'/([^f])ves$/i': '\1fe'
|
||||||
|
'/(^analy)ses$/i': '\1sis'
|
||||||
|
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2sis'
|
||||||
|
'/([ti])a$/i': '\1um'
|
||||||
|
'/(n)ews$/i': '\1ews'
|
||||||
INFLECTOR_UNCOUNTABLE:
|
INFLECTOR_UNCOUNTABLE:
|
||||||
- 'peralatan'
|
- 'Peralatan'
|
||||||
- 'informasi'
|
- 'Informasi '
|
||||||
- 'nasi'
|
- 'Nasi'
|
||||||
- 'uang'
|
- 'Uang'
|
||||||
- 'spesies'
|
- 'Jenis'
|
||||||
- 'rangkaian'
|
- 'Seri'
|
||||||
- 'ikan'
|
- 'Ikan'
|
||||||
- 'domba'
|
- 'Domba'
|
||||||
INFLECTOR_IRREGULAR:
|
INFLECTOR_IRREGULAR:
|
||||||
'person': 'orang-orang'
|
'person': 'Orang-orang'
|
||||||
'man': 'laki-laki'
|
'man': 'Pria'
|
||||||
'child': 'anak-anak'
|
'child': 'Balita'
|
||||||
'sex': 'jenis kelamin'
|
'sex': 'Jenis Kelamin'
|
||||||
'move': 'pindahkan'
|
'move': 'pindahkan'
|
||||||
|
INFLECTOR_ORDINALS:
|
||||||
|
'default': 'ke'
|
||||||
|
'first': 'pertama'
|
||||||
|
'second': 'nd'
|
||||||
|
'third': 'rd'
|
||||||
NICETIME:
|
NICETIME:
|
||||||
NO_DATE_PROVIDED: Tanggal tidak tersedia
|
NO_DATE_PROVIDED: Tidak ada tanggal yang disediakan
|
||||||
BAD_DATE: Format tanggal salah
|
BAD_DATE: Format tanggal salah
|
||||||
AGO: yang lalu
|
AGO: yang lalu
|
||||||
FROM_NOW: dari saat ini
|
FROM_NOW: dari sekarang
|
||||||
JUST_NOW: baru saja
|
JUST_NOW: baru saja
|
||||||
SECOND: detik
|
SECOND: detik
|
||||||
MINUTE: menit
|
MINUTE: menit
|
||||||
@@ -30,12 +78,12 @@ GRAV:
|
|||||||
MONTH: bulan
|
MONTH: bulan
|
||||||
YEAR: tahun
|
YEAR: tahun
|
||||||
DECADE: dekade
|
DECADE: dekade
|
||||||
SEC: dtk
|
SEC: detik
|
||||||
MIN: mnt
|
MIN: menit
|
||||||
HR: j
|
HR: ' jam'
|
||||||
WK: mng
|
WK: minggu
|
||||||
MO: bln
|
MO: bulan
|
||||||
YR: thn
|
YR: tahun
|
||||||
DEC: desimal
|
DEC: desimal
|
||||||
SECOND_PLURAL: detik
|
SECOND_PLURAL: detik
|
||||||
MINUTE_PLURAL: menit
|
MINUTE_PLURAL: menit
|
||||||
@@ -45,17 +93,18 @@ GRAV:
|
|||||||
MONTH_PLURAL: bulan
|
MONTH_PLURAL: bulan
|
||||||
YEAR_PLURAL: tahun
|
YEAR_PLURAL: tahun
|
||||||
DECADE_PLURAL: dekade
|
DECADE_PLURAL: dekade
|
||||||
SEC_PLURAL: dtk
|
SEC_PLURAL: detik
|
||||||
MIN_PLURAL: mnt
|
MIN_PLURAL: menit
|
||||||
HR_PLURAL: j
|
HR_PLURAL: jam
|
||||||
WK_PLURAL: mgg
|
WK_PLURAL: minggu
|
||||||
MO_PLURAL: bln
|
MO_PLURAL: bulan
|
||||||
YR_PLURAL: thn
|
YR_PLURAL: tahun
|
||||||
DEC_PLURAL: dekade
|
DEC_PLURAL: dekade
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Validasi gagal:</b>
|
VALIDATION_FAIL: '<b>Validasi gagal:</b>'
|
||||||
INVALID_INPUT: Input tidak valid di
|
INVALID_INPUT: 'Input tidak valid di'
|
||||||
MISSING_REQUIRED_FIELD: 'Data yang diperlukan belum terisi:'
|
MISSING_REQUIRED_FIELD: 'Data yang diperlukan belum terisi:'
|
||||||
|
XSS_ISSUES: "Isu berpotensial XSS terdeteksi dalam baris %s"
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'Januari'
|
- 'Januari'
|
||||||
- 'Februari'
|
- 'Februari'
|
||||||
@@ -74,22 +123,25 @@ GRAV:
|
|||||||
- 'Selasa'
|
- 'Selasa'
|
||||||
- 'Rabu'
|
- 'Rabu'
|
||||||
- 'Kamis'
|
- 'Kamis'
|
||||||
- 'Jumat'
|
- 'Jum''at'
|
||||||
- 'Sabtu'
|
- 'Sabtu'
|
||||||
- 'Minggu'
|
- 'Minggu'
|
||||||
|
YES: "Ya"
|
||||||
|
NO: "Tidak"
|
||||||
CRON:
|
CRON:
|
||||||
EVERY: Setiap
|
EVERY: Setiap
|
||||||
EVERY_HOUR: Setiap jam
|
EVERY_HOUR: Setiap jam
|
||||||
EVERY_MINUTE: Setiap menit
|
EVERY_MINUTE: Setiap menit
|
||||||
EVERY_DAY_OF_WEEK: Setiap hari selama seminggu
|
EVERY_DAY_OF_WEEK: Setiap hari selama seminggu
|
||||||
EVERY_DAY_OF_MONTH: pada tanggal setiap bulannya
|
EVERY_DAY_OF_MONTH: Setiap hari dalam sebulan
|
||||||
EVERY_MONTH: setiap bulan
|
EVERY_MONTH: setiap bulan
|
||||||
TEXT_PERIOD: Setiap <b />
|
TEXT_PERIOD: Setiap <b />
|
||||||
|
TEXT_MINS: 'dalam <b /> menit setelah jam yang lalu'
|
||||||
TEXT_TIME: ' pada <b />:<b />'
|
TEXT_TIME: ' pada <b />:<b />'
|
||||||
TEXT_DOW: ' pada <b />'
|
TEXT_DOW: ' pada <b />'
|
||||||
TEXT_MONTH: ' pada <b />'
|
TEXT_MONTH: ' pada <b />'
|
||||||
TEXT_DOM: ' pada <b />'
|
TEXT_DOM: ' pada <b />'
|
||||||
ERROR1: Tag %s tidak didukung!
|
ERROR1: Tag %s tidak didukung!
|
||||||
ERROR2: Jumlah elemen tidak valid
|
ERROR2: Jumlah elemen yang buruk
|
||||||
ERROR3: jquery_element harus ditetapkan ke pengaturan jqCron
|
ERROR3: jquery_element harus diatur ke dalam pengaturan jqCron
|
||||||
ERROR4: Ekspresi tidak dikenali
|
ERROR4: Ekspresi tidak dikenal
|
||||||
|
|||||||
@@ -2,14 +2,14 @@
|
|||||||
GRAV:
|
GRAV:
|
||||||
FRONTMATTER_ERROR_PAGE: "---\ntitill: %1$s\n---\n\n# Villa: Ógilt efni á forsíðu\n\nSlóð: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
FRONTMATTER_ERROR_PAGE: "---\ntitill: %1$s\n---\n\n# Villa: Ógilt efni á forsíðu\n\nSlóð: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
INFLECTOR_UNCOUNTABLE:
|
INFLECTOR_UNCOUNTABLE:
|
||||||
- 'equipment'
|
- ''
|
||||||
- 'upplýsingar'
|
- 'upplýsingar'
|
||||||
- 'rice'
|
- ''
|
||||||
- 'money'
|
- ''
|
||||||
- 'species'
|
- ''
|
||||||
- 'series'
|
- ''
|
||||||
- 'fish'
|
- ''
|
||||||
- 'sheep'
|
- ''
|
||||||
NICETIME:
|
NICETIME:
|
||||||
NO_DATE_PROVIDED: Engin dagsetning gefin
|
NO_DATE_PROVIDED: Engin dagsetning gefin
|
||||||
BAD_DATE: Röng dagsetning
|
BAD_DATE: Röng dagsetning
|
||||||
@@ -46,8 +46,8 @@ GRAV:
|
|||||||
YR_PLURAL: árum
|
YR_PLURAL: árum
|
||||||
DEC_PLURAL: árat
|
DEC_PLURAL: árat
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Sannvottun mistókst:</b>
|
VALIDATION_FAIL: '<b>Sannvottun mistókst:</b>'
|
||||||
INVALID_INPUT: Ógilt inntak í
|
INVALID_INPUT: 'Ógilt inntak í'
|
||||||
MISSING_REQUIRED_FIELD: 'Vantar nauðsynlegan reit:'
|
MISSING_REQUIRED_FIELD: 'Vantar nauðsynlegan reit:'
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'janúar'
|
- 'janúar'
|
||||||
|
|||||||
@@ -1,6 +1,49 @@
|
|||||||
---
|
---
|
||||||
GRAV:
|
GRAV:
|
||||||
FRONTMATTER_ERROR_PAGE: "---Titolo: %1$s---# Errore: Frontmatter non valido: '%2$s' * *%3$s * * ' '%4$s ' '"
|
FRONTMATTER_ERROR_PAGE: "---Titolo: %1$s---# Errore: Frontmatter non valido: '%2$s' * *%3$s * * ' '%4$s ' '"
|
||||||
|
INFLECTOR_PLURALS:
|
||||||
|
'/(quiz)$/i': '\1'
|
||||||
|
'/^(ox)$/i': '\1en'
|
||||||
|
'/([m|l])ouse$/i': '\1ice'
|
||||||
|
'/(matr|vert|ind)ix|ex$/i': '\1ices'
|
||||||
|
'/(x|ch|ss|sh)$/i': '\1es'
|
||||||
|
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||||
|
'/([^aeiouy]|qu)y$/i': '\1ies'
|
||||||
|
'/(hive)$/i': '\1s'
|
||||||
|
'/(?:([^f])fe|([lr])f)$/i': '\1\2ves'
|
||||||
|
'/sis$/i': 'ses'
|
||||||
|
'/([ti])um$/i': '\1a'
|
||||||
|
'/(buffal|tomat)o$/i': '\1oes'
|
||||||
|
'/(bu)s$/i': '\1ses'
|
||||||
|
'/(alias|status)/i': '\1es'
|
||||||
|
'/(octop|vir)us$/i': '\1i'
|
||||||
|
'/(ax|test)is$/i': '\1es'
|
||||||
|
'/s$/i': 's'
|
||||||
|
'/$/': 's'
|
||||||
|
INFLECTOR_SINGULAR:
|
||||||
|
'/(quiz)zes$/i': '\1'
|
||||||
|
'/(matr)ices$/i': '\1ix'
|
||||||
|
'/(vert|ind)ices$/i': '\1ex'
|
||||||
|
'/^(ox)en/i': '\1'
|
||||||
|
'/(alias|status)es$/i': '\1'
|
||||||
|
'/([octop|vir])i$/i': '\1us'
|
||||||
|
'/(cris|ax|test)es$/i': '\1is'
|
||||||
|
'/(shoe)s$/i': '\1'
|
||||||
|
'/(o)es$/i': '\1'
|
||||||
|
'/(bus)es$/i': '\1'
|
||||||
|
'/([m|l])ice$/i': '\1ouse'
|
||||||
|
'/(x|ch|ss|sh)es$/i': '\1'
|
||||||
|
'/(m)ovies$/i': '\1ovie'
|
||||||
|
'/(s)eries$/i': '\1eries'
|
||||||
|
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||||
|
'/([lr])ves$/i': '\1f'
|
||||||
|
'/(tive)s$/i': '\1'
|
||||||
|
'/(hive)s$/i': '\1'
|
||||||
|
'/([^f])ves$/i': '\1fe'
|
||||||
|
'/(^analy)ses$/i': '\1sis'
|
||||||
|
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2sis'
|
||||||
|
'/([ti])a$/i': '\1um'
|
||||||
|
'/(n)ews$/i': '\1ews'
|
||||||
INFLECTOR_UNCOUNTABLE:
|
INFLECTOR_UNCOUNTABLE:
|
||||||
- 'dotazione'
|
- 'dotazione'
|
||||||
- 'informazione'
|
- 'informazione'
|
||||||
@@ -58,9 +101,10 @@ GRAV:
|
|||||||
YR_PLURAL: anni
|
YR_PLURAL: anni
|
||||||
DEC_PLURAL: decenni
|
DEC_PLURAL: decenni
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Validazione fallita:</b>
|
VALIDATION_FAIL: '<b>Validazione fallita:</b>'
|
||||||
INVALID_INPUT: Input non valido in
|
INVALID_INPUT: 'Input non valido in'
|
||||||
MISSING_REQUIRED_FIELD: 'Campo richiesto mancante:'
|
MISSING_REQUIRED_FIELD: 'Campo richiesto mancante:'
|
||||||
|
XSS_ISSUES: "Rilevati potenziali problemi di XSS nel campo '%s'"
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'Gennaio'
|
- 'Gennaio'
|
||||||
- 'Febbraio'
|
- 'Febbraio'
|
||||||
@@ -82,6 +126,8 @@ GRAV:
|
|||||||
- 'Venerdì'
|
- 'Venerdì'
|
||||||
- 'Sabato'
|
- 'Sabato'
|
||||||
- 'Domenica'
|
- 'Domenica'
|
||||||
|
YES: "Sì"
|
||||||
|
NO: "No"
|
||||||
CRON:
|
CRON:
|
||||||
EVERY: ogni
|
EVERY: ogni
|
||||||
EVERY_HOUR: ogni ora
|
EVERY_HOUR: ogni ora
|
||||||
|
|||||||
@@ -1,11 +1,22 @@
|
|||||||
---
|
---
|
||||||
GRAV:
|
GRAV:
|
||||||
|
INFLECTOR_UNCOUNTABLE:
|
||||||
|
- ''
|
||||||
|
- '情報'
|
||||||
|
- ''
|
||||||
|
- 'お金'
|
||||||
|
- ''
|
||||||
|
- ''
|
||||||
|
- '魚'
|
||||||
|
- 'ヒツジ'
|
||||||
INFLECTOR_IRREGULAR:
|
INFLECTOR_IRREGULAR:
|
||||||
'person': 'みんな'
|
'person': 'みんな'
|
||||||
'man': '人'
|
'man': '人'
|
||||||
'child': '子供'
|
'child': '子供'
|
||||||
'sex': '性別'
|
'sex': '性別'
|
||||||
'move': '移動'
|
'move': '移動'
|
||||||
|
INFLECTOR_ORDINALS:
|
||||||
|
'first': '番目'
|
||||||
NICETIME:
|
NICETIME:
|
||||||
NO_DATE_PROVIDED: 日付が設定されていません
|
NO_DATE_PROVIDED: 日付が設定されていません
|
||||||
BAD_DATE: 不正な日付
|
BAD_DATE: 不正な日付
|
||||||
@@ -40,8 +51,8 @@ GRAV:
|
|||||||
YR_PLURAL: 年
|
YR_PLURAL: 年
|
||||||
DEC_PLURAL: 10年
|
DEC_PLURAL: 10年
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>バリデーション失敗 :</b>
|
VALIDATION_FAIL: '<b>バリデーション失敗 :</b>'
|
||||||
INVALID_INPUT: 不正な入力:
|
INVALID_INPUT: '不正な入力:'
|
||||||
MISSING_REQUIRED_FIELD: '必須項目が入力されていません:'
|
MISSING_REQUIRED_FIELD: '必須項目が入力されていません:'
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- '1月'
|
- '1月'
|
||||||
@@ -64,3 +75,7 @@ GRAV:
|
|||||||
- '金'
|
- '金'
|
||||||
- '土'
|
- '土'
|
||||||
- '日'
|
- '日'
|
||||||
|
CRON:
|
||||||
|
EVERY: 毎
|
||||||
|
EVERY_MONTH: 毎月
|
||||||
|
ERROR1: 共有タイプ %s はサポートされていません
|
||||||
|
|||||||
@@ -1,11 +1,23 @@
|
|||||||
---
|
---
|
||||||
GRAV:
|
GRAV:
|
||||||
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# 오류: 무효의 Frontmatter\n\n경로: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# 오류: 무효의 Frontmatter\n\n경로: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
|
INFLECTOR_UNCOUNTABLE:
|
||||||
|
- '장비'
|
||||||
|
- '정보'
|
||||||
|
- ''
|
||||||
|
- ''
|
||||||
|
- ''
|
||||||
|
- '시리즈'
|
||||||
|
- '물고기'
|
||||||
|
- ''
|
||||||
|
INFLECTOR_IRREGULAR:
|
||||||
|
'person': '사람들'
|
||||||
NICETIME:
|
NICETIME:
|
||||||
NO_DATE_PROVIDED: 제공된 날짜가 없습니다
|
NO_DATE_PROVIDED: 제공된 날짜가 없습니다
|
||||||
BAD_DATE: 잘못된 날짜
|
BAD_DATE: 잘못된 날짜
|
||||||
AGO: 전
|
AGO: 전
|
||||||
FROM_NOW: 후
|
FROM_NOW: 후
|
||||||
|
JUST_NOW: 방금
|
||||||
SECOND: 초
|
SECOND: 초
|
||||||
MINUTE: 분
|
MINUTE: 분
|
||||||
HOUR: 시간
|
HOUR: 시간
|
||||||
@@ -37,9 +49,10 @@ GRAV:
|
|||||||
YR_PLURAL: 년
|
YR_PLURAL: 년
|
||||||
DEC_PLURAL: 년간
|
DEC_PLURAL: 년간
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>유효성 검사 실패:</b>
|
VALIDATION_FAIL: '<b>유효성 검사 실패:</b>'
|
||||||
INVALID_INPUT: 잘못된 입력
|
INVALID_INPUT: '잘못된 입력'
|
||||||
MISSING_REQUIRED_FIELD: '누락 된 필수 필드:'
|
MISSING_REQUIRED_FIELD: '누락 된 필수 필드:'
|
||||||
|
XSS_ISSUES: "'%s' 필드에서 잠재적인 XSS 문제가 감지되었습니다."
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- '일월'
|
- '일월'
|
||||||
- '이월'
|
- '이월'
|
||||||
@@ -61,3 +74,17 @@ GRAV:
|
|||||||
- '금요일'
|
- '금요일'
|
||||||
- '토요일'
|
- '토요일'
|
||||||
- '일요일'
|
- '일요일'
|
||||||
|
YES: "네"
|
||||||
|
NO: "아니요"
|
||||||
|
CRON:
|
||||||
|
EVERY: 모두
|
||||||
|
EVERY_HOUR: 매 시간
|
||||||
|
EVERY_MINUTE: 매 분
|
||||||
|
EVERY_DAY_OF_WEEK: 일주일간 매일
|
||||||
|
EVERY_DAY_OF_MONTH: 일개월간 매일
|
||||||
|
EVERY_MONTH: 매달
|
||||||
|
TEXT_PERIOD: 모든 <b />
|
||||||
|
ERROR1: '%s 태그는 지원되지 않습니다. '
|
||||||
|
ERROR2: 잘못된 요소 수
|
||||||
|
ERROR3: jquery_element는 jqCron 설정에서 설정할 수 있습니다.
|
||||||
|
ERROR4: 인식할 수 없는 표현
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
GRAV:
|
GRAV:
|
||||||
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# Klaida: klaidinga įžanginė konfigūracija\n\nPath: `%2$s`\n\n**%3$s**\n\n```\n %4$s\n```"
|
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# Klaida: klaidinga įžanginė konfigūracija\n\nPath: `%2$s`\n\n**%3$s**\n\n```\n %4$s\n```"
|
||||||
INFLECTOR_UNCOUNTABLE:
|
INFLECTOR_UNCOUNTABLE:
|
||||||
- 'equipment'
|
- ''
|
||||||
- 'information'
|
- ''
|
||||||
- 'ryžiai'
|
- 'ryžiai'
|
||||||
- 'pinigai'
|
- 'pinigai'
|
||||||
- 'prieskoniai'
|
- 'prieskoniai'
|
||||||
@@ -52,8 +52,8 @@ GRAV:
|
|||||||
YR_PLURAL: m.
|
YR_PLURAL: m.
|
||||||
DEC_PLURAL: dešimtmečiai
|
DEC_PLURAL: dešimtmečiai
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Patvirtinimas nepavyko:</b>
|
VALIDATION_FAIL: '<b>Patvirtinimas nepavyko:</b>'
|
||||||
INVALID_INPUT: Neteisingai įvesta į
|
INVALID_INPUT: 'Neteisingai įvesta į'
|
||||||
MISSING_REQUIRED_FIELD: 'Būtina užpildyti laukelį:'
|
MISSING_REQUIRED_FIELD: 'Būtina užpildyti laukelį:'
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'Sausis'
|
- 'Sausis'
|
||||||
|
|||||||
84
system/languages/lv.yaml
Normal file
84
system/languages/lv.yaml
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
---
|
||||||
|
GRAV:
|
||||||
|
FRONTMATTER_ERROR_PAGE: "---\nNosaukums: %1$s\n---\n\n# Kļūda: Nederīgs Frontmatter\n\nCeļš: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
|
INFLECTOR_ORDINALS:
|
||||||
|
'default': '.'
|
||||||
|
'first': '.'
|
||||||
|
'second': '.'
|
||||||
|
'third': '.'
|
||||||
|
NICETIME:
|
||||||
|
NO_DATE_PROVIDED: Nav norādīts datums
|
||||||
|
BAD_DATE: Nederīgs datums
|
||||||
|
AGO: iepriekš
|
||||||
|
FROM_NOW: no šī brīža
|
||||||
|
JUST_NOW: tikko
|
||||||
|
SECOND: sekundes
|
||||||
|
MINUTE: minūte
|
||||||
|
HOUR: stunda
|
||||||
|
DAY: diena
|
||||||
|
WEEK: nedēļa
|
||||||
|
MONTH: mēnesis
|
||||||
|
YEAR: gads
|
||||||
|
DECADE: dekāde
|
||||||
|
SEC: s
|
||||||
|
MIN: m
|
||||||
|
HR: st
|
||||||
|
WK: ned
|
||||||
|
MO: mēn.
|
||||||
|
YR: g.
|
||||||
|
DEC: dec
|
||||||
|
SECOND_PLURAL: sekundes
|
||||||
|
MINUTE_PLURAL: minūtes
|
||||||
|
HOUR_PLURAL: stundas
|
||||||
|
DAY_PLURAL: dienas
|
||||||
|
WEEK_PLURAL: nedēļas
|
||||||
|
MONTH_PLURAL: mēneši
|
||||||
|
YEAR_PLURAL: gadi
|
||||||
|
DECADE_PLURAL: desmitgades
|
||||||
|
SEC_PLURAL: s
|
||||||
|
MIN_PLURAL: m
|
||||||
|
HR_PLURAL: st.
|
||||||
|
WK_PLURAL: ned.
|
||||||
|
MO_PLURAL: mēn.
|
||||||
|
YR_PLURAL: g.
|
||||||
|
DEC_PLURAL: d
|
||||||
|
FORM:
|
||||||
|
VALIDATION_FAIL: '<b>Validācija neizdevās:</b>'
|
||||||
|
INVALID_INPUT: 'Nederīga ievade'
|
||||||
|
MISSING_REQUIRED_FIELD: 'Laukā trūkst datu'
|
||||||
|
XSS_ISSUES: "Atrastas iespējamas XSS problēmas laukā '%s'"
|
||||||
|
MONTHS_OF_THE_YEAR:
|
||||||
|
- 'Janvāris'
|
||||||
|
- 'Februāris'
|
||||||
|
- 'Marts'
|
||||||
|
- 'Aprīlis'
|
||||||
|
- 'Maijs'
|
||||||
|
- 'Jūnijs'
|
||||||
|
- 'Jūlijs'
|
||||||
|
- 'Augusts'
|
||||||
|
- 'Septembris'
|
||||||
|
- 'Oktobris'
|
||||||
|
- 'Novembris'
|
||||||
|
- 'Decembris'
|
||||||
|
DAYS_OF_THE_WEEK:
|
||||||
|
- 'Pirmdiena'
|
||||||
|
- 'Otrdiena'
|
||||||
|
- 'Trešdiena'
|
||||||
|
- 'Ceturtdiena'
|
||||||
|
- 'Piektdiena'
|
||||||
|
- 'Sestdiena'
|
||||||
|
- 'Svētdiena'
|
||||||
|
YES: "Jā"
|
||||||
|
NO: "Nē"
|
||||||
|
CRON:
|
||||||
|
EVERY: katru
|
||||||
|
EVERY_HOUR: katru stundu
|
||||||
|
EVERY_MINUTE: katru minūti
|
||||||
|
EVERY_DAY_OF_WEEK: katru nedēļas dienu
|
||||||
|
EVERY_DAY_OF_MONTH: katru mēneša dienu
|
||||||
|
EVERY_MONTH: katru mēnesi
|
||||||
|
TEXT_PERIOD: Katru <b />
|
||||||
|
ERROR1: Marķieris %s nav atbalstīts!
|
||||||
|
ERROR2: Nederīgs elementu skaits
|
||||||
|
ERROR3: jquery_element nevajadzētu definēt jqCron iestatījumos
|
||||||
|
ERROR4: Neatpazīta izteiksme
|
||||||
147
system/languages/mn.yaml
Normal file
147
system/languages/mn.yaml
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
---
|
||||||
|
GRAV:
|
||||||
|
FRONTMATTER_ERROR_PAGE: "---\nГарчиг: %1$s\n---\n\n# Алдаа: Буруу Формат\n\nЗам: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
|
INFLECTOR_PLURALS:
|
||||||
|
'/(quiz)$/i': '\1зүүд'
|
||||||
|
'/^(ox)$/i': '\1ууд'
|
||||||
|
'/([m|l])ouse$/i': '\1ууд'
|
||||||
|
'/(matr|vert|ind)ix|ex$/i': '\1иксүүд'
|
||||||
|
'/(x|ch|ss|sh)$/i': '\1үүд'
|
||||||
|
'/([^aeiouy]|qu)ies$/i': '\1үүд'
|
||||||
|
'/([^aeiouy]|qu)y$/i': '\1үүд'
|
||||||
|
'/(hive)$/i': '\1үүд'
|
||||||
|
'/(?:([^f])fe|([lr])f)$/i': '\1\2үүд'
|
||||||
|
'/sis$/i': 'үүд'
|
||||||
|
'/([ti])um$/i': '\1үүд'
|
||||||
|
'/(buffal|tomat)o$/i': '\1үүд'
|
||||||
|
'/(bu)s$/i': '\1үүд'
|
||||||
|
'/(alias|status)/i': '\1үүд'
|
||||||
|
'/(octop|vir)us$/i': '\1үүд'
|
||||||
|
'/(ax|test)is$/i': '\1үүд'
|
||||||
|
'/s$/i': 'үүд'
|
||||||
|
'/$/': 'үүд'
|
||||||
|
INFLECTOR_SINGULAR:
|
||||||
|
'/(quiz)zes$/i': '\1'
|
||||||
|
'/(matr)ices$/i': '\1икс'
|
||||||
|
'/(vert|ind)ices$/i': '\1икс'
|
||||||
|
'/^(ox)en/i': '\1'
|
||||||
|
'/(alias|status)es$/i': '\1'
|
||||||
|
'/([octop|vir])i$/i': '\1'
|
||||||
|
'/(cris|ax|test)es$/i': '\1'
|
||||||
|
'/(shoe)s$/i': '\1'
|
||||||
|
'/(o)es$/i': '\1'
|
||||||
|
'/(bus)es$/i': '\1'
|
||||||
|
'/([m|l])ice$/i': '\1'
|
||||||
|
'/(x|ch|ss|sh)es$/i': '\1'
|
||||||
|
'/(m)ovies$/i': '\1'
|
||||||
|
'/(s)eries$/i': '\1'
|
||||||
|
'/([^aeiouy]|qu)ies$/i': '\1үүд'
|
||||||
|
'/([lr])ves$/i': '\1'
|
||||||
|
'/(tive)s$/i': '\1'
|
||||||
|
'/(hive)s$/i': '\1'
|
||||||
|
'/([^f])ves$/i': '\1'
|
||||||
|
'/(^analy)ses$/i': '\1'
|
||||||
|
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2үүд'
|
||||||
|
'/([ti])a$/i': '\1'
|
||||||
|
'/(n)ews$/i': '\1'
|
||||||
|
INFLECTOR_UNCOUNTABLE:
|
||||||
|
- 'тоног төхөөрөмж'
|
||||||
|
- 'Мэдээлэл'
|
||||||
|
- 'будаа'
|
||||||
|
- 'мөнгө'
|
||||||
|
- 'төрөл зүйл'
|
||||||
|
- 'цуврал'
|
||||||
|
- 'загас'
|
||||||
|
- 'хонь'
|
||||||
|
INFLECTOR_IRREGULAR:
|
||||||
|
'person': 'хүмүүс'
|
||||||
|
'man': 'эрчүүд'
|
||||||
|
'child': 'хүүхэд'
|
||||||
|
'sex': 'хүйс'
|
||||||
|
'move': 'хөдөлгөөн'
|
||||||
|
INFLECTOR_ORDINALS:
|
||||||
|
'default': 'th'
|
||||||
|
'first': 'st'
|
||||||
|
'second': 'nd'
|
||||||
|
'third': 'rd'
|
||||||
|
NICETIME:
|
||||||
|
NO_DATE_PROVIDED: Огноо алга
|
||||||
|
BAD_DATE: Буруу огноо
|
||||||
|
AGO: өмнө
|
||||||
|
FROM_NOW: одооноос
|
||||||
|
JUST_NOW: дөнгөж сая
|
||||||
|
SECOND: секунд
|
||||||
|
MINUTE: минут
|
||||||
|
HOUR: цаг
|
||||||
|
DAY: өдөр
|
||||||
|
WEEK: долоо хоног
|
||||||
|
MONTH: сар
|
||||||
|
YEAR: он
|
||||||
|
DECADE: арван жил
|
||||||
|
SEC: сек
|
||||||
|
MIN: мин
|
||||||
|
HR: цаг
|
||||||
|
WK: д.х.
|
||||||
|
MO: сар
|
||||||
|
YR: он
|
||||||
|
DEC: арван жил
|
||||||
|
SECOND_PLURAL: секунд
|
||||||
|
MINUTE_PLURAL: минут
|
||||||
|
HOUR_PLURAL: цаг
|
||||||
|
DAY_PLURAL: өдрүүд
|
||||||
|
WEEK_PLURAL: долоо хоногууд
|
||||||
|
MONTH_PLURAL: сарууд
|
||||||
|
YEAR_PLURAL: онууд
|
||||||
|
DECADE_PLURAL: арван жилүүд
|
||||||
|
SEC_PLURAL: сек.-үүд
|
||||||
|
MIN_PLURAL: мин.-ууд
|
||||||
|
HR_PLURAL: цагууд
|
||||||
|
WK_PLURAL: д.х.-ууд
|
||||||
|
MO_PLURAL: сарууд
|
||||||
|
YR_PLURAL: жилүүд
|
||||||
|
DEC_PLURAL: арван жилүүд
|
||||||
|
FORM:
|
||||||
|
VALIDATION_FAIL: '<b>Баталгаажуулалт амжилтгүй боллоо:</b>'
|
||||||
|
INVALID_INPUT: 'Буруу өгөгдөл дараахид'
|
||||||
|
MISSING_REQUIRED_FIELD: 'Шаардлагатай талбар дутуу байна:'
|
||||||
|
XSS_ISSUES: "'%s' талбарт XSS -ийн болзошгүй асуудлууд илэрсэн"
|
||||||
|
MONTHS_OF_THE_YEAR:
|
||||||
|
- '1-р сар'
|
||||||
|
- '2-р сар'
|
||||||
|
- '3-р сар'
|
||||||
|
- '4-р сар'
|
||||||
|
- '5 сар'
|
||||||
|
- '6 сар'
|
||||||
|
- '7 сар'
|
||||||
|
- '8 сар'
|
||||||
|
- '9 сар'
|
||||||
|
- '10 сар'
|
||||||
|
- '11 сар'
|
||||||
|
- '12 сар'
|
||||||
|
DAYS_OF_THE_WEEK:
|
||||||
|
- 'Даваа гараг'
|
||||||
|
- 'Мягмар гараг'
|
||||||
|
- 'Лхагва гараг'
|
||||||
|
- 'Пүрэв гараг'
|
||||||
|
- 'Баасан гараг'
|
||||||
|
- 'Бямба гараг'
|
||||||
|
- 'Ням гараг'
|
||||||
|
YES: "Тийм"
|
||||||
|
NO: "Үгүй"
|
||||||
|
CRON:
|
||||||
|
EVERY: бүрийн
|
||||||
|
EVERY_HOUR: цаг бүрийн
|
||||||
|
EVERY_MINUTE: минут бүрийн
|
||||||
|
EVERY_DAY_OF_WEEK: долоо хоногийн өдөр болгонд
|
||||||
|
EVERY_DAY_OF_MONTH: сарын өдөр болгонд
|
||||||
|
EVERY_MONTH: сар болгон
|
||||||
|
TEXT_PERIOD: Бүрийн <b />
|
||||||
|
TEXT_MINS: ' <b /> энэ сүүлийн цагийн минутад'
|
||||||
|
TEXT_TIME: ' <b />:<b /> -д'
|
||||||
|
TEXT_DOW: ' <b /> -д'
|
||||||
|
TEXT_MONTH: ' <b /> -ын'
|
||||||
|
TEXT_DOM: ' <b /> -т'
|
||||||
|
ERROR1: '%s -н утга нь дэмжигддэггүй!'
|
||||||
|
ERROR2: Элементүүдийн тоо хэмжээ буруу
|
||||||
|
ERROR3: jquery_element нь jqCron тохиргоонд хийгдсэн байх ёстой
|
||||||
|
ERROR4: Танигдаагүй илэрхийлэл
|
||||||
147
system/languages/my.yaml
Normal file
147
system/languages/my.yaml
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
---
|
||||||
|
GRAV:
|
||||||
|
FRONTMATTER_ERROR_PAGE: "---\nခေါင်းစဥ်: %1$s\n---\n\n# အမှား - Frontmatter မမှန်ကန်ပါ\n\nလမ်းကြောင်း `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
|
INFLECTOR_PLURALS:
|
||||||
|
'/(quiz)$/i': '\1zes'
|
||||||
|
'/^(ox)$/i': '\1en'
|
||||||
|
'/([m|l])ouse$/i': '\1ice'
|
||||||
|
'/(matr|vert|ind)ix|ex$/i': '\1ices'
|
||||||
|
'/(x|ch|ss|sh)$/i': '\1es'
|
||||||
|
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||||
|
'/([^aeiouy]|qu)y$/i': '\1ies'
|
||||||
|
'/(hive)$/i': '\1s'
|
||||||
|
'/(?:([^f])fe|([lr])f)$/i': '\1\2ves'
|
||||||
|
'/sis$/i': 'ses'
|
||||||
|
'/([ti])um$/i': '\1a'
|
||||||
|
'/(buffal|tomat)o$/i': '\1oes'
|
||||||
|
'/(bu)s$/i': '\1ses'
|
||||||
|
'/(alias|status)/i': '\1es'
|
||||||
|
'/(octop|vir)us$/i': '\1i'
|
||||||
|
'/(ax|test)is$/i': '\1es'
|
||||||
|
'/s$/i': 's'
|
||||||
|
'/$/': 's'
|
||||||
|
INFLECTOR_SINGULAR:
|
||||||
|
'/(quiz)zes$/i': '\1'
|
||||||
|
'/(matr)ices$/i': '\1ix'
|
||||||
|
'/(vert|ind)ices$/i': '\1ex'
|
||||||
|
'/^(ox)en/i': '\1'
|
||||||
|
'/(alias|status)es$/i': '\1'
|
||||||
|
'/([octop|vir])i$/i': '\1us'
|
||||||
|
'/(cris|ax|test)es$/i': '\1is'
|
||||||
|
'/(shoe)s$/i': '\1'
|
||||||
|
'/(o)es$/i': '\1'
|
||||||
|
'/(bus)es$/i': '\1'
|
||||||
|
'/([m|l])ice$/i': '\1ouse'
|
||||||
|
'/(x|ch|ss|sh)es$/i': '\1'
|
||||||
|
'/(m)ovies$/i': '\1ovie'
|
||||||
|
'/(s)eries$/i': '\1eries'
|
||||||
|
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||||
|
'/([lr])ves$/i': '\1f'
|
||||||
|
'/(tive)s$/i': '\1'
|
||||||
|
'/(hive)s$/i': '\1'
|
||||||
|
'/([^f])ves$/i': '\1fe'
|
||||||
|
'/(^analy)ses$/i': '\1sis'
|
||||||
|
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2sis'
|
||||||
|
'/([ti])a$/i': '\1um'
|
||||||
|
'/(n)ews$/i': '\1ews'
|
||||||
|
INFLECTOR_UNCOUNTABLE:
|
||||||
|
- 'ကိရိယာ'
|
||||||
|
- 'အချက်အလက်'
|
||||||
|
- 'ဆန်'
|
||||||
|
- 'ငွေ'
|
||||||
|
- 'မျိုးစိတ်'
|
||||||
|
- 'အတွဲများ'
|
||||||
|
- 'ငါး'
|
||||||
|
- 'သိုးများ'
|
||||||
|
INFLECTOR_IRREGULAR:
|
||||||
|
'person': 'လူ'
|
||||||
|
'man': 'ယောက်ျား'
|
||||||
|
'child': 'ကလေးများ'
|
||||||
|
'sex': 'လိင်'
|
||||||
|
'move': 'ရွှေ့ခြင်း'
|
||||||
|
INFLECTOR_ORDINALS:
|
||||||
|
'default': 'th'
|
||||||
|
'first': 'st'
|
||||||
|
'second': 'nd'
|
||||||
|
'third': 'rd'
|
||||||
|
NICETIME:
|
||||||
|
NO_DATE_PROVIDED: နေ့စွဲ မသတ်မှတ်ထား
|
||||||
|
BAD_DATE: ရက်စွဲမမှန်ပါ
|
||||||
|
AGO: လွန်ခဲ့တဲ့
|
||||||
|
FROM_NOW: ယခုမှ
|
||||||
|
JUST_NOW: အခုပဲ
|
||||||
|
SECOND: ဒုတိယ
|
||||||
|
MINUTE: မိနစ်
|
||||||
|
HOUR: နာရီ
|
||||||
|
DAY: နေ့
|
||||||
|
WEEK: တစ်ပတ်
|
||||||
|
MONTH: လ
|
||||||
|
YEAR: နှစ်
|
||||||
|
DECADE: ဆယ်စုနှစ်
|
||||||
|
SEC: စက္ကန့်
|
||||||
|
MIN: မိနစ်
|
||||||
|
HR: နာရီ
|
||||||
|
WK: တစ်ပတ်
|
||||||
|
MO: လ
|
||||||
|
YR: နှစ်
|
||||||
|
DEC: ဒီဇင်ဘာ
|
||||||
|
SECOND_PLURAL: စက္ကန့်
|
||||||
|
MINUTE_PLURAL: မိနစ်
|
||||||
|
HOUR_PLURAL: နာရီ
|
||||||
|
DAY_PLURAL: နေ့
|
||||||
|
WEEK_PLURAL: ရက်သတ္တပတ်
|
||||||
|
MONTH_PLURAL: လ
|
||||||
|
YEAR_PLURAL: နှစ်
|
||||||
|
DECADE_PLURAL: ဆယ်စုနှစ်များစွ
|
||||||
|
SEC_PLURAL: စက္ကန့်
|
||||||
|
MIN_PLURAL: မိနစ်
|
||||||
|
HR_PLURAL: နာရီ
|
||||||
|
WK_PLURAL: အပတ်
|
||||||
|
MO_PLURAL: လ
|
||||||
|
YR_PLURAL: နှစ်
|
||||||
|
DEC_PLURAL: ဆယ်စုနှစ်
|
||||||
|
FORM:
|
||||||
|
VALIDATION_FAIL: '<b> အတည်ပြုခြင်းမအောင်မြင်ပါ: </b>'
|
||||||
|
INVALID_INPUT: 'ထည့်သွင်းမှုမမှန်ပါ'
|
||||||
|
MISSING_REQUIRED_FIELD: 'လိုအပ်သောအကွက်ပျောက်နေသည်'
|
||||||
|
XSS_ISSUES: "XSS ပြဿနာ ဖြစ်နိုင်ချေ ကို '%s' အကွက်တွင် တွေ့"
|
||||||
|
MONTHS_OF_THE_YEAR:
|
||||||
|
- 'ဇန်နဝါရီ'
|
||||||
|
- 'ဖေဖော်ဝါရီ'
|
||||||
|
- 'မတ်'
|
||||||
|
- 'ဧပြီ'
|
||||||
|
- 'မေ'
|
||||||
|
- 'ဇွန်'
|
||||||
|
- 'ဇူလိုင်'
|
||||||
|
- 'သြဂုတ်'
|
||||||
|
- 'စက်တင်ဘာ'
|
||||||
|
- 'အောက်တိုဘာ'
|
||||||
|
- 'နိုဝင်ဘာ'
|
||||||
|
- 'ဒီဇင်ဘာ'
|
||||||
|
DAYS_OF_THE_WEEK:
|
||||||
|
- 'တနင်္လာ'
|
||||||
|
- ' အင်္ဂါ'
|
||||||
|
- 'ဗုဒ္ဓဟူး'
|
||||||
|
- 'ကြာသပတေး'
|
||||||
|
- 'သောကြာ'
|
||||||
|
- 'စနေ'
|
||||||
|
- 'တနင်္ဂနွေ'
|
||||||
|
YES: "လုပ်"
|
||||||
|
NO: "မလုပ်"
|
||||||
|
CRON:
|
||||||
|
EVERY: အမြဲတမ်း
|
||||||
|
EVERY_HOUR: နာရီတိုင်း
|
||||||
|
EVERY_MINUTE: မိနစ်တိုင်း
|
||||||
|
EVERY_DAY_OF_WEEK: တစ်ပတ်လုံး နေ့တိုင်း
|
||||||
|
EVERY_DAY_OF_MONTH: တစ်လလုံး နေ့တိုင်း
|
||||||
|
EVERY_MONTH: လစဉ်လတိုင်း
|
||||||
|
TEXT_PERIOD: </b>တိုင်း
|
||||||
|
TEXT_MINS: 'နာရီ ကျော်ပြီး <b /> မိနစ် တွင်'
|
||||||
|
TEXT_TIME: ' <b />:<b /> တွင် '
|
||||||
|
TEXT_DOW: '<b /> ပေါ်တွင် '
|
||||||
|
TEXT_MONTH: '<b />၏ '
|
||||||
|
TEXT_DOM: '<b /> တွင် '
|
||||||
|
ERROR1: ဤ %s တက် ကိုပံ့ပိုးမထားပါ။
|
||||||
|
ERROR2: လိုအပ်သောထည့်သွင်း နာပတ် အမှားဖြစ်နေသည်
|
||||||
|
ERROR3: jquery_element ကို jqCron ဆက်တင် တွင်ထားရမည်
|
||||||
|
ERROR4: အသိအမှတ်မပြုသော အသုံးအနှုန်း
|
||||||
@@ -101,9 +101,10 @@ GRAV:
|
|||||||
YR_PLURAL: jaren
|
YR_PLURAL: jaren
|
||||||
DEC_PLURAL: decennia
|
DEC_PLURAL: decennia
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Validatie mislukt:</b>
|
VALIDATION_FAIL: '<b>Validatie mislukt:</b>'
|
||||||
INVALID_INPUT: Ongeldige invoer in
|
INVALID_INPUT: 'Ongeldige invoer in'
|
||||||
MISSING_REQUIRED_FIELD: 'Ontbrekend verplicht veld:'
|
MISSING_REQUIRED_FIELD: 'Ontbrekend verplicht veld:'
|
||||||
|
XSS_ISSUES: "Mogelijke XSS-problemen ontdekt in '%s' veld"
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'Januari'
|
- 'Januari'
|
||||||
- 'Februari'
|
- 'Februari'
|
||||||
@@ -125,6 +126,8 @@ GRAV:
|
|||||||
- 'Vrijdag'
|
- 'Vrijdag'
|
||||||
- 'Zaterdag'
|
- 'Zaterdag'
|
||||||
- 'Zondag'
|
- 'Zondag'
|
||||||
|
YES: "Ja"
|
||||||
|
NO: "Nee"
|
||||||
CRON:
|
CRON:
|
||||||
EVERY: elke
|
EVERY: elke
|
||||||
EVERY_HOUR: elk uur
|
EVERY_HOUR: elk uur
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ GRAV:
|
|||||||
BAD_DATE: Ugyldig dato
|
BAD_DATE: Ugyldig dato
|
||||||
AGO: siden
|
AGO: siden
|
||||||
FROM_NOW: fra nå
|
FROM_NOW: fra nå
|
||||||
|
JUST_NOW: akkurat nå
|
||||||
SECOND: sekund
|
SECOND: sekund
|
||||||
MINUTE: minutt
|
MINUTE: minutt
|
||||||
HOUR: time
|
HOUR: time
|
||||||
@@ -51,8 +52,8 @@ GRAV:
|
|||||||
YR_PLURAL: år
|
YR_PLURAL: år
|
||||||
DEC_PLURAL: årtier
|
DEC_PLURAL: årtier
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Godkjenning mislyktes:</b>
|
VALIDATION_FAIL: '<b>Godkjenning mislyktes:</b>'
|
||||||
INVALID_INPUT: Ugyldig innhold i
|
INVALID_INPUT: 'Ugyldig innhold i'
|
||||||
MISSING_REQUIRED_FIELD: 'Mangler påkrevd felt:'
|
MISSING_REQUIRED_FIELD: 'Mangler påkrevd felt:'
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'januar'
|
- 'januar'
|
||||||
@@ -75,3 +76,7 @@ GRAV:
|
|||||||
- 'fredag'
|
- 'fredag'
|
||||||
- 'lørdag'
|
- 'lørdag'
|
||||||
- 'søndag'
|
- 'søndag'
|
||||||
|
CRON:
|
||||||
|
EVERY: hver
|
||||||
|
EVERY_HOUR: hver time
|
||||||
|
EVERY_MINUTE: hvert minutt
|
||||||
|
|||||||
@@ -1,11 +1,32 @@
|
|||||||
---
|
---
|
||||||
GRAV:
|
GRAV:
|
||||||
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# Error: Nieprawidłowy Frontmatter\n\nPath: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# Error: Nieprawidłowy Frontmatter\n\nPath: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
|
INFLECTOR_SINGULAR:
|
||||||
|
'/(alias|status)es$/i': '\1'
|
||||||
|
INFLECTOR_UNCOUNTABLE:
|
||||||
|
- 'wyposażenie'
|
||||||
|
- 'informacja'
|
||||||
|
- ''
|
||||||
|
- 'pieniądze'
|
||||||
|
- ''
|
||||||
|
- ''
|
||||||
|
- 'ryba'
|
||||||
|
- 'owca'
|
||||||
|
INFLECTOR_IRREGULAR:
|
||||||
|
'person': 'człowiek'
|
||||||
|
'man': 'mężczyźni'
|
||||||
|
'child': 'dzieci'
|
||||||
|
'sex': 'płci'
|
||||||
|
INFLECTOR_ORDINALS:
|
||||||
|
'first': 'pierwszy'
|
||||||
|
'second': 'drugi'
|
||||||
|
'third': 'trzeci'
|
||||||
NICETIME:
|
NICETIME:
|
||||||
NO_DATE_PROVIDED: Nie podano daty
|
NO_DATE_PROVIDED: Nie podano daty
|
||||||
BAD_DATE: Zła data
|
BAD_DATE: Zła data
|
||||||
AGO: temu
|
AGO: temu
|
||||||
FROM_NOW: od teraz
|
FROM_NOW: od teraz
|
||||||
|
JUST_NOW: właśnie teraz
|
||||||
SECOND: sekunda
|
SECOND: sekunda
|
||||||
MINUTE: minuta
|
MINUTE: minuta
|
||||||
HOUR: godzina
|
HOUR: godzina
|
||||||
@@ -15,6 +36,7 @@ GRAV:
|
|||||||
YEAR: rok
|
YEAR: rok
|
||||||
DECADE: dekada
|
DECADE: dekada
|
||||||
SEC: sek
|
SEC: sek
|
||||||
|
MIN: minuta
|
||||||
HR: godz
|
HR: godz
|
||||||
WK: tydz
|
WK: tydz
|
||||||
MO: m-c
|
MO: m-c
|
||||||
@@ -36,9 +58,10 @@ GRAV:
|
|||||||
YR_PLURAL: lat
|
YR_PLURAL: lat
|
||||||
DEC_PLURAL: dekad
|
DEC_PLURAL: dekad
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Weryfikacja nie powiodła się:</b>
|
VALIDATION_FAIL: '<b>Weryfikacja nie powiodła się:</b>'
|
||||||
INVALID_INPUT: Nieprawidłowe dane wejściowe
|
INVALID_INPUT: 'Nieprawidłowe dane wejściowe'
|
||||||
MISSING_REQUIRED_FIELD: 'Opuszczono wymagane pole:'
|
MISSING_REQUIRED_FIELD: 'Opuszczono wymagane pole:'
|
||||||
|
XSS_ISSUES: "Potencjalne problemy XSS wykryte w polu '%s'"
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'Styczeń'
|
- 'Styczeń'
|
||||||
- 'Luty'
|
- 'Luty'
|
||||||
@@ -60,3 +83,18 @@ GRAV:
|
|||||||
- 'Piątek'
|
- 'Piątek'
|
||||||
- 'Sobota'
|
- 'Sobota'
|
||||||
- 'Niedziela'
|
- 'Niedziela'
|
||||||
|
YES: "Tak"
|
||||||
|
NO: "Nie"
|
||||||
|
CRON:
|
||||||
|
EVERY: każdy
|
||||||
|
EVERY_HOUR: każdą godzinę
|
||||||
|
EVERY_MINUTE: każdą minutę
|
||||||
|
EVERY_DAY_OF_WEEK: każdego dnia tygodnia
|
||||||
|
EVERY_DAY_OF_MONTH: każdego dnia miesiące
|
||||||
|
EVERY_MONTH: każdego miesiąca
|
||||||
|
TEXT_PERIOD: Każdego <b />
|
||||||
|
TEXT_MINS: 'o <b /> minut po godzinie'
|
||||||
|
TEXT_TIME: 'o <b />:<b />'
|
||||||
|
ERROR1: Znacznik %s nie jest wspierany!
|
||||||
|
ERROR2: Nieprawidłowa liczba elementów
|
||||||
|
ERROR4: Wyrażenie nierozpoznane
|
||||||
|
|||||||
@@ -1,8 +1,75 @@
|
|||||||
---
|
---
|
||||||
GRAV:
|
GRAV:
|
||||||
|
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# Erro: Frontmatter Inválido\n\nLocalização: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
|
INFLECTOR_PLURALS:
|
||||||
|
'/(quiz)$/i': '\1zes'
|
||||||
|
'/^(ox)$/i': '\1en'
|
||||||
|
'/([m|l])ouse$/i': '\1ice'
|
||||||
|
'/(matr|vert|ind)ix|ex$/i': '\1ices'
|
||||||
|
'/(x|ch|ss|sh)$/i': '\1es'
|
||||||
|
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||||
|
'/([^aeiouy]|qu)y$/i': '\1ies'
|
||||||
|
'/(hive)$/i': '\1s'
|
||||||
|
'/(?:([^f])fe|([lr])f)$/i': '\1\2ves'
|
||||||
|
'/sis$/i': 'ses'
|
||||||
|
'/([ti])um$/i': '\1a'
|
||||||
|
'/(buffal|tomat)o$/i': '\1oes'
|
||||||
|
'/(bu)s$/i': '\1ses'
|
||||||
|
'/(alias|status)/i': '\1es'
|
||||||
|
'/(octop|vir)us$/i': '\1i'
|
||||||
|
'/(ax|test)is$/i': '\1es'
|
||||||
|
'/s$/i': 's'
|
||||||
|
'/$/': 's'
|
||||||
|
INFLECTOR_SINGULAR:
|
||||||
|
'/(quiz)zes$/i': '\1'
|
||||||
|
'/(matr)ices$/i': '\1ix'
|
||||||
|
'/(vert|ind)ices$/i': '\1ex'
|
||||||
|
'/^(ox)en/i': '\1'
|
||||||
|
'/(alias|status)es$/i': '\1'
|
||||||
|
'/([octop|vir])i$/i': '\1us'
|
||||||
|
'/(cris|ax|test)es$/i': '\1is'
|
||||||
|
'/(shoe)s$/i': '\1'
|
||||||
|
'/(o)es$/i': '\1'
|
||||||
|
'/(bus)es$/i': '\1'
|
||||||
|
'/([m|l])ice$/i': '\1ouse'
|
||||||
|
'/(x|ch|ss|sh)es$/i': '\1'
|
||||||
|
'/(m)ovies$/i': '\1ovie'
|
||||||
|
'/(s)eries$/i': '\1eries'
|
||||||
|
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||||
|
'/([lr])ves$/i': '\1f'
|
||||||
|
'/(tive)s$/i': '\1'
|
||||||
|
'/(hive)s$/i': '\1'
|
||||||
|
'/([^f])ves$/i': '\1fe'
|
||||||
|
'/(^analy)ses$/i': '\1sis'
|
||||||
|
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2sis'
|
||||||
|
'/([ti])a$/i': '\1um'
|
||||||
|
'/(n)ews$/i': '\1ews'
|
||||||
|
INFLECTOR_UNCOUNTABLE:
|
||||||
|
- 'equipamento'
|
||||||
|
- 'informação'
|
||||||
|
- 'arroz'
|
||||||
|
- 'dinheiro'
|
||||||
|
- 'espécie'
|
||||||
|
- 'série'
|
||||||
|
- 'peixe'
|
||||||
|
- 'ovelha'
|
||||||
|
INFLECTOR_IRREGULAR:
|
||||||
|
'person': 'pessoas'
|
||||||
|
'man': 'homens'
|
||||||
|
'child': 'crianças'
|
||||||
|
'sex': 'sexos'
|
||||||
|
'move': 'movimentos'
|
||||||
|
INFLECTOR_ORDINALS:
|
||||||
|
'default': 'º'
|
||||||
|
'first': 'º'
|
||||||
|
'second': 'º'
|
||||||
|
'third': 'º'
|
||||||
NICETIME:
|
NICETIME:
|
||||||
NO_DATE_PROVIDED: Nenhuma data fornecida
|
NO_DATE_PROVIDED: Nenhuma data fornecida
|
||||||
AGO: atrás
|
BAD_DATE: Data inválida
|
||||||
|
AGO: há
|
||||||
|
FROM_NOW: a partir de agora
|
||||||
|
JUST_NOW: mesmo agora
|
||||||
SECOND: segundo
|
SECOND: segundo
|
||||||
MINUTE: minuto
|
MINUTE: minuto
|
||||||
HOUR: hora
|
HOUR: hora
|
||||||
@@ -11,17 +78,33 @@ GRAV:
|
|||||||
MONTH: mês
|
MONTH: mês
|
||||||
YEAR: ano
|
YEAR: ano
|
||||||
DECADE: década
|
DECADE: década
|
||||||
SEC: segundos
|
SEC: seg
|
||||||
MIN: minutos
|
MIN: min
|
||||||
|
HR: hora
|
||||||
|
WK: semana
|
||||||
|
MO: mês
|
||||||
|
YR: ano
|
||||||
|
DEC: década
|
||||||
|
SECOND_PLURAL: segundos
|
||||||
MINUTE_PLURAL: minutos
|
MINUTE_PLURAL: minutos
|
||||||
|
HOUR_PLURAL: horas
|
||||||
DAY_PLURAL: dias
|
DAY_PLURAL: dias
|
||||||
WEEK_PLURAL: semanas
|
WEEK_PLURAL: semanas
|
||||||
MONTH_PLURAL: meses
|
MONTH_PLURAL: meses
|
||||||
YEAR_PLURAL: anos
|
YEAR_PLURAL: anos
|
||||||
DECADE_PLURAL: decadas
|
DECADE_PLURAL: décadas
|
||||||
|
SEC_PLURAL: segs
|
||||||
|
MIN_PLURAL: mins
|
||||||
|
HR_PLURAL: hrs
|
||||||
|
WK_PLURAL: sems
|
||||||
|
MO_PLURAL: meses
|
||||||
|
YR_PLURAL: anos
|
||||||
|
DEC_PLURAL: décadas
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Falha na validação!</b>
|
VALIDATION_FAIL: '<b>Falha na validação:</b>'
|
||||||
MISSING_REQUIRED_FIELD: 'Campo obrigatório requerido:'
|
INVALID_INPUT: 'Dados inseridos são inválidos em'
|
||||||
|
MISSING_REQUIRED_FIELD: 'Campo obrigatório em falta:'
|
||||||
|
XSS_ISSUES: "Potenciais problemas de XSS detectados no campo '%s'"
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'Janeiro'
|
- 'Janeiro'
|
||||||
- 'Fevereiro'
|
- 'Fevereiro'
|
||||||
@@ -35,12 +118,30 @@ GRAV:
|
|||||||
- 'Outubro'
|
- 'Outubro'
|
||||||
- 'Novembro'
|
- 'Novembro'
|
||||||
- 'Dezembro'
|
- 'Dezembro'
|
||||||
INFLECTOR_UNCOUNTABLE:
|
DAYS_OF_THE_WEEK:
|
||||||
- 'equipment'
|
- 'Segunda-feira'
|
||||||
- 'information'
|
- 'Terça-feira'
|
||||||
- 'arroz'
|
- 'Quarta-feira'
|
||||||
- 'money'
|
- 'Quinta-feira'
|
||||||
- 'species'
|
- 'Sexta-feira'
|
||||||
- 'series'
|
- 'Sábado'
|
||||||
- 'fish'
|
- 'Domingo'
|
||||||
- 'sheep'
|
YES: "Sim"
|
||||||
|
NO: "Não"
|
||||||
|
CRON:
|
||||||
|
EVERY: cada
|
||||||
|
EVERY_HOUR: cada hora
|
||||||
|
EVERY_MINUTE: cada minuto
|
||||||
|
EVERY_DAY_OF_WEEK: todos os dias da semana
|
||||||
|
EVERY_DAY_OF_MONTH: todos os dias do mês
|
||||||
|
EVERY_MONTH: todos os meses
|
||||||
|
TEXT_PERIOD: Cada <b />
|
||||||
|
TEXT_MINS: ' em <b /> minuto(s) após a hora'
|
||||||
|
TEXT_TIME: ' em <b />:<b />'
|
||||||
|
TEXT_DOW: ' em <b />'
|
||||||
|
TEXT_MONTH: ' de <b />'
|
||||||
|
TEXT_DOM: ' em <b />'
|
||||||
|
ERROR1: A tag %s não é suportada!
|
||||||
|
ERROR2: Número de elementos inválido
|
||||||
|
ERROR3: O jquery_element deve ser definido nas configurações do jqCron
|
||||||
|
ERROR4: Expressão não reconhecida
|
||||||
|
|||||||
@@ -53,8 +53,8 @@ GRAV:
|
|||||||
YR_PLURAL: ani
|
YR_PLURAL: ani
|
||||||
DEC_PLURAL: decenii
|
DEC_PLURAL: decenii
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Validare nereușită</b>
|
VALIDATION_FAIL: '<b>Validare nereușită</b>'
|
||||||
INVALID_INPUT: Date incorecte în
|
INVALID_INPUT: 'Date incorecte în'
|
||||||
MISSING_REQUIRED_FIELD: 'Câmp obligatoriu lipsă:'
|
MISSING_REQUIRED_FIELD: 'Câmp obligatoriu lipsă:'
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'Ianuarie'
|
- 'Ianuarie'
|
||||||
|
|||||||
@@ -1,6 +1,16 @@
|
|||||||
---
|
---
|
||||||
GRAV:
|
GRAV:
|
||||||
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# Ошибка: недопустимое содержимое Frontmatter\n\nПуть: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# Ошибка: недопустимое содержимое Frontmatter\n\nПуть: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
|
INFLECTOR_SINGULAR:
|
||||||
|
'/([octop|vir])i$/i': '\1us'
|
||||||
|
'/(cris|ax|test)es$/i': '\1is'
|
||||||
|
'/(shoe)s$/i': '\1'
|
||||||
|
'/([lr])ves$/i': '\1f'
|
||||||
|
'/(tive)s$/i': "\\1\n"
|
||||||
|
'/(hive)s$/i': '\1'
|
||||||
|
'/([^f])ves$/i': '\1fe'
|
||||||
|
'/(^analy)ses$/i': '\1sis'
|
||||||
|
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2sis'
|
||||||
INFLECTOR_UNCOUNTABLE:
|
INFLECTOR_UNCOUNTABLE:
|
||||||
- 'экипировка'
|
- 'экипировка'
|
||||||
- 'информация'
|
- 'информация'
|
||||||
@@ -13,7 +23,7 @@ GRAV:
|
|||||||
INFLECTOR_IRREGULAR:
|
INFLECTOR_IRREGULAR:
|
||||||
'person': 'люди'
|
'person': 'люди'
|
||||||
'man': 'человек'
|
'man': 'человек'
|
||||||
'child': 'ребенок'
|
'child': 'дети'
|
||||||
'sex': 'пол'
|
'sex': 'пол'
|
||||||
'move': 'движется'
|
'move': 'движется'
|
||||||
INFLECTOR_ORDINALS:
|
INFLECTOR_ORDINALS:
|
||||||
@@ -58,9 +68,10 @@ GRAV:
|
|||||||
YR_PLURAL: г
|
YR_PLURAL: г
|
||||||
DEC_PLURAL: дстлт
|
DEC_PLURAL: дстлт
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Проверка не удалась:</b>
|
VALIDATION_FAIL: '<b>Проверка не удалась:</b>'
|
||||||
INVALID_INPUT: Неверный ввод в
|
INVALID_INPUT: 'Неверный ввод в'
|
||||||
MISSING_REQUIRED_FIELD: 'Отсутствует необходимое поле:'
|
MISSING_REQUIRED_FIELD: 'Отсутствует необходимое поле:'
|
||||||
|
XSS_ISSUES: "Обнаружены потенциальные XSS проблемы в поле '%s'"
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'январь'
|
- 'январь'
|
||||||
- 'февраль'
|
- 'февраль'
|
||||||
@@ -68,12 +79,12 @@ GRAV:
|
|||||||
- 'апрель'
|
- 'апрель'
|
||||||
- 'май'
|
- 'май'
|
||||||
- 'июнь'
|
- 'июнь'
|
||||||
- 'Июль'
|
- 'июль'
|
||||||
- 'Август'
|
- 'август'
|
||||||
- 'Сентябрь'
|
- 'сентябрь'
|
||||||
- 'Октябрь'
|
- 'октябрь'
|
||||||
- 'Ноябрь'
|
- 'ноябрь'
|
||||||
- 'Декабрь'
|
- 'декабрь'
|
||||||
DAYS_OF_THE_WEEK:
|
DAYS_OF_THE_WEEK:
|
||||||
- 'понедельник'
|
- 'понедельник'
|
||||||
- 'вторник'
|
- 'вторник'
|
||||||
@@ -82,6 +93,8 @@ GRAV:
|
|||||||
- 'пятница'
|
- 'пятница'
|
||||||
- 'суббота'
|
- 'суббота'
|
||||||
- 'воскресенье'
|
- 'воскресенье'
|
||||||
|
YES: "Да"
|
||||||
|
NO: "Нет"
|
||||||
CRON:
|
CRON:
|
||||||
EVERY: раз в
|
EVERY: раз в
|
||||||
EVERY_HOUR: раз в час
|
EVERY_HOUR: раз в час
|
||||||
|
|||||||
120
system/languages/si.yaml
Normal file
120
system/languages/si.yaml
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
---
|
||||||
|
GRAV:
|
||||||
|
FRONTMATTER_ERROR_PAGE: "---\nමාතෘකාව: %1$s\n---\n\n# දෝෂය: වලංගු නොවන ඉදිරිපස\n\nමාර්ගය: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
|
INFLECTOR_PLURALS:
|
||||||
|
'/([m|l])ouse$/i': '\1අයිස්'
|
||||||
|
'/(matr|vert|ind)ix|ex$/i': '\1අයිස්'
|
||||||
|
'/(?:([^f])fe|([lr])f)$/i': '\1\2වෙස්'
|
||||||
|
'/([ti])um$/i': '\1අ'
|
||||||
|
'/(buffal|tomat)o$/i': '\1ඕඑස්'
|
||||||
|
'/(bu)s$/i': '\1සෙස්'
|
||||||
|
INFLECTOR_SINGULAR:
|
||||||
|
'/(quiz)zes$/i': '\1'
|
||||||
|
'/^(ox)en/i': '\1'
|
||||||
|
'/(alias|status)es$/i': '\1'
|
||||||
|
'/([octop|vir])i$/i': '\1 අප'
|
||||||
|
'/(cris|ax|test)es$/i': '\1 වේ'
|
||||||
|
'/(o)es$/i': '\1'
|
||||||
|
'/(bus)es$/i': '\1'
|
||||||
|
'/([m|l])ice$/i': '\1 භාවිතා කරන්න'
|
||||||
|
'/(x|ch|ss|sh)es$/i': '\1'
|
||||||
|
'/(m)ovies$/i': '\1ඕවී'
|
||||||
|
'/(s)eries$/i': '\1මාලා'
|
||||||
|
'/(^analy)ses$/i': '\1සිස්'
|
||||||
|
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2සිස්'
|
||||||
|
'/([ti])a$/i': '\1ම්'
|
||||||
|
INFLECTOR_UNCOUNTABLE:
|
||||||
|
- 'උපකරණ'
|
||||||
|
- 'විස්තර'
|
||||||
|
- 'සහල්'
|
||||||
|
- 'මුදල'
|
||||||
|
- 'විශේෂ'
|
||||||
|
- 'මාලාවක්'
|
||||||
|
- 'මාළු'
|
||||||
|
- 'බැටළුවන්'
|
||||||
|
INFLECTOR_IRREGULAR:
|
||||||
|
'person': 'මහජන'
|
||||||
|
'man': 'මිනිසුන්'
|
||||||
|
'child': 'දරුවන්'
|
||||||
|
'sex': 'ලිංගිකත්වය'
|
||||||
|
'move': 'චලනය කරයි'
|
||||||
|
INFLECTOR_ORDINALS:
|
||||||
|
'first': 'ශාන්ත'
|
||||||
|
NICETIME:
|
||||||
|
NO_DATE_PROVIDED: දිනයක් සපයා නැත
|
||||||
|
BAD_DATE: නරක දිනය
|
||||||
|
AGO: පෙර
|
||||||
|
FROM_NOW: මෙතැන් සිට
|
||||||
|
JUST_NOW: මේ දැන්
|
||||||
|
SECOND: දෙවැනි
|
||||||
|
MINUTE: මිනිත්තුව
|
||||||
|
HOUR: පැය
|
||||||
|
DAY: දින
|
||||||
|
WEEK: සතිය
|
||||||
|
MONTH: මස
|
||||||
|
YEAR: වර්ෂය
|
||||||
|
DECADE: දශකය
|
||||||
|
SEC: තත්පර
|
||||||
|
MIN: මිනි
|
||||||
|
HR: පැය
|
||||||
|
YR: වසර
|
||||||
|
DEC: දෙසැ
|
||||||
|
SECOND_PLURAL: තත්පර
|
||||||
|
MINUTE_PLURAL: මිනිත්තු
|
||||||
|
HOUR_PLURAL: පැය
|
||||||
|
DAY_PLURAL: දින
|
||||||
|
WEEK_PLURAL: සති
|
||||||
|
MONTH_PLURAL: මාස
|
||||||
|
YEAR_PLURAL: වසර
|
||||||
|
DECADE_PLURAL: දශක
|
||||||
|
SEC_PLURAL: තත්පර
|
||||||
|
MIN_PLURAL: මිනිත්තු
|
||||||
|
HR_PLURAL: පැය
|
||||||
|
WK_PLURAL: සති
|
||||||
|
YR_PLURAL: වසර
|
||||||
|
DEC_PLURAL: දෙසැ
|
||||||
|
FORM:
|
||||||
|
VALIDATION_FAIL: '<b>වලංගු කිරීම අසාර්ථක විය:</b>'
|
||||||
|
INVALID_INPUT: 'වලංගු නොවන ආදානය'
|
||||||
|
MISSING_REQUIRED_FIELD: 'අවශ්ය ක්ෂේත්රය අස්ථානගත වී ඇත:'
|
||||||
|
XSS_ISSUES: "විභව XSS ගැටළු '%s' ක්ෂේත්රයේ අනාවරණය විය"
|
||||||
|
MONTHS_OF_THE_YEAR:
|
||||||
|
- 'ජනවාරි'
|
||||||
|
- 'පෙබරවාරි'
|
||||||
|
- 'මාර්තු'
|
||||||
|
- 'අප්රේල්'
|
||||||
|
- 'මැයි'
|
||||||
|
- 'ජූනි'
|
||||||
|
- 'ජුලි'
|
||||||
|
- 'අගෝස්තු'
|
||||||
|
- 'සැප්තැම්බර්'
|
||||||
|
- 'ඔක්තෝම්බර්'
|
||||||
|
- 'නොවැම්බර්'
|
||||||
|
- 'දෙසැම්බර්'
|
||||||
|
DAYS_OF_THE_WEEK:
|
||||||
|
- 'සඳුදා'
|
||||||
|
- 'අඟහරුවාදා'
|
||||||
|
- 'බදාදා'
|
||||||
|
- 'බ්රහස්පතින්දා'
|
||||||
|
- 'සිකුරාදා'
|
||||||
|
- 'සෙනසුරාදා'
|
||||||
|
- 'ඉරිදා'
|
||||||
|
YES: "ඔව්"
|
||||||
|
NO: "නැත"
|
||||||
|
CRON:
|
||||||
|
EVERY: සෑම
|
||||||
|
EVERY_HOUR: සෑම පැයකටම
|
||||||
|
EVERY_MINUTE: සෑම විනාඩියකටම
|
||||||
|
EVERY_DAY_OF_WEEK: සතියේ සෑම දිනකම
|
||||||
|
EVERY_DAY_OF_MONTH: මාසයේ සෑම දිනකම
|
||||||
|
EVERY_MONTH: සෑම මාසයකම
|
||||||
|
TEXT_PERIOD: සෑම <b />
|
||||||
|
TEXT_MINS: ' පැයට පසු විනාඩි <b /> කින්'
|
||||||
|
TEXT_TIME: ' <b />:<b />ට'
|
||||||
|
TEXT_DOW: ' <b />මත'
|
||||||
|
TEXT_MONTH: ' <b />'
|
||||||
|
TEXT_DOM: ' <b />මත'
|
||||||
|
ERROR1: ටැගය %s සහාය නොදක්වයි!
|
||||||
|
ERROR2: නරක මූලද්රව්ය සංඛ්යාව
|
||||||
|
ERROR3: jquery_element jqCron සැකසුම් වලට සැකසිය යුතුය
|
||||||
|
ERROR4: හඳුනා නොගත් ප්රකාශනය
|
||||||
@@ -101,8 +101,8 @@ GRAV:
|
|||||||
YR_PLURAL: rokov
|
YR_PLURAL: rokov
|
||||||
DEC_PLURAL: dekád
|
DEC_PLURAL: dekád
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Overenie zlyhalo:</b>
|
VALIDATION_FAIL: '<b>Overenie zlyhalo:</b>'
|
||||||
INVALID_INPUT: Neplatný vstup v
|
INVALID_INPUT: 'Neplatný vstup v'
|
||||||
MISSING_REQUIRED_FIELD: 'Chýba vyžadované pole:'
|
MISSING_REQUIRED_FIELD: 'Chýba vyžadované pole:'
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'Január'
|
- 'Január'
|
||||||
|
|||||||
@@ -1,6 +1,17 @@
|
|||||||
---
|
---
|
||||||
GRAV:
|
GRAV:
|
||||||
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# Napaka: Neveljavna Frontmatter\n\nPath: `%2$s`\n\n**%3$s ** \n\n```\n%4$s \n```"
|
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# Napaka: Neveljavna Frontmatter\n\nPath: `%2$s`\n\n**%3$s ** \n\n```\n%4$s \n```"
|
||||||
|
INFLECTOR_UNCOUNTABLE:
|
||||||
|
- 'oprema'
|
||||||
|
- 'informacija'
|
||||||
|
- 'riž'
|
||||||
|
- 'denar'
|
||||||
|
- 'vrste'
|
||||||
|
- 'serija'
|
||||||
|
- 'riba'
|
||||||
|
- 'ovca'
|
||||||
|
INFLECTOR_IRREGULAR:
|
||||||
|
'person': 'ljudje'
|
||||||
NICETIME:
|
NICETIME:
|
||||||
NO_DATE_PROVIDED: Datum ni na voljo
|
NO_DATE_PROVIDED: Datum ni na voljo
|
||||||
BAD_DATE: Neveljaven datum
|
BAD_DATE: Neveljaven datum
|
||||||
@@ -36,22 +47,22 @@ GRAV:
|
|||||||
YR_PLURAL: l
|
YR_PLURAL: l
|
||||||
DEC_PLURAL: des
|
DEC_PLURAL: des
|
||||||
FORM:
|
FORM:
|
||||||
VALIDATION_FAIL: <b>Preverjanje veljavnosti ni uspelo:</b>
|
VALIDATION_FAIL: '<b>Preverjanje veljavnosti ni uspelo:</b>'
|
||||||
INVALID_INPUT: Neveljaven vnos v
|
INVALID_INPUT: 'Neveljaven vnos v'
|
||||||
MISSING_REQUIRED_FIELD: 'Manjka obvezno polje:'
|
MISSING_REQUIRED_FIELD: 'Manjka obvezno polje:'
|
||||||
MONTHS_OF_THE_YEAR:
|
MONTHS_OF_THE_YEAR:
|
||||||
- 'Januar'
|
- 'Januar'
|
||||||
- 'Februar'
|
- 'Februar'
|
||||||
- 'Marec'
|
- 'Marec'
|
||||||
- 'April'
|
- 'april'
|
||||||
- 'Maj'
|
- 'Maj'
|
||||||
- 'Junij'
|
- 'Junij'
|
||||||
- 'Julij'
|
- 'Julij'
|
||||||
- 'Avgust'
|
- 'Avgust'
|
||||||
- 'September'
|
- 'september'
|
||||||
- 'Oktober'
|
- 'Oktober'
|
||||||
- 'November'
|
- 'november'
|
||||||
- 'December'
|
- 'december'
|
||||||
DAYS_OF_THE_WEEK:
|
DAYS_OF_THE_WEEK:
|
||||||
- 'Ponedeljek'
|
- 'Ponedeljek'
|
||||||
- 'Torek'
|
- 'Torek'
|
||||||
@@ -60,3 +71,15 @@ GRAV:
|
|||||||
- 'Petek'
|
- 'Petek'
|
||||||
- 'Sobota'
|
- 'Sobota'
|
||||||
- 'Nedelja'
|
- 'Nedelja'
|
||||||
|
YES: "Da"
|
||||||
|
NO: "Ne"
|
||||||
|
CRON:
|
||||||
|
EVERY: vsak
|
||||||
|
EVERY_HOUR: vsako uro
|
||||||
|
EVERY_MINUTE: vsako minuto
|
||||||
|
EVERY_DAY_OF_WEEK: vsak dan v tednu
|
||||||
|
EVERY_DAY_OF_MONTH: vsak dan v mesecu
|
||||||
|
EVERY_MONTH: vsak mesec
|
||||||
|
ERROR1: Oznaka %s ni podprta!
|
||||||
|
ERROR2: Napačno število elementov.
|
||||||
|
ERROR4: Neznan izraz
|
||||||
|
|||||||
147
system/languages/sr.yaml
Normal file
147
system/languages/sr.yaml
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
---
|
||||||
|
GRAV:
|
||||||
|
FRONTMATTER_ERROR_PAGE: "---\nнаслов: %1$s\n---\n\n# Грешка: неисправан Frontmatter\n\nПутања: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||||
|
INFLECTOR_PLURALS:
|
||||||
|
'/(quiz)$/i': '\1zes'
|
||||||
|
'/^(ox)$/i': '\1en'
|
||||||
|
'/([m|l])ouse$/i': '\1ice'
|
||||||
|
'/(matr|vert|ind)ix|ex$/i': '\1ices'
|
||||||
|
'/(x|ch|ss|sh)$/i': '\1es'
|
||||||
|
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||||
|
'/([^aeiouy]|qu)y$/i': '\1ies'
|
||||||
|
'/(hive)$/i': '\1s'
|
||||||
|
'/(?:([^f])fe|([lr])f)$/i': '\1\2ves'
|
||||||
|
'/sis$/i': 'ses'
|
||||||
|
'/([ti])um$/i': '\1a'
|
||||||
|
'/(buffal|tomat)o$/i': '\1oes'
|
||||||
|
'/(bu)s$/i': '\1ses'
|
||||||
|
'/(alias|status)/i': '\1es'
|
||||||
|
'/(octop|vir)us$/i': '\1i'
|
||||||
|
'/(ax|test)is$/i': '\1es'
|
||||||
|
'/s$/i': 's'
|
||||||
|
'/$/': 's'
|
||||||
|
INFLECTOR_SINGULAR:
|
||||||
|
'/(quiz)zes$/i': '\1'
|
||||||
|
'/(matr)ices$/i': '\1ix'
|
||||||
|
'/(vert|ind)ices$/i': '\1ex'
|
||||||
|
'/^(ox)en/i': '\1'
|
||||||
|
'/(alias|status)es$/i': '\1'
|
||||||
|
'/([octop|vir])i$/i': '\1us'
|
||||||
|
'/(cris|ax|test)es$/i': '\1is'
|
||||||
|
'/(shoe)s$/i': '\1'
|
||||||
|
'/(o)es$/i': '\1'
|
||||||
|
'/(bus)es$/i': '\1'
|
||||||
|
'/([m|l])ice$/i': '\1ouse'
|
||||||
|
'/(x|ch|ss|sh)es$/i': '\1'
|
||||||
|
'/(m)ovies$/i': '\1ovie'
|
||||||
|
'/(s)eries$/i': '\1eries'
|
||||||
|
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||||
|
'/([lr])ves$/i': '\1f'
|
||||||
|
'/(tive)s$/i': '\1'
|
||||||
|
'/(hive)s$/i': '\1'
|
||||||
|
'/([^f])ves$/i': '\1fe'
|
||||||
|
'/(^analy)ses$/i': '\1sis'
|
||||||
|
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2sis'
|
||||||
|
'/([ti])a$/i': '\1um'
|
||||||
|
'/(n)ews$/i': '\1ews'
|
||||||
|
INFLECTOR_UNCOUNTABLE:
|
||||||
|
- 'опрема'
|
||||||
|
- 'информација'
|
||||||
|
- 'пиринач'
|
||||||
|
- 'новац'
|
||||||
|
- 'врсте'
|
||||||
|
- 'серије'
|
||||||
|
- 'риба'
|
||||||
|
- 'овца'
|
||||||
|
INFLECTOR_IRREGULAR:
|
||||||
|
'person': 'особе'
|
||||||
|
'man': 'људи'
|
||||||
|
'child': 'деца'
|
||||||
|
'sex': 'полови'
|
||||||
|
'move': 'помери'
|
||||||
|
INFLECTOR_ORDINALS:
|
||||||
|
'default': 'ти'
|
||||||
|
'first': 'први'
|
||||||
|
'second': 'други'
|
||||||
|
'third': 'трећи'
|
||||||
|
NICETIME:
|
||||||
|
NO_DATE_PROVIDED: Нема датума
|
||||||
|
BAD_DATE: Погрешан датум
|
||||||
|
AGO: од пре
|
||||||
|
FROM_NOW: од сада
|
||||||
|
JUST_NOW: управо сада
|
||||||
|
SECOND: секунда
|
||||||
|
MINUTE: минута
|
||||||
|
HOUR: сат
|
||||||
|
DAY: дан
|
||||||
|
WEEK: недеља
|
||||||
|
MONTH: месец
|
||||||
|
YEAR: година
|
||||||
|
DECADE: декада
|
||||||
|
SEC: сек
|
||||||
|
MIN: мин
|
||||||
|
HR: сат
|
||||||
|
WK: нед
|
||||||
|
MO: мес
|
||||||
|
YR: год
|
||||||
|
DEC: дек
|
||||||
|
SECOND_PLURAL: секунди
|
||||||
|
MINUTE_PLURAL: минута
|
||||||
|
HOUR_PLURAL: сати
|
||||||
|
DAY_PLURAL: дана
|
||||||
|
WEEK_PLURAL: недеља
|
||||||
|
MONTH_PLURAL: месеци
|
||||||
|
YEAR_PLURAL: године(а)
|
||||||
|
DECADE_PLURAL: декаде(а)
|
||||||
|
SEC_PLURAL: сек
|
||||||
|
MIN_PLURAL: мин
|
||||||
|
HR_PLURAL: сати
|
||||||
|
WK_PLURAL: недеља
|
||||||
|
MO_PLURAL: месеци
|
||||||
|
YR_PLURAL: година
|
||||||
|
DEC_PLURAL: декада
|
||||||
|
FORM:
|
||||||
|
VALIDATION_FAIL: '<b>Провера неуспела:</b>'
|
||||||
|
INVALID_INPUT: 'Неисправан унос у'
|
||||||
|
MISSING_REQUIRED_FIELD: 'Недостаје обавезн поље:'
|
||||||
|
XSS_ISSUES: "Потенцијална грешка у XSS-у детектована у пољу '%s' "
|
||||||
|
MONTHS_OF_THE_YEAR:
|
||||||
|
- 'Јануар'
|
||||||
|
- 'Фебруар'
|
||||||
|
- 'Март'
|
||||||
|
- 'Април'
|
||||||
|
- 'Мај'
|
||||||
|
- 'Јуни'
|
||||||
|
- 'Јули'
|
||||||
|
- 'Август'
|
||||||
|
- 'Септембар'
|
||||||
|
- 'Октобар'
|
||||||
|
- 'Новембар'
|
||||||
|
- 'Децембар'
|
||||||
|
DAYS_OF_THE_WEEK:
|
||||||
|
- 'Понедељак'
|
||||||
|
- 'Уторак'
|
||||||
|
- 'Среда'
|
||||||
|
- 'Четвртак'
|
||||||
|
- 'Петак'
|
||||||
|
- 'Субота'
|
||||||
|
- 'Недеља'
|
||||||
|
YES: "Да"
|
||||||
|
NO: "Не"
|
||||||
|
CRON:
|
||||||
|
EVERY: сваки
|
||||||
|
EVERY_HOUR: сваки сат
|
||||||
|
EVERY_MINUTE: сваки минут
|
||||||
|
EVERY_DAY_OF_WEEK: сваки дан у недељи
|
||||||
|
EVERY_DAY_OF_MONTH: сваки дан у месецу
|
||||||
|
EVERY_MONTH: сваки месец
|
||||||
|
TEXT_PERIOD: Сваки <b />
|
||||||
|
TEXT_MINS: ' у <b /> минути(а) прошлог сата'
|
||||||
|
TEXT_TIME: ' у <b />:<b />'
|
||||||
|
TEXT_DOW: ' на <b />'
|
||||||
|
TEXT_MONTH: ' од <b />'
|
||||||
|
TEXT_DOM: ' на <b />'
|
||||||
|
ERROR1: Таг %s није подржан!
|
||||||
|
ERROR2: Погрешан број елемената
|
||||||
|
ERROR3: јquery_element би требао да буде постављен у jqCron подешавању
|
||||||
|
ERROR4: Непрепознат израз
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user