mirror of
https://github.com/monstra-cms/monstra.git
synced 2025-08-04 20:27:40 +02:00
Compare commits
801 Commits
v2.2.1
...
monstra-mu
Author | SHA1 | Date | |
---|---|---|---|
|
dc8ef1c489 | ||
|
5f1746d62e | ||
|
9c48c41e55 | ||
|
a088fd9772 | ||
|
d6221b3f50 | ||
|
a39d78d725 | ||
|
dfffa3d984 | ||
|
79f42c2f01 | ||
|
5acdcbd32b | ||
|
57f798e2cb | ||
|
b60ffab09f | ||
|
01a9112966 | ||
|
2dd6faceed | ||
|
ac8ba8a6dc | ||
|
19e0e36eec | ||
|
009e32e635 | ||
|
7ff4ff29d9 | ||
|
31b103d9d3 | ||
|
6b7f1fce17 | ||
|
a4af90a72e | ||
|
eaccc1056d | ||
|
728f6509a6 | ||
|
169803c85a | ||
|
3fddfa8d06 | ||
|
5d696d9a47 | ||
|
1c43b78d71 | ||
|
d58e1c2f92 | ||
|
ab471b9555 | ||
|
9f5516233d | ||
|
f8fa3f966b | ||
|
7c548aa5b4 | ||
|
3592d3342a | ||
|
4743f4e6e1 | ||
|
55324b20a0 | ||
|
c11ee609bc | ||
|
43655828c9 | ||
|
19afcbd9e8 | ||
|
2643a33820 | ||
|
4fb4de67d4 | ||
|
b9d3292899 | ||
|
3470c28c03 | ||
|
3e7f381fc0 | ||
|
392d8c253f | ||
|
c7133368d1 | ||
|
c5534d26ad | ||
|
17569174aa | ||
|
90057e13d0 | ||
|
5abc71089e | ||
|
a078ba2ad1 | ||
|
5bbb9a7871 | ||
|
ad5d92bbff | ||
|
00f4c551a1 | ||
|
1d2c4cd068 | ||
|
0414e887e1 | ||
|
49347e80b6 | ||
|
1bb101edef | ||
|
918f0470e0 | ||
|
aaae5c723f | ||
|
ed9490042d | ||
|
1ef144ba21 | ||
|
970ce69cfa | ||
|
33eedc9481 | ||
|
5bf01e01ca | ||
|
8c66bac570 | ||
|
cd6cd24ed2 | ||
|
d293b649b8 | ||
|
a27564c317 | ||
|
c713cf40d2 | ||
|
abdde2411a | ||
|
d9ee6c89d9 | ||
|
f871958e51 | ||
|
552c84c7b2 | ||
|
b9408b3522 | ||
|
c4895264de | ||
|
3834f931d9 | ||
|
dba81f723e | ||
|
c2e00b3f81 | ||
|
7a89ba8a9b | ||
|
45f6c4952e | ||
|
b758b6e503 | ||
|
2b3bbd247b | ||
|
3c79bc2a45 | ||
|
29d11febfd | ||
|
33d8024866 | ||
|
9e92cc5372 | ||
|
cc3ca4476f | ||
|
7dc755db99 | ||
|
bacfb156f4 | ||
|
d469da3b2d | ||
|
de90f501b6 | ||
|
11ec340a15 | ||
|
5c8b3a2da1 | ||
|
4eaa1165b0 | ||
|
0285dabee3 | ||
|
a8000d167d | ||
|
2a35099a83 | ||
|
fcf349d0a1 | ||
|
44f1fd2e0a | ||
|
acb88579c8 | ||
|
e18c4912b5 | ||
|
b7ce4670ec | ||
|
ff18aba1b5 | ||
|
bf7e12b16d | ||
|
418f89f64d | ||
|
b1455d63af | ||
|
7089970cf6 | ||
|
91dec98620 | ||
|
6d682b3d7f | ||
|
91d769a1c4 | ||
|
3a58e39f5c | ||
|
fc685e0514 | ||
|
f15766ee86 | ||
|
e78cce729b | ||
|
fc0a4cf3b3 | ||
|
8a905b9481 | ||
|
fb5e278073 | ||
|
dc6a689013 | ||
|
b91e746c09 | ||
|
6be93036ae | ||
|
ac1a4b4a6c | ||
|
cbacd6db91 | ||
|
f5566ef2b4 | ||
|
a2596a13a8 | ||
|
054cb8ec65 | ||
|
99a22cf36e | ||
|
daf306bcb3 | ||
|
b386055643 | ||
|
d7510e699e | ||
|
b9fb53820e | ||
|
b6be58ba07 | ||
|
947ebb4a3d | ||
|
e816be56a4 | ||
|
531e81b2ac | ||
|
7357d1c26a | ||
|
fd3a16d72f | ||
|
b697274f86 | ||
|
a01ef33951 | ||
|
a17ee5f09c | ||
|
635eb98c4e | ||
|
ea574a1d40 | ||
|
a115a51fd9 | ||
|
23360d4c42 | ||
|
58bedf57e7 | ||
|
b52ff6abb7 | ||
|
745c06df7f | ||
|
a62a1e7ef5 | ||
|
9741538fb2 | ||
|
48b7be3ecc | ||
|
fe4caf0802 | ||
|
30f5a5969f | ||
|
47af0a0d4b | ||
|
b39381990a | ||
|
1a335cfaad | ||
|
ab647fdce5 | ||
|
a3c75d72fb | ||
|
c60cd592c4 | ||
|
a36b72f32f | ||
|
4803e3285e | ||
|
312d79c2c9 | ||
|
5bea8e2b72 | ||
|
b5a9b3f49a | ||
|
a9c720659d | ||
|
ae587082ac | ||
|
ee168a2aa0 | ||
|
144a3e7cc3 | ||
|
295e2cb873 | ||
|
f2b9975eca | ||
|
12d4be693b | ||
|
616e3a3608 | ||
|
34cade84cf | ||
|
a898a84739 | ||
|
6a7c3a3462 | ||
|
eb5f918f5d | ||
|
6c68b1023c | ||
|
9cdf1a3d71 | ||
|
cec57dc108 | ||
|
bd3df9598a | ||
|
798c121e51 | ||
|
4f2fb1a319 | ||
|
79e8c94468 | ||
|
de4b0eff15 | ||
|
0fa5c3c91d | ||
|
ab69a6128b | ||
|
9981219800 | ||
|
cd2b94c7cc | ||
|
926b99b2fa | ||
|
eeffcca348 | ||
|
1f3ed549d5 | ||
|
fea6350416 | ||
|
01cef7e8e9 | ||
|
efb026013e | ||
|
56562942cd | ||
|
8b63ae4c39 | ||
|
a98ae9bbc2 | ||
|
431337e138 | ||
|
7a9aa577dd | ||
|
9ea7b09e15 | ||
|
c3a1a33c73 | ||
|
44e3f5f31c | ||
|
4e2f2b6528 | ||
|
9594f0d48b | ||
|
8ea46eac2c | ||
|
961f03a7a4 | ||
|
a23885d619 | ||
|
71d0244a01 | ||
|
90f8020d92 | ||
|
369eb76f09 | ||
|
5e1a5f9150 | ||
|
e4ed4a3e00 | ||
|
8c20dd5155 | ||
|
80ea7dbc3a | ||
|
5f79f19542 | ||
|
3624af6371 | ||
|
11eaf2702a | ||
|
69b23097e1 | ||
|
66b331c8a6 | ||
|
faad94b51f | ||
|
92afccf4f8 | ||
|
9d48963513 | ||
|
43925eaf54 | ||
|
80fcdb20f9 | ||
|
b71b0a422a | ||
|
2e51c5ecf9 | ||
|
253cb63630 | ||
|
2070d0ab32 | ||
|
f84ce335c7 | ||
|
507142df0a | ||
|
fa7fdfce56 | ||
|
c462909f0d | ||
|
de3ad26ece | ||
|
84d1fffc71 | ||
|
6b55dd36e5 | ||
|
d046e53ef9 | ||
|
2031d25253 | ||
|
57544b6740 | ||
|
c5b8ad8c3d | ||
|
059ad82591 | ||
|
febd1e7e71 | ||
|
616c8a18af | ||
|
e442d4debd | ||
|
5a876fddb1 | ||
|
6658500691 | ||
|
4756be2309 | ||
|
16dbbcdb16 | ||
|
5c1ea1f819 | ||
|
b2ca81e9d6 | ||
|
dfb4c01ffd | ||
|
45cb0e69d8 | ||
|
ca43003293 | ||
|
4bddfae60f | ||
|
314996be6b | ||
|
32472a1a0e | ||
|
ec6e4bba27 | ||
|
438a81af8f | ||
|
e51ed4c587 | ||
|
a8c163a535 | ||
|
0102715cf3 | ||
|
d68a4c5e28 | ||
|
9c54a443d9 | ||
|
2178b7d406 | ||
|
34d4482911 | ||
|
a0719eac94 | ||
|
32e2890b37 | ||
|
e449381555 | ||
|
ac3c4e6ac8 | ||
|
06981a768e | ||
|
e5af6b060a | ||
|
f0899e9358 | ||
|
e3bc818348 | ||
|
b32452a815 | ||
|
a242cd8804 | ||
|
9fc9843639 | ||
|
190bbe05b1 | ||
|
b0c19f7c81 | ||
|
cae9c77d0a | ||
|
8b58e1536f | ||
|
3339ad0ce5 | ||
|
c003072a5d | ||
|
710f86ffc6 | ||
|
c1a20a5f6e | ||
|
207a13904d | ||
|
5942c29fe9 | ||
|
2a3d9720d1 | ||
|
163914b579 | ||
|
41076ede4a | ||
|
44451af610 | ||
|
e3d0da1047 | ||
|
e436317d7e | ||
|
3b7288cbdb | ||
|
9896ea7c31 | ||
|
5e2984e448 | ||
|
82a516d431 | ||
|
f7bc03ef91 | ||
|
7ca3946f8a | ||
|
80582f2c9f | ||
|
3e4bd66e16 | ||
|
3bd33ab305 | ||
|
608c987e6d | ||
|
582f49418e | ||
|
1b77c928f4 | ||
|
f2d0bd2745 | ||
|
1085953b3b | ||
|
8ac3b92248 | ||
|
37ec41199d | ||
|
9ea4477bd8 | ||
|
81ffb867be | ||
|
eea5606985 | ||
|
c01e03e139 | ||
|
071595fd61 | ||
|
847af54c11 | ||
|
308483f167 | ||
|
1a5d05bfaa | ||
|
e17bc2454d | ||
|
e662a9937b | ||
|
d8a9c746b4 | ||
|
0a08b4131d | ||
|
ba78201812 | ||
|
36bb23db5b | ||
|
6713282196 | ||
|
bcf3d58c14 | ||
|
3f7e3e5b98 | ||
|
baefbef8ab | ||
|
f5ff259344 | ||
|
8380ec5b7d | ||
|
44c274cf8c | ||
|
bcac217db3 | ||
|
a1c7aa1d46 | ||
|
594d6fd51d | ||
|
9a6329a6cd | ||
|
1350491545 | ||
|
61317e99fe | ||
|
46c2d5e93d | ||
|
35029b1e24 | ||
|
8a107d190c | ||
|
ff26fc105c | ||
|
2e19f5c1a7 | ||
|
0bbf9544da | ||
|
27cf070816 | ||
|
66eb4fd120 | ||
|
3aad8db409 | ||
|
6d703b1286 | ||
|
948bf57a1c | ||
|
ef63bda6da | ||
|
87135d00ae | ||
|
350dd8ed8b | ||
|
b8ebd53272 | ||
|
358c7fdefe | ||
|
062460895d | ||
|
7113f09937 | ||
|
918820da3e | ||
|
8f0e576f99 | ||
|
eecf2e85a4 | ||
|
933c1df4f6 | ||
|
28ec930671 | ||
|
e74111fb7d | ||
|
551ce3be6b | ||
|
ceb19b2e83 | ||
|
38efadd6bf | ||
|
97dc6a8f69 | ||
|
1e3689204e | ||
|
fee8dc34e9 | ||
|
a5dbfaee85 | ||
|
e72dcc3a94 | ||
|
106c7b2c56 | ||
|
6749608a17 | ||
|
4b381efb10 | ||
|
8d16632454 | ||
|
67bf91a872 | ||
|
482e865358 | ||
|
fb906708b9 | ||
|
76c71c8174 | ||
|
6d20d97c86 | ||
|
2ba945313f | ||
|
52192f9dea | ||
|
054aa46635 | ||
|
cff06f5564 | ||
|
14dfc59b9e | ||
|
03045d03ae | ||
|
5d8a4abcb9 | ||
|
3ad2cf7a56 | ||
|
474fddd803 | ||
|
a1942f55dc | ||
|
38e6961a91 | ||
|
73d78f0585 | ||
|
bd84514fce | ||
|
9d66c5ca32 | ||
|
54660eb5c1 | ||
|
ea3f059a41 | ||
|
1e2fe718c1 | ||
|
aaba7cef27 | ||
|
2afaba814b | ||
|
2a465bab1b | ||
|
fff6890205 | ||
|
9a5f0a99ba | ||
|
2c4d1c36f9 | ||
|
7b397ddfaa | ||
|
0cecc2e9a6 | ||
|
a8b2725721 | ||
|
274e9a1849 | ||
|
a76207ae96 | ||
|
0bb9915708 | ||
|
f7a716cb76 | ||
|
dfb0b41467 | ||
|
ad5c1802d0 | ||
|
390c5a1354 | ||
|
3f4a04e03a | ||
|
669289af32 | ||
|
d4f57e35d3 | ||
|
cc7d270bfb | ||
|
caecc6df07 | ||
|
0f357ec80b | ||
|
57c43319f7 | ||
|
00ac33e273 | ||
|
3947d3560d | ||
|
4907964484 | ||
|
38c8a3340c | ||
|
7532ad1127 | ||
|
cc613247f3 | ||
|
92064df622 | ||
|
fb121a88d1 | ||
|
abc04ee218 | ||
|
0faba762ba | ||
|
fed3aa5664 | ||
|
6e3a2a63e7 | ||
|
c119c9f84a | ||
|
3eae0d2114 | ||
|
955ba2a9ca | ||
|
25bee212a8 | ||
|
e5f319a961 | ||
|
251acd4949 | ||
|
bc429ac098 | ||
|
a76590930f | ||
|
2f873985a8 | ||
|
ffc0bf62c2 | ||
|
678573b91a | ||
|
83abaae0af | ||
|
bd310d6c7c | ||
|
9fabc679b4 | ||
|
5e06c10ef9 | ||
|
fa00499d93 | ||
|
ed323cfe7b | ||
|
5dc4c65f76 | ||
|
3dfef0e3a3 | ||
|
87a55ed5bb | ||
|
40afdaccc7 | ||
|
290ab4bec2 | ||
|
14baa34888 | ||
|
5c03f0cfab | ||
|
f9ec0b9e18 | ||
|
d2ab853939 | ||
|
fae12cefda | ||
|
1dbd208832 | ||
|
2b1e28a0d5 | ||
|
2c268fc873 | ||
|
15535a460c | ||
|
c2a2dba621 | ||
|
f340fcd3a2 | ||
|
7f71f3e3bc | ||
|
0170c3015e | ||
|
141df2033d | ||
|
a8c9f864e5 | ||
|
8b5bdd266f | ||
|
97a5dcf317 | ||
|
e78f59126a | ||
|
81b070322e | ||
|
aabbb4461e | ||
|
e08c17df4b | ||
|
01be9f66e4 | ||
|
4381179378 | ||
|
015aff3cb3 | ||
|
fb44416902 | ||
|
6721c7829f | ||
|
df745f597c | ||
|
95a791e871 | ||
|
7196ac5067 | ||
|
1db7253e63 | ||
|
1998674217 | ||
|
d6e269a7fa | ||
|
bd1b9d24d6 | ||
|
1c42312010 | ||
|
31e0616a42 | ||
|
b3767f9f59 | ||
|
c68ac3f03a | ||
|
e8f79e99b5 | ||
|
5433a17aa5 | ||
|
0ab72c4208 | ||
|
e71bb980a5 | ||
|
7c0a4d7a50 | ||
|
ca65abd10c | ||
|
26f1abd717 | ||
|
281894d08a | ||
|
b2f3d3d526 | ||
|
1bc19bc850 | ||
|
73b20836c8 | ||
|
aef599de95 | ||
|
0fcae326cb | ||
|
6d38fb9c39 | ||
|
64d13302d5 | ||
|
cc9ce84648 | ||
|
9d6d3dec95 | ||
|
365dbafcc9 | ||
|
da4e3b60c0 | ||
|
ed1edc32db | ||
|
dbb3db8e6b | ||
|
27d55c2e51 | ||
|
2bc94dbe6a | ||
|
d3b00d894b | ||
|
5a142a2353 | ||
|
88b244a6df | ||
|
1fd4892969 | ||
|
a48a587fcd | ||
|
30f5aae0be | ||
|
14d7d93373 | ||
|
4f92cb32c2 | ||
|
1e3e3ce8b3 | ||
|
e3c80959f8 | ||
|
b36a30c4c3 | ||
|
7f8833286c | ||
|
3bfee0107d | ||
|
9d263cb2c9 | ||
|
01a1b5d62d | ||
|
1286de90ae | ||
|
b6de5a3261 | ||
|
5abc7c89db | ||
|
32165e0b18 | ||
|
bdb27de2f1 | ||
|
70f3338470 | ||
|
f82f677f79 | ||
|
a8a425bec1 | ||
|
4bb991ebe8 | ||
|
2c87b85daa | ||
|
fabf51c624 | ||
|
5655dd70a8 | ||
|
4d7383637a | ||
|
8ee7c234e1 | ||
|
b757c19778 | ||
|
2574431dd8 | ||
|
b43422f090 | ||
|
450a7f3c2f | ||
|
79f0ef2701 | ||
|
ce14f9b241 | ||
|
843b460614 | ||
|
15b089f043 | ||
|
2baee12915 | ||
|
1d13ebe490 | ||
|
dee1b7ba75 | ||
|
469a015b8b | ||
|
44860b5cba | ||
|
dd2e241207 | ||
|
986353aa88 | ||
|
5b4a0c3bbf | ||
|
e60fb9921e | ||
|
5cb23c76c3 | ||
|
02fa169760 | ||
|
3d83dc775f | ||
|
432942abf8 | ||
|
29d506a862 | ||
|
83f7be1c7d | ||
|
bbc74df954 | ||
|
fbb65d4568 | ||
|
543b8ae883 | ||
|
51e2cd0a45 | ||
|
aa3d785b97 | ||
|
cd40c09496 | ||
|
7c0fcf42cf | ||
|
a32056db45 | ||
|
de0c1da61c | ||
|
8b0ba10a5a | ||
|
8d681709d2 | ||
|
7f0cdeba25 | ||
|
f4d9b9c53d | ||
|
7b8949dc2b | ||
|
108581e4ef | ||
|
83264e41f3 | ||
|
79f4abe6bd | ||
|
9da99040e1 | ||
|
c3fe4d16bc | ||
|
c1a523acf6 | ||
|
03653831c8 | ||
|
fb12bc8d85 | ||
|
6bbf1ffd51 | ||
|
0c118fb984 | ||
|
b33b85860f | ||
|
d1ef0e47f9 | ||
|
5466099cae | ||
|
2df64961e6 | ||
|
d01a5e36fb | ||
|
97b9982ba0 | ||
|
cac3aeb813 | ||
|
7b24e315b7 | ||
|
73abb00785 | ||
|
4d16d07b2c | ||
|
54be2aa7d0 | ||
|
42e807db22 | ||
|
76f216f516 | ||
|
5def336ff9 | ||
|
b90f3ec00d | ||
|
e58399298f | ||
|
e31c081732 | ||
|
588f67b2e9 | ||
|
e3a623b31f | ||
|
8cacd03c40 | ||
|
5ea80e31e0 | ||
|
83f80306d3 | ||
|
bfc41e03ea | ||
|
7241410c2d | ||
|
8284902d57 | ||
|
791e73c1b6 | ||
|
80d1439471 | ||
|
197cd7afde | ||
|
326a846be3 | ||
|
97542ada1b | ||
|
db5e6b7868 | ||
|
81ff2288b9 | ||
|
cd0d8296a5 | ||
|
03e5fc320c | ||
|
b29abf8da1 | ||
|
6f55f9238b | ||
|
ad870b2120 | ||
|
d9ea1c3d7c | ||
|
6531d3ee87 | ||
|
c7935e6636 | ||
|
a33d1a39d9 | ||
|
cbaa84f50e | ||
|
339413581d | ||
|
7696d90752 | ||
|
c83bb55df3 | ||
|
e76cd74d5b | ||
|
099b206e66 | ||
|
10a6b56b34 | ||
|
8e83ca5bd1 | ||
|
524052b4bf | ||
|
f4eaded4f3 | ||
|
2efff484fc | ||
|
b134abb96e | ||
|
1a1bfabda0 | ||
|
a8ea2d4e02 | ||
|
ce571b6ef3 | ||
|
ac3eeb1508 | ||
|
e9691d6b71 | ||
|
7734822789 | ||
|
75af5452bc | ||
|
c9019ca5fa | ||
|
ee8e1abfd4 | ||
|
6b576be9a5 | ||
|
e823494ab5 | ||
|
f7f3b91f46 | ||
|
0c90ab6bfe | ||
|
35b75e9027 | ||
|
2d5eb31569 | ||
|
146e94c1ac | ||
|
e7bd1d284a | ||
|
b0b62f5444 | ||
|
5d430aa2ee | ||
|
93481f78cf | ||
|
2dc3560f08 | ||
|
8808a47dc7 | ||
|
d5550aa245 | ||
|
db0f5eda80 | ||
|
7947bd3f05 | ||
|
2c3d224e62 | ||
|
2fbb4c30c3 | ||
|
0dfc0e5951 | ||
|
fc4d4cde4f | ||
|
b23f2b9c5a | ||
|
4f35153ac2 | ||
|
82f02a7ab5 | ||
|
16975a3062 | ||
|
9b4ff3e2e3 | ||
|
798f558558 | ||
|
033d66a81a | ||
|
f311163ef4 | ||
|
8947295b83 | ||
|
fccf7b3c63 | ||
|
98c618dbaf | ||
|
4ae5fe6ede | ||
|
230b397530 | ||
|
fc2183b970 | ||
|
25fe85c8f1 | ||
|
c554b42f17 | ||
|
988da91526 | ||
|
d1257fb00b | ||
|
31ec9de178 | ||
|
05a9ff440f | ||
|
b54cac24b1 | ||
|
950b816ca6 | ||
|
dc0c47f5fa | ||
|
dbefe506f0 | ||
|
454b328442 | ||
|
52353d79ef | ||
|
6dcc5ffac8 | ||
|
f73aa53e40 | ||
|
07a8e823f8 | ||
|
489f7017d1 | ||
|
b2ef78b556 | ||
|
d1a5a9c0e2 | ||
|
eaeff17cb9 | ||
|
9e2a7bc23b | ||
|
d1c4f58c2e | ||
|
53c079f00a | ||
|
b23bb4b218 | ||
|
5491848f29 | ||
|
2548103a77 | ||
|
c396744e64 | ||
|
a6156db3a9 | ||
|
ad965bbcb9 | ||
|
2a8babb4f8 | ||
|
a8c582c302 | ||
|
31c661a1e8 | ||
|
a5c197fa99 | ||
|
09addce76e | ||
|
6c280ef102 | ||
|
1623d2b1fb | ||
|
2cabdf2864 | ||
|
397218d9e6 | ||
|
1eb7991f36 | ||
|
bae207e053 | ||
|
4c3dcbcc36 | ||
|
74baf298c5 | ||
|
9f8d7f5198 | ||
|
8f60502a0e | ||
|
d79b092542 | ||
|
4d85666c18 | ||
|
faf95e268e | ||
|
1d69c31aca | ||
|
ca2bd3df8a | ||
|
49185659f6 | ||
|
d9a91f514f | ||
|
5371f9f5db | ||
|
df85b392b8 | ||
|
af9432be1a | ||
|
7e4b4cf9d8 | ||
|
70e5f13649 | ||
|
09c8deed7f | ||
|
a5118781e2 | ||
|
f1ebf0fcc8 | ||
|
e2175d6d0f | ||
|
3854ad3bb5 | ||
|
276c429070 | ||
|
34e79a661c | ||
|
9e422f259d | ||
|
21aba2e8be | ||
|
ac1e309b99 | ||
|
c47ed55eb8 | ||
|
20473439c0 | ||
|
1a4622deb1 | ||
|
daaac9038a | ||
|
47ef2a091e | ||
|
208025b7c8 | ||
|
408a344bad | ||
|
6a63c2da9d | ||
|
bd216f4581 | ||
|
2a034bd1ed | ||
|
eecbcbc4ea | ||
|
e6ffd0130e | ||
|
e0b21a9a3f | ||
|
1e7120be12 | ||
|
4704926a64 | ||
|
8f930f8c6d | ||
|
52465c5cf4 | ||
|
bb8ccb57b7 | ||
|
bf0e5a0f3c | ||
|
ed03e383e0 | ||
|
0566c705b5 | ||
|
c90badf68c | ||
|
d05d7e77b9 | ||
|
5219b4e1fc | ||
|
82c1f97b7d | ||
|
5bbfb1880b | ||
|
13556f2e7d | ||
|
a72c03a7c7 | ||
|
27d78e32ff | ||
|
954b19a064 | ||
|
6abf4ded20 | ||
|
20e2fe9a99 | ||
|
8788146d39 | ||
|
8a8e35cfab | ||
|
75a3df1bd7 | ||
|
7ade902802 | ||
|
246e5519b9 | ||
|
1839a71bbd | ||
|
31f4dd3edc | ||
|
25c33271a6 | ||
|
cc070065a9 | ||
|
28b54e8adf | ||
|
63b2bf2255 | ||
|
2c34eb68d4 | ||
|
cd160deff0 | ||
|
3e47ca02f3 | ||
|
de50eb52dc | ||
|
e8c599f33f | ||
|
86312eb270 | ||
|
48a62e5011 | ||
|
ebda1cb7ba | ||
|
8637f7240b | ||
|
d2ba3e0dc7 | ||
|
14b9fa89a5 | ||
|
6f4fb89839 | ||
|
2fcf8b6c42 | ||
|
696d7d35bb | ||
|
8deb6e8cca |
10
.htaccess
10
.htaccess
@@ -19,8 +19,16 @@ Options -Indexes
|
||||
# Setting rewrite rules.
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine on
|
||||
|
||||
# Update code bellow for SEO improvements
|
||||
# RewriteCond %{HTTP_HOST} ^www.example.org [NC]
|
||||
# RewriteRule ^(.*)$ http://example.org/$1 [R=301,L]
|
||||
|
||||
RewriteBase /%siteurlhere%/
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteRule ^(.*)$ index.php [QSA,L]
|
||||
</IfModule>
|
||||
|
||||
# Update code bellow for SEO improvements
|
||||
# Redirect 301 /home http://example.org/
|
||||
</IfModule>
|
||||
|
@@ -1,3 +1,96 @@
|
||||
Monstra 3.0.1, 2014-08-10
|
||||
------------------------
|
||||
- Minimum php is 5.3
|
||||
- Themes Plugin: Imposible to create new CSS - fixed
|
||||
- Themes Plugin: js and css counter does not recalculate - fixed
|
||||
- Error in Monstra Notifications - fixed
|
||||
- Updated plugins url from plugins.monstra.org to monstra.org/download/plugins
|
||||
|
||||
Monstra 3.0.0, 2014-08-01
|
||||
------------------------
|
||||
- Mobile Ready! Monstra fully responsive for mobile devices, tablets, and normal computer screens.
|
||||
- Twitter Bootstrap updated to 3.1.1
|
||||
- Idiorm updated to 1.4.1
|
||||
- jQuery updated to 2.1.0
|
||||
- Admin: New Modern User Interface
|
||||
- Site: New default theme
|
||||
- Layout fixes according to World Wide Web Consortium (W3C) Standards
|
||||
- Prefetch DNS to reduce look up times
|
||||
- Files Manager: added ability to create & rename directories.
|
||||
- Files Manager: Maximum upload file size message - added.
|
||||
- Files Manager: Bootstrap fileinput.js updated to 3.0.0
|
||||
- Files Manager: File Info Popup
|
||||
- Backup: Restore Site from Backup added
|
||||
- Plugins Manager: Uploading new plugins via the admin panel added
|
||||
- Plugins Manager: Read plugin help(README.MD) ability added.
|
||||
- Responsive Chocolat Lightbox instead of TB Lightbox
|
||||
- Blog Plugin as a part of Monstra CMS
|
||||
- CodeMirror Plugin as a part of Monstra CMS
|
||||
- Markdown Plugin as a part of Monstra CMS
|
||||
- MarkItUp Color Pallete fixes
|
||||
- Site Url without trailing slashes
|
||||
- Admin Help Section - added.
|
||||
- Pages Plugin: tags field added.
|
||||
- Pages Plugin: Meta Title added.
|
||||
- Sitemap Errors Fixes.
|
||||
- Monstra automatically renames files - fixed
|
||||
- Monstra Dashboard created and set as default Plugin for Admin Panel
|
||||
- Ink Framework for Monstra Email Templates
|
||||
- iCheck plugin for checkboxes added.
|
||||
- Emails Manager Plugin added.
|
||||
- HubSpot Messaging Library added for notifications
|
||||
- Gelato: Unzip Functionality added.
|
||||
- Gelato: Number Class new method convertToBytes() added.
|
||||
- Gelato: ErroHandler styles updates
|
||||
- Users Plugin getGravatarURL() improve
|
||||
- Plugin API - Actions - Closure support added.
|
||||
- Plugin API - Filters - Closure support added.
|
||||
- Core: Better statuses notification (error,success,warning)
|
||||
- Core: Store user_email in Session
|
||||
- Core: Javascript may be broken if there is no break line - fixed
|
||||
- Core: Added ability to avoid caching JS/CSS by the browser.
|
||||
- Core: Monstra automatically rename files Issue - fixed
|
||||
- Sandbox Plugin cleanup
|
||||
- New Flags: Japanese(JA), Indonesian(ID), Chinese(ZH-CN), Turkish(TR) added.
|
||||
- Localization: Japanese(JA), Indonesian(ID), Chinese(ZH-CN), Turkish(TR) translations added.
|
||||
- Localization: Major Fixes
|
||||
|
||||
Monstra 2.3.1, 2013-12-25
|
||||
------------------------
|
||||
- Localization: Major Fixes
|
||||
- Gelato: Image.php Major Fixes
|
||||
- Sitemap: Errors #175 - fixes
|
||||
- New favicon added #182 - by bernte
|
||||
- Layouts: General Fixes - by bernte
|
||||
- Installer: SERVER_PORT issue - fixed by KANekT
|
||||
- Gelato: Number Class - updated bytes format (JEDEC & IEC 60027) by mbarzda
|
||||
- Email Layout: footer fixes
|
||||
|
||||
Monstra 2.3.0, 2013-12-19
|
||||
------------------------
|
||||
- Update Twitter Bootstrap to 2.3.2
|
||||
- Security: Added limits for login attempts #104
|
||||
- Security: Obfuscate users email to prevent spam-bots from sniffing it.
|
||||
- Core: Added ability to map Monstra Engine Directory.
|
||||
- Core: Maintenance Mode Improvements
|
||||
- Core: ORM::configure - driver options added
|
||||
- Gelato: Image.php fix for PNG files
|
||||
- Gelato: Number.php: Undefined offset fix
|
||||
- XMLDB: error select for empty table fix
|
||||
- Plugin API: Stylesheet.php updates - sourcecode misses a linebreak after minified css
|
||||
- Files Manager: jasny bootstrap-fileupload - added #89
|
||||
- Users Plugin: login page fixes
|
||||
- Users Plugin: Deleting users - fixed by Oleg Gatseluk #158
|
||||
- Pages Plugin: General method getPages() created #123
|
||||
- Pages Plugin: page expand ajax bug #115 - fixed
|
||||
- Pages Plugin: Improved available() method to show only published pages
|
||||
- Pages Plugin: Bug with pages renaming - fixed
|
||||
- Monstra Email Templates #164
|
||||
- Localization: Major Fixes
|
||||
- Localization: PL added
|
||||
- Localization: NL added
|
||||
- .htaccess SEO improvements
|
||||
|
||||
Monstra 2.2.1, 2013-04-06
|
||||
------------------------
|
||||
- Update Gelato to 1.0.3
|
||||
@@ -213,7 +306,7 @@ Monstra 1.1.4, 2012-06-09
|
||||
------------------------
|
||||
- Improve Monstra Error Handler
|
||||
|
||||
Monstra 1.1.3, 2012-06-06
|
||||
Monstra 1.1.3, 2012-06-06
|
||||
------------------------
|
||||
- Improve Monstra Error Handler
|
||||
|
@@ -218,4 +218,4 @@ The hypothetical commands `show w' and `show c' should show the appropriate part
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school, if any, to sign a <20>copyright disclaimer<65> for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
16
README.md
16
README.md
@@ -1,12 +1,10 @@
|
||||
# Monstra CMS
|
||||
Fast and small content management system written in PHP!
|
||||
Monstra is a modern and lightweight Content Management System.
|
||||
|
||||
## System Requirements
|
||||
- UNIX/Linux host
|
||||
- PHP 5.2.3 or higher
|
||||
- SimpleXML Module
|
||||
- Apache Mod Rewrite
|
||||
- Multibyte String
|
||||
Operation system: Unix, Linux, Windows, Mac OS
|
||||
Middleware: PHP 5.3.0 or higher with PHP's [SimpleXML module](http://php.net/simplexml) and [Multibyte String module](http://php.net/mbstring)
|
||||
Webserver: Apache with [Mod Rewrite](http://httpd.apache.org/docs/current/mod/mod_rewrite.html) or Ngnix with [Rewrite Module](http://wiki.nginx.org/HttpRewriteModule)
|
||||
|
||||
## Steps to Install
|
||||
1. [Download the latest version.](http://monstra.org/download)
|
||||
@@ -21,13 +19,13 @@ Fast and small content management system written in PHP!
|
||||
2. Donate to keep Monstra free. We will add you to Monstra [Sponsors Page.](http://monstra.org/contribute/sponsors)
|
||||
3. Develop a new plugin.
|
||||
4. Create a new theme.
|
||||
5. Find and [report issues.](https://github.com/MonstraLab/monstra-cms/issues)
|
||||
5. Find and [report issues.](https://github.com/Awilum/monstra-cms/issues)
|
||||
6. Link back to [Monstra](http://monstra.org).
|
||||
|
||||
## Links
|
||||
- [Site](http://monstra.org)
|
||||
- [Forum](http://forum.monstra.org)
|
||||
- [Documentation](http://monstra.org/documentation)
|
||||
- [Github Repository](https://github.com/MonstraLab/monstra-cms)
|
||||
- [Github Repository](https://github.com/Awilum/monstra-cms)
|
||||
|
||||
Copyright (C) 2012-2013 Romanenko Sergey / Awilum [awilum@msn.com]
|
||||
Copyright (C) 2012-2014 Romanenko Sergey / Awilum [awilum@msn.com]
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -33,24 +33,58 @@ $users = new Table('users');
|
||||
// Admin login
|
||||
if (Request::post('login_submit')) {
|
||||
|
||||
$user = $users->select("[login='" . trim(Request::post('login')) . "']", null);
|
||||
if (count($user) !== 0) {
|
||||
if ($user['login'] == Request::post('login')) {
|
||||
if (trim($user['password']) == Security::encryptPassword(Request::post('password'))) {
|
||||
if ($user['role'] == 'admin' || $user['role'] == 'editor') {
|
||||
Session::set('admin', true);
|
||||
Session::set('user_id', (int) $user['id']);
|
||||
Session::set('user_login', (string) $user['login']);
|
||||
Session::set('user_role', (string) $user['role']);
|
||||
Request::redirect('index.php');
|
||||
if (Cookie::get('login_attempts') && Cookie::get('login_attempts') >= 5) {
|
||||
|
||||
$login_error = __('You are banned for 10 minutes. Try again later', 'users');
|
||||
|
||||
} else {
|
||||
|
||||
$user = $users->select("[login='" . trim(Request::post('login')) . "']", null);
|
||||
if (count($user) !== 0) {
|
||||
if ($user['login'] == Request::post('login')) {
|
||||
if (trim($user['password']) == Security::encryptPassword(Request::post('password'))) {
|
||||
if ($user['role'] == 'admin' || $user['role'] == 'editor') {
|
||||
Session::set('admin', true);
|
||||
Session::set('user_id', (int) $user['id']);
|
||||
Session::set('user_login', (string) $user['login']);
|
||||
Session::set('user_role', (string) $user['role']);
|
||||
Session::set('user_email', (string) $user['email']);
|
||||
Request::redirect('index.php');
|
||||
}
|
||||
} else {
|
||||
$login_error = __('Wrong <b>username</b> or <b>password</b>', 'users');
|
||||
|
||||
if (Cookie::get('login_attempts')) {
|
||||
if (Cookie::get('login_attempts') < 5) {
|
||||
$attempts = Cookie::get('login_attempts') + 1;
|
||||
Cookie::set('login_attempts', $attempts, 600);
|
||||
} else {
|
||||
$login_error = __('You are banned for 10 minutes. Try again later', 'users');
|
||||
}
|
||||
} else {
|
||||
Cookie::set('login_attempts', 1, 600);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$login_error = __('Wrong <b>username</b> or <b>password</b>', 'users');
|
||||
|
||||
if (Cookie::get('login_attempts')) {
|
||||
if (Cookie::get('login_attempts') < 5) {
|
||||
$attempts = Cookie::get('login_attempts') + 1;
|
||||
Cookie::set('login_attempts', $attempts, 600);
|
||||
} else {
|
||||
$login_error = __('You are banned for 10 minutes. Try again later', 'users');
|
||||
}
|
||||
} else {
|
||||
$login_error = __('Wrong <b>username</b> or <b>password</b>', 'users');
|
||||
Cookie::set('login_attempts', 1, 600);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$login_error = __('Wrong <b>username</b> or <b>password</b>', 'users');
|
||||
}
|
||||
|
||||
Notification::setNow('error', $login_error);
|
||||
|
||||
}
|
||||
|
||||
// Errors
|
||||
@@ -86,13 +120,13 @@ if (Request::post('reset_password_submit')) {
|
||||
$mail->AddReplyTo(Option::get('system_email'));
|
||||
$mail->AddAddress($user['email'], $user['login']);
|
||||
$mail->Subject = __('Your login details for :site_name', 'users', array(':site_name' => $site_name));
|
||||
$mail->MsgHTML(View::factory('box/users/views/emails/layout_email')
|
||||
$mail->MsgHTML(View::factory('box/emails/views/emails/email_layout')
|
||||
->assign('site_url', $site_url)
|
||||
->assign('site_name', $site_name)
|
||||
->assign('user_id', $user['id'])
|
||||
->assign('user_login', $user['login'])
|
||||
->assign('new_hash', $new_hash)
|
||||
->assign('view', 'reset_password_email')
|
||||
->assign('email_template', 'reset-password')
|
||||
->render());
|
||||
$mail->Send();
|
||||
|
||||
@@ -101,7 +135,7 @@ if (Request::post('reset_password_submit')) {
|
||||
Notification::set('reset_password', 'reset_password');
|
||||
|
||||
// Redirect to password-reset page
|
||||
Request::redirect(Site::url().'admin');
|
||||
Request::redirect(Site::url().'/admin');
|
||||
|
||||
}
|
||||
|
||||
@@ -127,7 +161,7 @@ if ($is_admin) {
|
||||
if (Request::get('id')) {
|
||||
$area = Request::get('id');
|
||||
} else {
|
||||
Request::redirect('index.php?id=pages');
|
||||
Request::redirect('index.php?id=dashboard');
|
||||
}
|
||||
|
||||
$plugins_registered = Plugin::$plugins;
|
||||
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Before Width: | Height: | Size: 32 KiB |
Binary file not shown.
Before Width: | Height: | Size: 28 KiB |
@@ -2,133 +2,169 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
|
||||
<meta http-equiv="x-dns-prefetch-control" content="on">
|
||||
<link rel="dns-prefetch" href="<?php echo Site::url(); ?>" />
|
||||
<link rel="dns-prefetch" href="//www.google-analytics.com" />
|
||||
<link rel="dns-prefetch" href="//www.gravatar.com" />
|
||||
|
||||
<title>Monstra :: <?php echo __('Administration', 'system'); ?></title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Monstra admin area" />
|
||||
<link rel="icon" href="<?php echo Option::get('siteurl'); ?>favicon.ico" type="image/x-icon" />
|
||||
<link rel="shortcut icon" href="<?php echo Option::get('siteurl'); ?>favicon.ico" type="image/x-icon" />
|
||||
<meta name="description" content="Monstra Admin Area" />
|
||||
<link rel="icon" href="<?php echo Option::get('siteurl'); ?>/favicon.ico" type="image/x-icon" />
|
||||
<link rel="shortcut icon" href="<?php echo Option::get('siteurl'); ?>/favicon.ico" type="image/x-icon" />
|
||||
|
||||
<!-- Styles -->
|
||||
<?php Stylesheet::add('public/assets/css/bootstrap.css', 'backend', 1); ?>
|
||||
<?php Stylesheet::add('public/assets/css/bootstrap-lightbox.css', 'backend', 2); ?>
|
||||
<?php Stylesheet::add('public/assets/css/bootstrap-responsive.css', 'backend', 3); ?>
|
||||
<?php Stylesheet::add('admin/themes/default/css/default.css', 'backend', 4); ?>
|
||||
<link rel="stylesheet" href="<?php echo Site::url(); ?>/public/assets/css/bootstrap.css" type="text/css" />
|
||||
<link rel="stylesheet" href="<?php echo Site::url(); ?>/public/assets/css/messenger.css" type="text/css" />
|
||||
<link rel="stylesheet" href="<?php echo Site::url(); ?>/public/assets/css/messenger-theme-flat.css" type="text/css" />
|
||||
<?php Stylesheet::add('public/assets/css/chocolat.css', 'backend', 2); ?>
|
||||
<?php Stylesheet::add('public/assets/css/bootstrap-fileupload.css', 'backend', 3); ?>
|
||||
<?php Stylesheet::add('public/assets/css/icheck-blue.css', 'backend', 4); ?>
|
||||
<?php Stylesheet::add('admin/themes/default/css/default.css', 'backend', 5); ?>
|
||||
<?php Stylesheet::load(); ?>
|
||||
|
||||
<!-- JavaScripts -->
|
||||
<?php Javascript::add('public/assets/js/jquery.js', 'backend', 1); ?>
|
||||
<?php Javascript::add('public/assets/js/bootstrap.js', 'backend', 2); ?>
|
||||
<?php Javascript::add('public/assets/js/bootstrap-lightbox.js', 'backend', 3); ?>
|
||||
<?php Javascript::add('admin/themes/default/js/default.js', 'backend', 4); ?>
|
||||
<script src="<?php echo Site::url(); ?>/public/assets/js/jquery.min.js"></script>
|
||||
<script src="<?php echo Site::url(); ?>/public/assets/js/bootstrap.min.js"></script>
|
||||
<script src="<?php echo Site::url(); ?>/public/assets/js/messenger.min.js"></script>
|
||||
<script src="<?php echo Site::url(); ?>/public/assets/js/icheck.min.js"></script>
|
||||
<?php Javascript::add('public/assets/js/jquery.chocolat.js', 'backend', 3); ?>
|
||||
<?php Javascript::add('public/assets/js/bootstrap-fileupload.js', 'backend', 4); ?>
|
||||
<?php Javascript::add('admin/themes/default/js/default.js', 'backend', 5); ?>
|
||||
<?php Javascript::load(); ?>
|
||||
|
||||
<?php Action::run('admin_header'); ?>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
|
||||
$('.chocolat').Chocolat({
|
||||
overlayColor : '#000',
|
||||
leftImg : "<?php echo Option::get('siteurl'); ?>/public/assets/img/chocolat/left.gif",
|
||||
rightImg : "<?php echo Option::get('siteurl'); ?>/public/assets/img/chocolat/right.gif",
|
||||
closeImg : "<?php echo Option::get('siteurl'); ?>/public/assets/img/chocolat/close.gif",
|
||||
loadingImg : "<?php echo Option::get('siteurl'); ?>/public/assets/img/chocolat/loading.gif"
|
||||
});
|
||||
|
||||
$('input').iCheck({
|
||||
checkboxClass: 'icheckbox_square-blue',
|
||||
radioClass: 'iradio_square-blue',
|
||||
increaseArea: '20%'
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!--[if lt IE 9]>
|
||||
<link rel="stylesheet" href="css/ie.css" type="text/css" media="screen" />
|
||||
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7/html5shiv.js"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<body class="page-<?php echo Request::get('id'); ?>">
|
||||
|
||||
<!-- Block_topbar -->
|
||||
<div class="monstra-header">
|
||||
<div class="monstra-header-inner">
|
||||
<div class="container-fluid">
|
||||
<a class="brand" href="<?php echo Option::get('siteurl'); ?>admin"><img src="<?php echo Option::get('siteurl'); ?>public/assets/img/monstra-logo.png" height="27" width="171"></a>
|
||||
<p class="pull-right">
|
||||
<?php Navigation::draw('top', Navigation::TOP); ?>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Block_topbar -->
|
||||
<nav class="navbar navbar-default navbar-inverse" role="navigation">
|
||||
<div class="container">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="<?php echo Site::url(); ?>/admin/index.php?id=dashboard">MONSTRA</a>
|
||||
</div>
|
||||
|
||||
<!-- Block_container -->
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row-fluid">
|
||||
|
||||
<!-- Block_sidebar -->
|
||||
|
||||
<div class="span2 monstra-menu-sidebar">
|
||||
|
||||
<div class="hidden-desktop">
|
||||
<select class="input-block-level" name="sections" id="sections">
|
||||
<?php
|
||||
Navigation::getDropdown('content');
|
||||
Navigation::getDropdown('extends');
|
||||
Navigation::getDropdown('system');
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="hidden-phone hidden-tablet">
|
||||
|
||||
<h3><?php echo __('Content', 'pages'); ?></h3>
|
||||
<ul>
|
||||
<?php Navigation::draw('content'); ?>
|
||||
</ul>
|
||||
<div class="monstra-menu-category-separator"></div>
|
||||
<?php if (Session::exists('user_role') && in_array(Session::get('user_role'), array('admin'))) { ?>
|
||||
<h3><?php echo __('Extends', 'system'); ?></h3>
|
||||
<ul>
|
||||
<?php Navigation::draw('extends'); ?>
|
||||
</ul>
|
||||
<div class="monstra-menu-category-separator"></div>
|
||||
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
||||
<ul class="nav navbar-nav">
|
||||
<li<?php if (Request::get('id') == 'dashboard') { ?> class="active"<?php } ?>><a href="<?php echo Site::url(); ?>/admin/index.php?id=dashboard"><?php echo __('Dashboard', 'dashboard'); ?></a></li>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo __('Content', 'pages'); ?> <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<?php Navigation::draw('content'); ?>
|
||||
</ul>
|
||||
</li>
|
||||
<?php if (Session::exists('user_role') && in_array(Session::get('user_role'), array('admin'))) { ?>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo __('Extends', 'system'); ?> <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<?php Navigation::draw('extends'); ?>
|
||||
</ul>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo __('System', 'system'); ?> <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<?php Navigation::draw('system'); ?>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo __('Help', 'system'); ?> <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="http://monstra.org/documentation" target="_blank"><?php echo __('Documentation', 'system'); ?></a></li>
|
||||
<?php if (Option::get('language') == 'ru') { ?>
|
||||
<li><a href="http://ru.forum.monstra.org" target="_blank"><?php echo __('Official Support Forum', 'system'); ?></a></li>
|
||||
<?php } else { ?>
|
||||
<li><a href="http://forum.monstra.org" target="_blank"><?php echo __('Official Support Forum', 'system'); ?></a></li>
|
||||
<?php } ?>
|
||||
<h3><?php echo __('System', 'system'); ?></h3>
|
||||
<ul>
|
||||
<?php Navigation::draw('system'); ?>
|
||||
</ul>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li><a href="<?php echo Site::url(); ?>" target="_blank"><?php echo __('View Site', 'system'); ?></a></li>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo Session::get('user_login'); ?> <img src="<?php echo Users::getGravatarURL(Session::get('user_email'), 28); ?>" alt=""> <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="<?php echo Site::url(); ?>/admin/index.php?id=users&action=edit&user_id=<?php echo Session::get('user_id'); ?>"><?php echo __('Profile', 'users')?></a></li>
|
||||
<li><a href="<?php echo Site::url(); ?>/admin/?logout=do"><?php echo __('Log Out', 'users'); ?></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- /Block_sidebar -->
|
||||
|
||||
<!-- Block_content -->
|
||||
<div class="span10 monstra-content">
|
||||
|
||||
<div id="update-monstra"></div>
|
||||
<div><?php Action::run('admin_pre_template'); ?></div>
|
||||
<div>
|
||||
<?php
|
||||
if ($plugin_admin_area) {
|
||||
if (is_callable(ucfirst(Plugin::$plugins[$area]['id']).'Admin::main')) {
|
||||
call_user_func(ucfirst(Plugin::$plugins[$area]['id']).'Admin::main');
|
||||
} else {
|
||||
echo '<div class="message-error">'.__('Plugin main admin function does not exist', 'system').'</div>';
|
||||
}
|
||||
} else {
|
||||
echo '<div class="message-error">'.__('Plugin does not exist', 'system').'</div>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<div><?php Action::run('admin_post_template'); ?></div>
|
||||
|
||||
</div>
|
||||
<!-- /Block_content -->
|
||||
<div class="container">
|
||||
|
||||
<?php
|
||||
// Monstra Notifications
|
||||
Notification::get('success') AND Alert::success(Notification::get('success'));
|
||||
Notification::get('warning') AND Alert::warning(Notification::get('warning'));
|
||||
Notification::get('error') AND Alert::error(Notification::get('error'));
|
||||
?>
|
||||
|
||||
<div id="update-monstra"></div>
|
||||
<div><?php Action::run('admin_pre_template'); ?></div>
|
||||
<div>
|
||||
<?php
|
||||
if ($plugin_admin_area) {
|
||||
if (is_callable(ucfirst(Plugin::$plugins[$area]['id']).'Admin::main')) {
|
||||
call_user_func(ucfirst(Plugin::$plugins[$area]['id']).'Admin::main');
|
||||
} else {
|
||||
echo '<div class="message-error">'.__('Plugin main admin function does not exist', 'system').'</div>';
|
||||
}
|
||||
} else {
|
||||
echo '<div class="message-error">'.__('Plugin does not exist', 'system').'</div>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<!-- Block_footer -->
|
||||
<footer>
|
||||
<p class="pull-right">
|
||||
<span style="border-top:1px solid #E0E0E0; padding-top:10px;">
|
||||
<span class="hidden-phone">
|
||||
<a href="http://forum.monstra.org" target="_blank"><?php echo __('Official Support Forum', 'system'); ?></a> /
|
||||
<a href="http://monstra.org/documentation" target="_blank"><?php echo __('Documentation', 'system'); ?></a> /
|
||||
</span>
|
||||
© 2012 - 2013 <a href="http://monstra.org" target="_blank">Monstra</a> – <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?>
|
||||
</span>
|
||||
</p>
|
||||
</footer>
|
||||
<!-- /Block_footer -->
|
||||
|
||||
</div>
|
||||
<!-- /Block_container -->
|
||||
|
||||
<div><?php Action::run('admin_post_template'); ?></div>
|
||||
</div>
|
||||
<div class="margin-top-1 margin-bottom-1 hidden-md"></div>
|
||||
<footer class="container visible-md visible-lg">
|
||||
<p class="pull-right">
|
||||
<span>
|
||||
<?php if (Option::get('language') == 'ru') { ?>
|
||||
<a href="http://ru.forum.monstra.org" target="_blank"><?php echo __('Official Support Forum', 'system'); ?></a> /
|
||||
<?php } else { ?>
|
||||
<a href="http://forum.monstra.org" target="_blank"><?php echo __('Official Support Forum', 'system'); ?></a> /
|
||||
<?php } ?>
|
||||
<a href="http://monstra.org/documentation" target="_blank"><?php echo __('Documentation', 'system'); ?></a> /
|
||||
© 2012 - 2014 <a href="http://monstra.org" target="_blank">Monstra</a> – <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?>
|
||||
</span>
|
||||
</p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -1,26 +1,23 @@
|
||||
/**
|
||||
* Monstra JS module
|
||||
* @package Monstra
|
||||
* @author Romanenko Sergey / Awilum
|
||||
* @copyright 2012 Romanenko Sergey / Awilum
|
||||
* @version $Id$
|
||||
* @since 1.0.0
|
||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||
* Monstra is free software. This version may have been modified pursuant
|
||||
* to the GNU General Public License, and as distributed it includes or
|
||||
* is derivative of works licensed under the GNU General Public License or
|
||||
* other free or open source software licenses.
|
||||
* See COPYING.txt for copyright notices and details.
|
||||
* @filesource
|
||||
* Monstra JS module
|
||||
*
|
||||
* This source file is part of the Monstra Engine. More information,
|
||||
* documentation and tutorials can be found at http://monstra.org
|
||||
*
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
|
||||
/* Confirm delete */
|
||||
function confirmDelete(msg){var data=confirm(msg+" ?"); return data;}
|
||||
|
||||
$(document).ready(function() {
|
||||
/* DropDown Menu for Mobile Devices */
|
||||
$("#sections").change(function(){
|
||||
window.location = $('#sections option:selected').attr('rel');
|
||||
});
|
||||
});
|
||||
/* Messanger */
|
||||
Messenger.options = {
|
||||
extraClasses: 'messenger-fixed messenger-on-bottom messenger-on-right',
|
||||
theme: 'flat'
|
||||
}
|
@@ -5,22 +5,28 @@
|
||||
<title>Monstra :: <?php echo __('Administration', 'system'); ?></title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Monstra Admin Area">
|
||||
<link rel="icon" href="<?php echo Option::get('siteurl'); ?>favicon.ico" type="image/x-icon" />
|
||||
<link rel="shortcut icon" href="<?php echo Option::get('siteurl'); ?>favicon.ico" type="image/x-icon" />
|
||||
<link rel="icon" href="<?php echo Option::get('siteurl'); ?>/favicon.ico" type="image/x-icon" />
|
||||
<link rel="shortcut icon" href="<?php echo Option::get('siteurl'); ?>/favicon.ico" type="image/x-icon" />
|
||||
|
||||
<!-- Styles -->
|
||||
<?php Stylesheet::add('public/assets/css/bootstrap.css', 'backend', 1); ?>
|
||||
<link rel="stylesheet" href="<?php echo Site::url(); ?>/public/assets/css/bootstrap.css" type="text/css" />
|
||||
<link rel="stylesheet" href="<?php echo Site::url(); ?>/public/assets/css/messenger.css" type="text/css" />
|
||||
<link rel="stylesheet" href="<?php echo Site::url(); ?>/public/assets/css/messenger-theme-flat.css" type="text/css" />
|
||||
<?php Stylesheet::add('public/assets/css/bootstrap-lightbox.css', 'backend', 2); ?>
|
||||
<?php Stylesheet::add('public/assets/css/bootstrap-responsive.css', 'backend', 3); ?>
|
||||
<?php Stylesheet::add('admin/themes/default/css/default.css', 'backend', 4); ?>
|
||||
<?php Stylesheet::add('public/assets/css/bootstrap-fileupload.css', 'backend', 3); ?>
|
||||
<?php Stylesheet::add('admin/themes/default/css/default.css', 'backend', 5); ?>
|
||||
<?php Stylesheet::load(); ?>
|
||||
|
||||
<!-- JavaScripts -->
|
||||
<?php Javascript::add('public/assets/js/jquery.js', 'backend', 1); ?>
|
||||
<?php Javascript::add('public/assets/js/bootstrap.js', 'backend', 2); ?>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
|
||||
<script src="<?php echo Site::url(); ?>/public/assets/js/bootstrap.min.js"></script>
|
||||
<script src="<?php echo Site::url(); ?>/public/assets/js/messenger.min.js"></script>
|
||||
<script src="<?php echo Site::url(); ?>/public/assets/js/messenger-theme-flat.js"></script>
|
||||
<?php Javascript::add('public/assets/js/bootstrap-lightbox.js', 'backend', 3); ?>
|
||||
<?php Javascript::add('admin/themes/default/js/default.js', 'backend', 4); ?>
|
||||
<?php Javascript::add('public/assets/js/bootstrap-fileupload.js', 'backend', 4); ?>
|
||||
<?php Javascript::add('admin/themes/default/js/default.js', 'backend', 5); ?>
|
||||
<?php Javascript::load(); ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
$().ready(function () {
|
||||
<?php if (Notification::get('reset_password') == 'reset_password') { ?>
|
||||
@@ -45,47 +51,56 @@
|
||||
|
||||
<?php Action::run('admin_header'); ?>
|
||||
|
||||
<!--[if lt IE 9]>
|
||||
<link rel="stylesheet" href="css/ie.css" type="text/css" media="screen" />
|
||||
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7/html5shiv.js"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
<body class="login-body">
|
||||
|
||||
<?php
|
||||
// Monstra Notifications
|
||||
Notification::get('success') AND Alert::success(Notification::get('success'));
|
||||
Notification::get('warning') AND Alert::warning(Notification::get('warning'));
|
||||
Notification::get('error') AND Alert::error(Notification::get('error'));
|
||||
?>
|
||||
|
||||
<div class="container form-signin">
|
||||
|
||||
<div style="text-align:center;"><a class="brand" href="<?php echo Option::get('siteurl'); ?>admin"><img src="<?php echo Option::get('siteurl'); ?>public/assets/img/monstra-logo.png" height="27" width="171"></a></div>
|
||||
<div class="administration-area">
|
||||
<hr>
|
||||
<div class="text-center"><a class="brand" href="<?php echo Option::get('siteurl'); ?>/admin"><img src="<?php echo Option::get('siteurl'); ?>/public/assets/img/monstra-logo-256px.png" alt="monstra" /></a></div>
|
||||
<div class="administration-area well">
|
||||
<div>
|
||||
<h2 style="text-align:center;"><?php echo __('Administration', 'system'); ?></h2><br />
|
||||
<form method="post">
|
||||
<label><?php echo __('Username', 'users'); ?></label>
|
||||
<input class="input-xlarge" name="login" type="text" />
|
||||
|
||||
<label><?php echo __('Password', 'users'); ?></label>
|
||||
<input class="input-xlarge" name="password" type="password" />
|
||||
<br />
|
||||
<?php if (isset($login_error) && $login_error !== '') { ?><div class="alert alert-error"><?php echo $login_error; ?></div><?php } ?>
|
||||
<input type="submit" name="login_submit" class="btn" value="<?php echo __('Log In', 'users'); ?>" />
|
||||
<div class="form-group">
|
||||
<label><?php echo __('Username', 'users'); ?></label>
|
||||
<input class="form-control" name="login" type="text" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><?php echo __('Password', 'users'); ?></label>
|
||||
<input class="form-control" name="password" type="password" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="submit" name="login_submit" class="btn btn-primary" value="<?php echo __('Log In', 'users'); ?>" />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="reset-password-area">
|
||||
<hr>
|
||||
<div class="reset-password-area well">
|
||||
<div>
|
||||
<h2 style="text-align:center;"><?php echo __('Reset Password', 'users'); ?></h2><br />
|
||||
<?php if (Notification::get('success')) Alert::success(Notification::get('success')); ?>
|
||||
<form method="post">
|
||||
<div class="form-group">
|
||||
<label><?php echo __('Username', 'users'); ?></label>
|
||||
<input name="login" class="input-xlarge" type="text" value="<?php echo $user_login; ?>" />
|
||||
|
||||
<input name="login" class="form-control" type="text" value="<?php echo $user_login; ?>" />
|
||||
</div>
|
||||
<?php if (Option::get('captcha_installed') == 'true') { ?>
|
||||
<label><?php echo __('Captcha'); ?><label>
|
||||
<input type="text" name="answer" class="input-xlarge">
|
||||
<div class="form-group">
|
||||
<label><?php echo __('Captcha', 'users'); ?></label>
|
||||
<input type="text" name="answer" class="form-control">
|
||||
<br>
|
||||
<?php CryptCaptcha::draw(); ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<br>
|
||||
<?php
|
||||
@@ -95,24 +110,29 @@
|
||||
}
|
||||
}
|
||||
?>
|
||||
<input type="submit" name="reset_password_submit" class="btn" value="<?php echo __('Send New Password', 'users')?>" />
|
||||
<div class="form-group">
|
||||
<input type="submit" name="reset_password_submit" class="btn btn-primary" value="<?php echo __('Send New Password', 'users')?>" />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<div>
|
||||
<div style="text-align:center;">
|
||||
<a class="small-grey-text" href="<?php echo Option::get('siteurl'); ?>"><?php echo __('< Back to Website', 'system');?></a> -
|
||||
<a class="small-grey-text reset-password-btn" href="javascript:;"><?php echo __('Forgot your password? >', 'system');?></a>
|
||||
<a class="small-grey-text administration-btn" href="javascript:;"><?php echo __('Administration >', 'system');?></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="text-align:center">
|
||||
<span class="small-grey-text">© 2012 <a href="http://monstra.org" class="small-grey-text" target="_blank">Monstra</a> – <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?></span>
|
||||
<div class="login-footer">
|
||||
|
||||
<div class="text-center">
|
||||
<a href="<?php echo Option::get('siteurl'); ?>"><?php echo __('Back to Website', 'system');?></a> -
|
||||
<a class="reset-password-btn" href="javascript:;"><?php echo __('Forgot your password ?', 'system');?></a>
|
||||
<a class="administration-btn" href="javascript:;"><?php echo __('Log In', 'users');?></a>
|
||||
</div>
|
||||
|
||||
<div class="text-center">
|
||||
<span>© 2012 - 2014 <a href="http://monstra.org" class="small-grey-text" target="_blank">Monstra</a> – <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?></span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -35,16 +35,21 @@ class Alert
|
||||
* </code>
|
||||
*
|
||||
* @param string $message Message
|
||||
* @param integer $time Time
|
||||
* @param integer $seconds Seconds
|
||||
*/
|
||||
public static function success($message, $time = 3000)
|
||||
public static function success($message, $seconds = 3)
|
||||
{
|
||||
// Redefine vars
|
||||
$message = (string) $message;
|
||||
$time = (int) $time;
|
||||
$seconds = (int) $seconds;
|
||||
|
||||
echo '<div class="alert alert-info">'.$message.'</div>
|
||||
<script type="text/javascript">setTimeout(\'$(".alert").slideUp("slow")\', '.$time.'); </script>';
|
||||
echo '<script type="text/javascript">
|
||||
Messenger().post({
|
||||
type: "success",
|
||||
message : "'.$message.'",
|
||||
hideAfter: '.$seconds.'
|
||||
});
|
||||
</script>';
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -55,16 +60,21 @@ class Alert
|
||||
* </code>
|
||||
*
|
||||
* @param string $message Message
|
||||
* @param integer $time Time
|
||||
* @param integer $seconds Seconds
|
||||
*/
|
||||
public static function warning($message, $time = 3000)
|
||||
public static function warning($message, $seconds = 3)
|
||||
{
|
||||
// Redefine vars
|
||||
$message = (string) $message;
|
||||
$time = (int) $time;
|
||||
$seconds = (int) $seconds;
|
||||
|
||||
echo '<div class="alert alert-warning">'.$message.'</div>
|
||||
<script type="text/javascript">setTimeout(\'$(".alert").slideUp("slow")\', '.$time.'); </script>';
|
||||
echo '<script type="text/javascript">
|
||||
Messenger().post({
|
||||
type: "info",
|
||||
message : "'.$message.'",
|
||||
hideAfter: '.$seconds.'
|
||||
});
|
||||
</script>';
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -75,16 +85,21 @@ class Alert
|
||||
* </code>
|
||||
*
|
||||
* @param string $message Message
|
||||
* @param integer $time Time
|
||||
* @param integer $seconds Seconds
|
||||
*/
|
||||
public static function error($message, $time = 3000)
|
||||
public static function error($message, $seconds = 3)
|
||||
{
|
||||
// Redefine vars
|
||||
$message = (string) $message;
|
||||
$time = (int) $time;
|
||||
$seconds = (int) $seconds;
|
||||
|
||||
echo '<div class="alert alert-error">'.$message.'</div>
|
||||
<script type="text/javascript">setTimeout(\'$(".alert").slideUp("slow")\', '.$time.'); </script>';
|
||||
echo '<script type="text/javascript">
|
||||
Messenger().post({
|
||||
type: "error",
|
||||
message : "'.$message.'",
|
||||
hideAfter: '.$seconds.'
|
||||
});
|
||||
</script>';
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -5,7 +5,7 @@
|
||||
*
|
||||
* Monstra - Content Management System.
|
||||
* Site: www.mostra.org
|
||||
* Copyright (C) 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* Copyright (C) 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* This source file is part of the Monstra Engine. More information,
|
||||
* documentation and tutorials can be found at http://monstra.org
|
||||
@@ -13,7 +13,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -39,7 +39,8 @@ class Monstra
|
||||
/**
|
||||
* The version of Monstra
|
||||
*/
|
||||
const VERSION = '2.2.1';
|
||||
const VERSION = '3.0.1';
|
||||
|
||||
|
||||
/**
|
||||
* Monstra environment
|
||||
@@ -126,6 +127,11 @@ class Monstra
|
||||
*/
|
||||
include ROOT . DS . 'libraries'. DS .'Gelato'. DS .'Gelato.php';
|
||||
|
||||
/**
|
||||
* Map Monstra Engine Directory
|
||||
*/
|
||||
ClassLoader::directory(ROOT . DS . 'engine' . DS);
|
||||
|
||||
/**
|
||||
* Map all Monstra Classes
|
||||
*/
|
||||
@@ -179,10 +185,11 @@ class Monstra
|
||||
ORM::configure(MONSTRA_DB_DSN);
|
||||
ORM::configure('username', MONSTRA_DB_USER);
|
||||
ORM::configure('password', MONSTRA_DB_PASSWORD);
|
||||
ORM::configure('driver_options', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Auto cleanup if MONSTRA_DEBUG is TRUE
|
||||
* Auto cleanup if DEVELOPMENT environment
|
||||
*/
|
||||
if (Monstra::$environment == Monstra::DEVELOPMENT) {
|
||||
Monstra::cleanTmp();
|
||||
@@ -217,7 +224,11 @@ class Monstra
|
||||
/**
|
||||
* Init I18n
|
||||
*/
|
||||
I18n::init(Option::get('language'));
|
||||
if (BACKEND) {
|
||||
I18n::init('admin', Option::get('language'));
|
||||
} else {
|
||||
I18n::init('site', Site::getCurrentSiteLocale());
|
||||
}
|
||||
|
||||
/**
|
||||
* Init Plugins API
|
||||
@@ -228,7 +239,7 @@ class Monstra
|
||||
* Init Notification service
|
||||
*/
|
||||
Notification::init();
|
||||
|
||||
|
||||
/**
|
||||
* Init site module
|
||||
*/
|
||||
@@ -308,6 +319,7 @@ class Monstra
|
||||
if (count($namespaces = Dir::scan(CACHE)) > 0) foreach ($namespaces as $namespace) Dir::delete(CACHE . DS . $namespace);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Initialize Monstra Engine
|
||||
*
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -47,7 +47,7 @@ class Action
|
||||
* </code>
|
||||
*
|
||||
* @param string $action_name Action name
|
||||
* @param string $added_function Added function
|
||||
* @param mixed $added_function Added function
|
||||
* @param integer $priority Priority. Default is 10
|
||||
* @param array $args Arguments
|
||||
*/
|
||||
@@ -56,7 +56,7 @@ class Action
|
||||
// Hooks a function on to a specific action.
|
||||
Action::$actions[] = array(
|
||||
'action_name' => (string) $action_name,
|
||||
'function' => (string) $added_function,
|
||||
'function' => $added_function,
|
||||
'priority' => (int) $priority,
|
||||
'args' => $args
|
||||
);
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -91,7 +91,7 @@ class Filter
|
||||
* </code>
|
||||
*
|
||||
* @param string $filter_name The name of the filter to hook the $function_to_add to.
|
||||
* @param string $function_to_add The name of the function to be called when the filter is applied.
|
||||
* @param mixed $function_to_add The name of the function to be called when the filter is applied.
|
||||
* @param integer $priority Function to add priority - default is 10.
|
||||
* @param integer $accepted_args The number of arguments the function accept default is 1.
|
||||
* @return boolean
|
||||
@@ -100,7 +100,7 @@ class Filter
|
||||
{
|
||||
// Redefine arguments
|
||||
$filter_name = (string) $filter_name;
|
||||
$function_to_add = (string) $function_to_add;
|
||||
$function_to_add = $function_to_add;
|
||||
$priority = (int) $priority;
|
||||
$accepted_args = (int) $accepted_args;
|
||||
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -38,6 +38,7 @@ class I18n
|
||||
'gl' => 'Galego',
|
||||
'hu' => 'Magyar',
|
||||
'it' => 'Italiano',
|
||||
'id' => 'Bahasa Indonesia',
|
||||
'ja' => '日本語',
|
||||
'lt' => 'Lietuvių',
|
||||
'nl' => 'Nederlands',
|
||||
@@ -52,7 +53,7 @@ class I18n
|
||||
'sr-yu' => 'Serbian',
|
||||
'tr' => 'Türkçe',
|
||||
'uk' => 'Українська',
|
||||
'zh' => '中文',
|
||||
'zh-cn' => '䏿–‡',
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -74,9 +75,9 @@ class I18n
|
||||
*
|
||||
* @param string $dir Plugins directory
|
||||
*/
|
||||
public static function init($locale)
|
||||
public static function init($namespace = 'default', $locale)
|
||||
{
|
||||
if ( ! isset(self::$instance)) self::$instance = new I18n($locale);
|
||||
if ( ! isset(self::$instance)) self::$instance = new I18n($namespace, $locale);
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
@@ -93,13 +94,13 @@ class I18n
|
||||
/**
|
||||
* Construct
|
||||
*/
|
||||
protected function __construct($locale)
|
||||
protected function __construct($namespace = 'default', $locale)
|
||||
{
|
||||
// Redefine arguments
|
||||
$locale = (string) $locale;
|
||||
|
||||
// Get lang table for current locale
|
||||
$lang_table = Cache::get('i18n', $locale);
|
||||
$lang_table = Cache::get('i18n_'.$namespace, $locale);
|
||||
|
||||
// If lang_table is empty then create new
|
||||
if (! $lang_table) {
|
||||
@@ -135,7 +136,7 @@ class I18n
|
||||
}
|
||||
|
||||
// Save lang table for current locale
|
||||
Cache::put('i18n', $locale, $lang_table);
|
||||
Cache::put('i18n_'.$namespace, $locale, $lang_table);
|
||||
|
||||
// Update dictionary
|
||||
I18n::$dictionary = $lang_table;
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -92,7 +92,7 @@ class Javascript
|
||||
if ($backend_regenerate) {
|
||||
foreach ($javascripts as $javascript) {
|
||||
if ((file_exists(ROOT . DS . $javascript['file'])) and (($javascript['load'] == 'backend') or ($javascript['load'] == 'both')) ) {
|
||||
$backend_buffer .= file_get_contents(ROOT . DS . $javascript['file']);
|
||||
$backend_buffer .= file_get_contents(ROOT . DS . $javascript['file'])."\n";
|
||||
}
|
||||
}
|
||||
file_put_contents($backend_site_js_path, $backend_buffer);
|
||||
@@ -115,7 +115,7 @@ class Javascript
|
||||
if ($frontend_regenerate) {
|
||||
foreach ($javascripts as $javascript) {
|
||||
if ((file_exists(ROOT . DS . $javascript['file'])) and (($javascript['load'] == 'frontend') or ($javascript['load'] == 'both')) ) {
|
||||
$frontend_buffer .= file_get_contents(ROOT . DS . $javascript['file']);
|
||||
$frontend_buffer .= file_get_contents(ROOT . DS . $javascript['file'])."\n";
|
||||
}
|
||||
}
|
||||
file_put_contents($frontend_site_js_path, $frontend_buffer);
|
||||
@@ -126,11 +126,19 @@ class Javascript
|
||||
|
||||
// Render
|
||||
if (BACKEND) {
|
||||
echo '<script type="text/javascript" src="'.Option::get('siteurl').'tmp/minify/backend_site.minify.js"></script>';
|
||||
echo '<script type="text/javascript" src="'.Option::get('siteurl').'/tmp/minify/backend_site.minify.js?'.Option::get('javascript_version').'"></script>';
|
||||
} else {
|
||||
echo '<script type="text/javascript" src="'.Option::get('siteurl').'tmp/minify/frontend_site.minify.js"></script>';
|
||||
echo '<script type="text/javascript" src="'.Option::get('siteurl').'/tmp/minify/frontend_site.minify.js?'.Option::get('javascript_version').'"></script>'."\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* javascriptVersionIncrement
|
||||
*/
|
||||
public static function javascriptVersionIncrement() {
|
||||
Option::update('javascript_version', (int) Option::get('javascript_version') + 1);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -128,9 +128,9 @@ class Stylesheet
|
||||
|
||||
// Render
|
||||
if (BACKEND) {
|
||||
echo '<link rel="stylesheet" href="'.Option::get('siteurl').'tmp/minify/backend_site.minify.css'.'" type="text/css" />';
|
||||
echo '<link rel="stylesheet" href="'.Option::get('siteurl').'/tmp/minify/backend_site.minify.css?'.Option::get('styles_version').'" type="text/css" />';
|
||||
} else {
|
||||
echo '<link rel="stylesheet" href="'.Option::get('siteurl').'tmp/minify/frontend_site.minify.css'.'" type="text/css" />';
|
||||
echo '<link rel="stylesheet" href="'.Option::get('siteurl').'/tmp/minify/frontend_site.minify.css?'.Option::get('styles_version').'" type="text/css" />'."\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -144,9 +144,16 @@ class Stylesheet
|
||||
'@theme_site_url',
|
||||
'@theme_admin_url'),
|
||||
array(Option::get('siteurl'),
|
||||
Option::get('siteurl').'public/themes/'.Option::get('theme_site_name'),
|
||||
Option::get('siteurl').'admin/themes/'.Option::get('theme_admin_name')),
|
||||
Option::get('siteurl').'/public/themes/'.Option::get('theme_site_name'),
|
||||
Option::get('siteurl').'/admin/themes/'.Option::get('theme_admin_name')),
|
||||
$frontend_buffer);
|
||||
}
|
||||
|
||||
/**
|
||||
* stylesVersionIncrement
|
||||
*/
|
||||
public static function stylesVersionIncrement() {
|
||||
Option::update('styles_version', (int) Option::get('styles_version') + 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -111,7 +111,7 @@ class Security
|
||||
* </code>
|
||||
*
|
||||
* @param string $str String
|
||||
* @param string $delimiter String delimiter
|
||||
* @param mixed $delimiter String delimiter
|
||||
* @param boolean $lowercase String Lowercase
|
||||
* @return string
|
||||
*/
|
||||
@@ -119,9 +119,9 @@ class Security
|
||||
{
|
||||
// Redefine vars
|
||||
$str = (string) $str;
|
||||
$delimiter = (string) $delimiter;
|
||||
$delimiter = $delimiter;
|
||||
$lowercase = (bool) $lowercase;
|
||||
$delimiter = (string) $delimiter;
|
||||
$delimiter = $delimiter;
|
||||
|
||||
// Remove tags
|
||||
$str = filter_var($str, FILTER_SANITIZE_STRING);
|
||||
@@ -149,9 +149,11 @@ class Security
|
||||
$str = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
|
||||
|
||||
// Remove characters
|
||||
$str = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $str );
|
||||
$str = preg_replace("/[\/_|+ -]+/", $delimiter, $str );
|
||||
$str = trim($str, $delimiter);
|
||||
$str = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $str);
|
||||
if ($delimiter != null) {
|
||||
$str = preg_replace("/[\/_|+ -]+/", $delimiter, $str);
|
||||
$str = trim($str, $delimiter);
|
||||
}
|
||||
|
||||
// Lowercase
|
||||
if ($lowercase === true) $str = Text::lowercase($str);
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -221,4 +221,38 @@ class Site
|
||||
return __('Powered by', 'system').' <a href="http://monstra.org" target="_blank">Monstra</a> ' . Monstra::VERSION;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static function getLocales() {
|
||||
$language_files = File::scan(PLUGINS_BOX . DS . 'system' . DS . 'languages' . DS, '.lang.php');
|
||||
foreach ($language_files as $language) {
|
||||
$parts = explode('.', $language);
|
||||
$languages_array[$parts[0]] = I18n::$locales[$parts[0]];
|
||||
}
|
||||
return $languages_array;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static function getDefaultSiteLocale() {
|
||||
return Option::get('site_language');
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static function getCurrentSiteLocale() {
|
||||
$site_locales = Site::getLocales();
|
||||
|
||||
|
||||
if (Uri::segment(0) && array_key_exists(Uri::segment(0), $site_locales)) {
|
||||
return Uri::segment(0);
|
||||
} else {
|
||||
$site_locale = Cookie::get('site_locale');
|
||||
return !empty($site_locale) ? $site_locale : Option::get('site_language');
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -807,6 +807,7 @@ class Table
|
||||
|
||||
return $c;
|
||||
}
|
||||
return $a;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -1,10 +1,10 @@
|
||||
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');
|
||||
|
||||
/**
|
||||
* Monstra requires PHP 5.2.3 or greater
|
||||
* Monstra requires PHP 5.3.0 or greater
|
||||
*/
|
||||
if (version_compare(PHP_VERSION, "5.2.3", "<")) {
|
||||
exit("Monstra requires PHP 5.2.3 or greater.");
|
||||
if (version_compare(PHP_VERSION, "5.3.0", "<")) {
|
||||
exit("Monstra requires PHP 5.3.0 or greater.");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -4,4 +4,4 @@
|
||||
* Set meta generator
|
||||
*/
|
||||
Action::add('theme_meta', 'setMetaGenerator');
|
||||
function setMetaGenerator() { echo '<meta name="generator" content="Powered by Monstra '.Monstra::VERSION.'" />'; }
|
||||
function setMetaGenerator() { echo '<meta name="generator" content="Powered by Monstra '.Monstra::VERSION.'" />'."\n"; }
|
||||
|
BIN
favicon.ico
BIN
favicon.ico
Binary file not shown.
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 31 KiB |
17
index.php
17
index.php
@@ -9,7 +9,7 @@
|
||||
* @package Monstra
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -38,6 +38,18 @@ if (file_exists('install.php')) {
|
||||
// Load Engine init file
|
||||
require_once ROOT. DS . 'engine'. DS . '_init.php';
|
||||
|
||||
|
||||
/*
|
||||
$pages = new Table('pages');
|
||||
$pages_list = $pages->select(null, 'all');
|
||||
|
||||
foreach($pages_list as $page) {
|
||||
$pages->update($page['id'], array('locale' => 'en'));
|
||||
}
|
||||
*/
|
||||
|
||||
// Option::add('site_language', 'ru');
|
||||
|
||||
// Check for maintenance mod
|
||||
if ('on' == Option::get('maintenance_status')) {
|
||||
|
||||
@@ -45,6 +57,9 @@ if (file_exists('install.php')) {
|
||||
if ((Session::exists('user_role')) and (Session::get('user_role') == 'admin' or Session::get('user_role') == 'editor')) {
|
||||
// Monstra show this page :)
|
||||
} else {
|
||||
header('HTTP/1.1 503 Service Temporarily Unavailable');
|
||||
header('Status: 503 Service Temporarily Unavailable');
|
||||
header('Retry-After: 600');
|
||||
die (Text::toHtml(Option::get('maintenance_message')));
|
||||
}
|
||||
}
|
||||
|
568
install.php
568
install.php
@@ -16,8 +16,14 @@
|
||||
// Get array with the names of all modules compiled and loaded
|
||||
$php_modules = get_loaded_extensions();
|
||||
|
||||
// Get server port
|
||||
if ($_SERVER["SERVER_PORT"] == "80") $port = ""; else $port = ':'.$_SERVER["SERVER_PORT"];
|
||||
|
||||
// Get site URL
|
||||
$site_url = 'http://'.$_SERVER["SERVER_NAME"].str_replace(array("index.php", "install.php"), "", $_SERVER['PHP_SELF']);
|
||||
$site_url = 'http://'.$_SERVER["SERVER_NAME"].$port.str_replace(array("index.php", "install.php"), "", $_SERVER['PHP_SELF']);
|
||||
|
||||
// Replace last slash in site_url
|
||||
$site_url = rtrim($site_url, '/');
|
||||
|
||||
// Rewrite base
|
||||
$rewrite_base = str_replace(array("index.php", "install.php"), "", $_SERVER['PHP_SELF']);
|
||||
@@ -29,16 +35,21 @@
|
||||
$dir_array = array('public', 'storage', 'backups', 'tmp');
|
||||
|
||||
// Languages array
|
||||
$languages_array = array('en', 'fr', 'de', 'it', 'es', 'lt', 'pt-br', 'ru', 'uk', 'hu', 'fa' , 'sk', 'sr-yu');
|
||||
$languages_array = array('en', 'ru', 'fr', 'de', 'it', 'es', 'lt', 'pl', 'pt-br', 'hu', 'fa' , 'sk', 'uk', 'nl', 'sr-yu', 'id', 'ja', 'zh-cn', 'tr');
|
||||
|
||||
// Select Monstra language
|
||||
if (Request::get('language')) {
|
||||
if (Request::get('action') && Request::get('action') == 'install') {
|
||||
$action = '?action=install';
|
||||
} else {
|
||||
$action = '';
|
||||
}
|
||||
if (in_array(Request::get('language'), $languages_array)) {
|
||||
if (Option::update('language', Request::get('language'))) {
|
||||
Request::redirect($site_url);
|
||||
Request::redirect($site_url.$action);
|
||||
}
|
||||
} else {
|
||||
Request::redirect($site_url);
|
||||
Request::redirect($site_url.$action);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,6 +110,8 @@
|
||||
|
||||
// Installation done :)
|
||||
header("location: index.php?install=done");
|
||||
} else {
|
||||
Notification::setNow('errors', $errors);
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -109,76 +122,91 @@
|
||||
<title>Monstra :: Install</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Monstra Install Area">
|
||||
<link rel="icon" href="<?php echo $site_url; ?>favicon.ico" type="image/x-icon" />
|
||||
<link rel="shortcut icon" href="<?php echo $site_url; ?>favicon.ico" type="image/x-icon" />
|
||||
<link rel="stylesheet" href="<?php echo $site_url; ?>public/assets/css/bootstrap.css" media="all" type="text/css" />
|
||||
<link rel="stylesheet" href="<?php echo $site_url; ?>public/assets/css/bootstrap-responsive.css" media="all" type="text/css" />
|
||||
<link rel="stylesheet" href="<?php echo $site_url; ?>admin/themes/default/css/default.css" media="all" type="text/css" />
|
||||
<link rel="icon" href="<?php echo $site_url; ?>/favicon.ico" type="image/x-icon" />
|
||||
<link rel="shortcut icon" href="<?php echo $site_url; ?>/favicon.ico" type="image/x-icon" />
|
||||
<link rel="stylesheet" href="<?php echo $site_url; ?>/public/assets/css/bootstrap.css" media="all" type="text/css" />
|
||||
<link rel="stylesheet" href="<?php echo $site_url; ?>/admin/themes/default/css/default.css" media="all" type="text/css" />
|
||||
|
||||
<style>
|
||||
|
||||
.input-xlarge {
|
||||
width: 285px;
|
||||
.install-body {
|
||||
margin-top: 40px;
|
||||
background: #FAFAFA;
|
||||
}
|
||||
|
||||
.install-languages {
|
||||
margin: 0 auto 15px;
|
||||
margin: 20px auto 20px;
|
||||
text-align: center;
|
||||
width: 390px;
|
||||
width: 600px;
|
||||
}
|
||||
|
||||
.install-block {
|
||||
.install-block,
|
||||
.monstra-dialog,
|
||||
.install-block-footer {
|
||||
margin: 0 auto;
|
||||
float: none!important;
|
||||
max-width: 300px;
|
||||
padding: 19px 29px 29px;
|
||||
background: none repeat scroll 0 0 #fff;
|
||||
-webkit-box-shadow: 0 1px 5px rgba(0,0,0,.15);
|
||||
-moz-box-shadow: 0 1px 5px rgba(0,0,0,.15);
|
||||
box-shadow: 0 1px 5px rgba(0,0,0,.15);
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
width: 600px;
|
||||
}
|
||||
|
||||
.install-block-footer {
|
||||
margin: 0 auto;
|
||||
float: none!important;
|
||||
margin-top:10px;
|
||||
margin-bottom:10px;
|
||||
max-width: 300px;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.install-body {
|
||||
background-color: #FBFBFB;
|
||||
padding-top:40px;
|
||||
.well {
|
||||
border: none;
|
||||
border-radius: 0px;
|
||||
background: #fff;
|
||||
color: #555;
|
||||
-webkit-font-smoothing: subpixel-antialiased;
|
||||
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,.13);
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,.13);
|
||||
}
|
||||
|
||||
|
||||
.form-control {
|
||||
border-radius: 0px;
|
||||
}
|
||||
|
||||
.monstra-says {
|
||||
margin: 20px;
|
||||
}
|
||||
|
||||
.error {
|
||||
color:#8E0505;
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.ok {
|
||||
color:#00853F;
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.warn {
|
||||
color: #F74C18;
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
|
||||
.install-languages a {
|
||||
padding-left: 3px;
|
||||
padding-right: 3px;
|
||||
padding-left: 2px;
|
||||
padding-right: 2px;
|
||||
}
|
||||
|
||||
.language-link img {
|
||||
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
|
||||
filter: alpha(opacity=30);
|
||||
-moz-opacity:0.3;
|
||||
filter: alpha(opacity=30);
|
||||
-khtml-opacity: 0.3;
|
||||
opacity: 0.3;
|
||||
-moz-opacity:0.3;
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.language-link-current img{
|
||||
.language-link-current img {
|
||||
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
|
||||
filter: alpha(opacity=100);
|
||||
-moz-opacity:1.0;
|
||||
@@ -194,30 +222,19 @@
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
|
||||
.input-xlarge {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.install-languages {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.install-languages a {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.continue {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
</style>
|
||||
<script type="text/javascript" src="<?php echo $site_url; ?>public/assets/js/jquery.js"></script>
|
||||
<script type="text/javascript" src="<?php echo $site_url; ?>public/assets/js/bootstrap.js"></script>
|
||||
<script src="<?php echo $site_url; ?>/public/assets/js/jquery.min.js"></script>
|
||||
<script src="<?php echo $site_url; ?>/public/assets/js/bootstrap.min.js"></script>
|
||||
</head>
|
||||
<body class="install-body">
|
||||
|
||||
|
||||
<?php
|
||||
if (version_compare(PHP_VERSION, "5.2.0", "<")) {
|
||||
if (version_compare(PHP_VERSION, "5.2.3", "<")) {
|
||||
$errors['php'] = 'error';
|
||||
} else {
|
||||
$errors['php'] = '';
|
||||
@@ -265,215 +282,260 @@
|
||||
$errors[$dir] = 'error';
|
||||
}
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
||||
<div class="install-languages">
|
||||
<?php foreach ($languages_array as $lang_code) { ?>
|
||||
<a data-placement="top" class="language-link<?php if (Option::get('language') == $lang_code) echo ' language-link-current';?>" title="<?php echo I18n::$locales[$lang_code]; ?>" href="<?php echo $site_url.'?language=' . $lang_code; ?>"><img src="<?php echo $site_url; ?>public/assets/img/flags/<?php echo $lang_code?>.png" alt="<?php echo $lang_code?>"></a>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<div class="install-block">
|
||||
<div style="text-align:center;"><a class="brand" href="<?php echo Html::toText($site_url); ?>"><img src="<?php echo $site_url; ?>public/assets/img/monstra-logo.png" height="27" width="171" alt="Monstra"></a></div>
|
||||
<hr>
|
||||
<div>
|
||||
<form action="install.php" method="post">
|
||||
<input type="hidden" name="php" value="<?php echo $errors['php']; ?>" />
|
||||
<input type="hidden" name="simplexml" value="<?php echo $errors['simplexml']; ?>" />
|
||||
<input type="hidden" name="mod_rewrite" value="<?php echo $errors['mod_rewrite']; ?>" />
|
||||
<input type="hidden" name="install" value="<?php echo $errors['install']; ?>" />
|
||||
<input type="hidden" name="sitemap" value="<?php echo $errors['sitemap']; ?>" />
|
||||
<input type="hidden" name="htaccess" value="<?php echo $errors['htaccess']; ?>" />
|
||||
<input type="hidden" name="public" value="<?php echo $errors['public']; ?>" />
|
||||
<input type="hidden" name="storage" value="<?php echo $errors['storage']; ?>" />
|
||||
<input type="hidden" name="backups" value="<?php echo $errors['backups']; ?>" />
|
||||
<input type="hidden" name="tmp" value="<?php echo $errors['tmp']; ?>" />
|
||||
<div class="text-center"><a class="brand" href="<?php echo Html::toText($site_url); ?>"><img src="<?php echo $site_url; ?>/public/assets/img/monstra-logo-256px.png" alt="Monstra"></a></div>
|
||||
|
||||
<label><?php echo __('Site Name', 'system'); ?></label>
|
||||
<input class="input-xlarge" name="sitename" type="text" value="<?php if (Request::post('sitename')) echo Html::toText(Request::post('sitename')); ?>" />
|
||||
<br />
|
||||
<label><?php echo __('Site Url', 'system'); ?></label>
|
||||
<input class="input-xlarge" name="siteurl" type="text" value="<?php echo Html::toText($site_url); ?>" />
|
||||
<br />
|
||||
<label><?php echo __('Username', 'users'); ?></label>
|
||||
<input class="input-xlarge" class="login" name="login" value="<?php if(Request::post('login')) echo Html::toText(Request::post('login')); ?>" type="text" />
|
||||
<br />
|
||||
<label><?php echo __('Password', 'users'); ?></label>
|
||||
<input class="input-xlarge" name="password" type="password" />
|
||||
<br />
|
||||
<label><?php echo __('Time zone', 'system'); ?></label>
|
||||
<select class="input-xlarge" name="timezone">
|
||||
<option value="Kwajalein">(GMT-12:00) International Date Line West</option>
|
||||
<option value="Pacific/Samoa">(GMT-11:00) Midway Island, Samoa</option>
|
||||
<option value="Pacific/Honolulu">(GMT-10:00) Hawaii</option>
|
||||
<option value="America/Anchorage">(GMT-09:00) Alaska</option>
|
||||
<option value="America/Los_Angeles">(GMT-08:00) Pacific Time (US & Canada)</option>
|
||||
<option value="America/Tijuana">(GMT-08:00) Tijuana, Baja California</option>
|
||||
<option value="America/Denver">(GMT-07:00) Mountain Time (US & Canada)</option>
|
||||
<option value="America/Chihuahua">(GMT-07:00) Chihuahua, La Paz, Mazatlan</option>
|
||||
<option value="America/Phoenix">(GMT-07:00) Arizona</option>
|
||||
<option value="America/Regina">(GMT-06:00) Saskatchewan</option>
|
||||
<option value="America/Tegucigalpa">(GMT-06:00) Central America</option>
|
||||
<option value="America/Chicago">(GMT-06:00) Central Time (US & Canada)</option>
|
||||
<option value="America/Mexico_City">(GMT-06:00) Guadalajara, Mexico City, Monterrey</option>
|
||||
<option value="America/New_York">(GMT-05:00) Eastern Time (US & Canada)</option>
|
||||
<option value="America/Bogota">(GMT-05:00) Bogota, Lima, Quito, Rio Branco</option>
|
||||
<option value="America/Indiana/Indianapolis">(GMT-05:00) Indiana (East)</option>
|
||||
<option value="America/Caracas">(GMT-04:30) Caracas</option>
|
||||
<option value="America/Halifax">(GMT-04:00) Atlantic Time (Canada)</option>
|
||||
<option value="America/Manaus">(GMT-04:00) Manaus</option>
|
||||
<option value="America/Santiago">(GMT-04:00) Santiago</option>
|
||||
<option value="America/La_Paz">(GMT-04:00) La Paz</option>
|
||||
<option value="America/St_Johns">(GMT-03:30) Newfoundland</option>
|
||||
<option value="America/Argentina/Buenos_Aires">(GMT-03:00) Buenos Aires</option>
|
||||
<option value="America/Sao_Paulo">(GMT-03:00) Brasilia</option>
|
||||
<option value="America/Godthab">(GMT-03:00) Greenland</option>
|
||||
<option value="America/Montevideo">(GMT-03:00) Montevideo</option>
|
||||
<option value="America/Argentina/Buenos_Aires">(GMT-03:00) Georgetown</option>
|
||||
<option value="Atlantic/South_Georgia">(GMT-02:00) Mid-Atlantic</option>
|
||||
<option value="Atlantic/Azores">(GMT-01:00) Azores</option>
|
||||
<option value="Atlantic/Cape_Verde">(GMT-01:00) Cape Verde Is.</option>
|
||||
<option value="Europe/London">(GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London</option>
|
||||
<option value="Atlantic/Reykjavik">(GMT) Monrovia, Reykjavik</option>
|
||||
<option value="Africa/Casablanca">(GMT) Casablanca</option>
|
||||
<option value="Europe/Belgrade">(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague</option>
|
||||
<option value="Europe/Sarajevo">(GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb</option>
|
||||
<option value="Europe/Brussels">(GMT+01:00) Brussels, Copenhagen, Madrid, Paris</option>
|
||||
<option value="Africa/Algiers">(GMT+01:00) West Central Africa</option>
|
||||
<option value="Europe/Amsterdam">(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna</option>
|
||||
<option value="Africa/Cairo">(GMT+02:00) Cairo</option>
|
||||
<option value="Europe/Helsinki">(GMT+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius</option>
|
||||
<option value="Europe/Athens">(GMT+02:00) Athens, Bucharest, Istanbul</option>
|
||||
<option value="Asia/Jerusalem">(GMT+02:00) Jerusalem</option>
|
||||
<option value="Asia/Amman">(GMT+02:00) Amman</option>
|
||||
<option value="Asia/Beirut">(GMT+02:00) Beirut</option>
|
||||
<option value="Africa/Windhoek">(GMT+02:00) Windhoek</option>
|
||||
<option value="Africa/Harare">(GMT+02:00) Harare, Pretoria</option>
|
||||
<option value="Asia/Kuwait">(GMT+03:00) Kuwait, Riyadh</option>
|
||||
<option value="Asia/Baghdad">(GMT+03:00) Baghdad</option>
|
||||
<option value="Europe/Minsk">(GMT+03:00) Minsk</option>
|
||||
<option value="Africa/Nairobi">(GMT+03:00) Nairobi</option>
|
||||
<option value="Asia/Tbilisi">(GMT+03:00) Tbilisi</option>
|
||||
<option value="Asia/Tehran">(GMT+03:30) Tehran</option>
|
||||
<option value="Asia/Muscat">(GMT+04:00) Abu Dhabi, Muscat</option>
|
||||
<option value="Asia/Baku">(GMT+04:00) Baku</option>
|
||||
<option value="Europe/Moscow">(GMT+04:00) Moscow, St. Petersburg, Volgograd</option>
|
||||
<option value="Asia/Yerevan">(GMT+04:00) Yerevan</option>
|
||||
<option value="Asia/Karachi">(GMT+05:00) Islamabad, Karachi</option>
|
||||
<option value="Asia/Tashkent">(GMT+05:00) Tashkent</option>
|
||||
<option value="Asia/Kolkata">(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi</option>
|
||||
<option value="Asia/Colombo">(GMT+05:30) Sri Jayawardenepura</option>
|
||||
<option value="Asia/Katmandu">(GMT+05:45) Kathmandu</option>
|
||||
<option value="Asia/Dhaka">(GMT+06:00) Astana, Dhaka</option>
|
||||
<option value="Asia/Yekaterinburg">(GMT+06:00) Ekaterinburg</option>
|
||||
<option value="Asia/Rangoon">(GMT+06:30) Yangon (Rangoon)</option>
|
||||
<option value="Asia/Novosibirsk">(GMT+07:00) Almaty, Novosibirsk</option>
|
||||
<option value="Asia/Bangkok">(GMT+07:00) Bangkok, Hanoi, Jakarta</option>
|
||||
<option value="Asia/Beijing">(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi</option>
|
||||
<option value="Asia/Krasnoyarsk">(GMT+08:00) Krasnoyarsk</option>
|
||||
<option value="Asia/Ulaanbaatar">(GMT+08:00) Irkutsk, Ulaan Bataar</option>
|
||||
<option value="Asia/Kuala_Lumpur">(GMT+08:00) Kuala Lumpur, Singapore</option>
|
||||
<option value="Asia/Taipei">(GMT+08:00) Taipei</option>
|
||||
<option value="Australia/Perth">(GMT+08:00) Perth</option>
|
||||
<option value="Asia/Seoul">(GMT+09:00) Seoul</option>
|
||||
<option value="Asia/Tokyo">(GMT+09:00) Osaka, Sapporo, Tokyo</option>
|
||||
<option value="Australia/Darwin">(GMT+09:30) Darwin</option>
|
||||
<option value="Australia/Adelaide">(GMT+09:30) Adelaide</option>
|
||||
<option value="Australia/Sydney">(GMT+10:00) Canberra, Melbourne, Sydney</option>
|
||||
<option value="Australia/Brisbane">(GMT+10:00) Brisbane</option>
|
||||
<option value="Australia/Hobart">(GMT+10:00) Hobart</option>
|
||||
<option value="Asia/Yakutsk">(GMT+10:00) Yakutsk</option>
|
||||
<option value="Pacific/Guam">(GMT+10:00) Guam, Port Moresby</option>
|
||||
<option value="Asia/Vladivostok">(GMT+11:00) Vladivostok</option>
|
||||
<option value="Pacific/Fiji">(GMT+12:00) Fiji, Kamchatka, Marshall Is.</option>
|
||||
<option value="Asia/Magadan">(GMT+12:00) Magadan, Solomon Is., New Caledonia</option>
|
||||
<option value="Pacific/Auckland">(GMT+12:00) Auckland, Wellington</option>
|
||||
<option value="Pacific/Tongatapu">(GMT+13:00) Nukualofa</option>
|
||||
</select>
|
||||
<div class="install-languages">
|
||||
<?php
|
||||
if (Request::get('action') && Request::get('action') == 'install') {
|
||||
$action = '&action=install';
|
||||
} else {
|
||||
$action = '';
|
||||
}
|
||||
?>
|
||||
<?php foreach ($languages_array as $lang_code) { ?>
|
||||
<a data-placement="top" data-toggle="tooltip" class="language-link<?php if (Option::get('language') == $lang_code) echo ' language-link-current';?>" title="<?php echo I18n::$locales[$lang_code]; ?>" href="<?php echo $site_url.'/?language=' . $lang_code.$action; ?>"><img src="<?php echo $site_url; ?>/public/assets/img/flags/<?php echo $lang_code?>.png" alt="<?php echo $lang_code?>"></a>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
<div class="install-block <?php if(Request::get('action') && Request::get('action') == 'install') { ?><?php } else { ?> hide <?php } ?>">
|
||||
|
||||
<label><?php echo __('Email', 'users'); ?></label>
|
||||
<input name="email" class="input-xlarge" value="<?php if (Request::post('email')) echo Html::toText(Request::post('email')); ?>" type="text" />
|
||||
<br /><br />
|
||||
<input type="submit" class="btn" name="install_submit" value="<?php echo __('Install', 'system'); ?>" />
|
||||
</form>
|
||||
<ul class="list-unstyled">
|
||||
<?php
|
||||
// Monstra Notifications
|
||||
if (Notification::get('errors') && count(Notification::get('errors') > 0)) {
|
||||
foreach (Notification::get('errors') as $error) {
|
||||
?>
|
||||
<li class="error alert alert-danger"><?php echo $error; ?></li>
|
||||
<?php
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
|
||||
<div class="well">
|
||||
<form action="install.php?action=install" method="post">
|
||||
<input type="hidden" name="php" value="<?php echo $errors['php']; ?>">
|
||||
<input type="hidden" name="simplexml" value="<?php echo $errors['simplexml']; ?>">
|
||||
<input type="hidden" name="mod_rewrite" value="<?php echo $errors['mod_rewrite']; ?>">
|
||||
<input type="hidden" name="install" value="<?php echo $errors['install']; ?>">
|
||||
<input type="hidden" name="sitemap" value="<?php echo $errors['sitemap']; ?>">
|
||||
<input type="hidden" name="htaccess" value="<?php echo $errors['htaccess']; ?>">
|
||||
<input type="hidden" name="public" value="<?php echo $errors['public']; ?>">
|
||||
<input type="hidden" name="storage" value="<?php echo $errors['storage']; ?>">
|
||||
<input type="hidden" name="backups" value="<?php echo $errors['backups']; ?>">
|
||||
<input type="hidden" name="tmp" value="<?php echo $errors['tmp']; ?>">
|
||||
|
||||
<div class="form-group">
|
||||
<label><?php echo __('Site Name', 'system'); ?></label>
|
||||
<input class="form-control" name="sitename" type="text" value="<?php if (Request::post('sitename')) echo Html::toText(Request::post('sitename')); ?>" />
|
||||
</div>
|
||||
<hr>
|
||||
<p align="center"><strong><?php echo __('...Monstra says...', 'system'); ?></strong></p>
|
||||
<div>
|
||||
<ul>
|
||||
<?php
|
||||
|
||||
if (version_compare(PHP_VERSION, "5.2.0", "<")) {
|
||||
echo '<span class="error"><li>'.__('PHP 5.2 or greater is required', 'system').'</li></span>';
|
||||
} else {
|
||||
echo '<span class="ok"><li>'.__('PHP Version', 'system').' '.PHP_VERSION.'</li></span>';
|
||||
}
|
||||
|
||||
if (in_array('SimpleXML', $php_modules)) {
|
||||
echo '<span class="ok"><li>'.__('Module SimpleXML is installed', 'system').'</li></span>';
|
||||
} else {
|
||||
echo '<span class="error"><li>'.__('SimpleXML module is required', 'system').'</li></span>';
|
||||
}
|
||||
|
||||
if (in_array('dom', $php_modules)) {
|
||||
echo '<span class="ok"><li>'.__('Module DOM is installed', 'system').'</li></span>';
|
||||
} else {
|
||||
echo '<span class="error"><li>'.__('Module DOM is required', 'system').'</li></span>';
|
||||
}
|
||||
|
||||
if (function_exists('apache_get_modules')) {
|
||||
if ( ! in_array('mod_rewrite',apache_get_modules())) {
|
||||
echo '<span class="error"><li>'.__('Apache Mod Rewrite is required', 'system').'</li></span>';
|
||||
} else {
|
||||
echo '<span class="ok"><li>'.__('Module Mod Rewrite is installed', 'system').'</li></span>';
|
||||
}
|
||||
} else {
|
||||
echo '<span class="ok"><li>'.__('Module Mod Rewrite is installed', 'system').'</li></span>';
|
||||
}
|
||||
|
||||
foreach ($dir_array as $dir) {
|
||||
if (is_writable($dir.'/')) {
|
||||
echo '<span class="ok"><li>'.__('Directory: <b> :dir </b> writable', 'system', array(':dir' => $dir)).'</li></span>';
|
||||
} else {
|
||||
echo '<span class="error"><li>'.__('Directory: <b> :dir </b> not writable', 'system', array(':dir' => $dir)).'</li></span>';
|
||||
}
|
||||
}
|
||||
|
||||
if (is_writable(__FILE__)) {
|
||||
echo '<span class="ok"><li>'.__('Install script writable', 'system').'</li></span>';
|
||||
} else {
|
||||
echo '<span class="error"><li>'.__('Install script not writable', 'system').'</li></span>';
|
||||
}
|
||||
|
||||
if (is_writable('sitemap.xml')) {
|
||||
echo '<span class="ok"><li>'.__('Sitemap file writable', 'system').'</li></span>';
|
||||
} else {
|
||||
echo '<span class="error"><li>'.__('Sitemap file not writable', 'system').'</li></span>';
|
||||
}
|
||||
|
||||
if (is_writable('.htaccess')) {
|
||||
echo '<span class="ok"><li>'.__('Main .htaccess file writable', 'system').'</li></span>';
|
||||
} else {
|
||||
echo '<span class="error"><li>'.__('Main .htaccess file not writable', 'system').'</li></span>';
|
||||
}
|
||||
|
||||
if (isset($errors['sitename'])) echo '<span class="error"><li>'.$errors['sitename'].'</li></span>';
|
||||
if (isset($errors['siteurl'])) echo '<span class="error"><li>'.$errors['siteurl'].'</li></span>';
|
||||
if (isset($errors['login'])) echo '<span class="error"><li>'.$errors['login'].'</li></span>';
|
||||
if (isset($errors['password'])) echo '<span class="error"><li>'.$errors['password'].'</li></span>';
|
||||
if (isset($errors['email'])) echo '<span class="error"><li>'.$errors['email'].'</li></span>';
|
||||
if (isset($errors['email_valid'])) echo '<span class="error"><li>'.$errors['email_valid'].'</li></span>';
|
||||
?>
|
||||
</ul>
|
||||
<div class="form-group">
|
||||
<label><?php echo __('Site Url', 'system'); ?></label>
|
||||
<input class="form-control" name="siteurl" type="text" value="<?php echo Html::toText($site_url); ?>" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="install-block-footer">
|
||||
<div style="text-align:center;">
|
||||
<span class="small-grey-text">© 2012 - 2013 <a href="http://monstra.org" class="small-grey-text" target="_blank">Monstra</a> – <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?></span>
|
||||
|
||||
<div class="form-group">
|
||||
<label><?php echo __('Username', 'users'); ?></label>
|
||||
<input class="form-control login" name="login" value="<?php if(Request::post('login')) echo Html::toText(Request::post('login')); ?>" type="text" />
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label><?php echo __('Password', 'users'); ?></label>
|
||||
<input class="form-control" name="password" type="password" />
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label><?php echo __('Time zone', 'system'); ?></label>
|
||||
<select class="form-control" name="timezone">
|
||||
<option value="Kwajalein">(GMT-12:00) International Date Line West</option>
|
||||
<option value="Pacific/Samoa">(GMT-11:00) Midway Island, Samoa</option>
|
||||
<option value="Pacific/Honolulu">(GMT-10:00) Hawaii</option>
|
||||
<option value="America/Anchorage">(GMT-09:00) Alaska</option>
|
||||
<option value="America/Los_Angeles">(GMT-08:00) Pacific Time (US & Canada)</option>
|
||||
<option value="America/Tijuana">(GMT-08:00) Tijuana, Baja California</option>
|
||||
<option value="America/Denver">(GMT-07:00) Mountain Time (US & Canada)</option>
|
||||
<option value="America/Chihuahua">(GMT-07:00) Chihuahua, La Paz, Mazatlan</option>
|
||||
<option value="America/Phoenix">(GMT-07:00) Arizona</option>
|
||||
<option value="America/Regina">(GMT-06:00) Saskatchewan</option>
|
||||
<option value="America/Tegucigalpa">(GMT-06:00) Central America</option>
|
||||
<option value="America/Chicago">(GMT-06:00) Central Time (US & Canada)</option>
|
||||
<option value="America/Mexico_City">(GMT-06:00) Guadalajara, Mexico City, Monterrey</option>
|
||||
<option value="America/New_York">(GMT-05:00) Eastern Time (US & Canada)</option>
|
||||
<option value="America/Bogota">(GMT-05:00) Bogota, Lima, Quito, Rio Branco</option>
|
||||
<option value="America/Indiana/Indianapolis">(GMT-05:00) Indiana (East)</option>
|
||||
<option value="America/Caracas">(GMT-04:30) Caracas</option>
|
||||
<option value="America/Halifax">(GMT-04:00) Atlantic Time (Canada)</option>
|
||||
<option value="America/Manaus">(GMT-04:00) Manaus</option>
|
||||
<option value="America/Santiago">(GMT-04:00) Santiago</option>
|
||||
<option value="America/La_Paz">(GMT-04:00) La Paz</option>
|
||||
<option value="America/St_Johns">(GMT-03:30) Newfoundland</option>
|
||||
<option value="America/Argentina/Buenos_Aires">(GMT-03:00) Buenos Aires</option>
|
||||
<option value="America/Sao_Paulo">(GMT-03:00) Brasilia</option>
|
||||
<option value="America/Godthab">(GMT-03:00) Greenland</option>
|
||||
<option value="America/Montevideo">(GMT-03:00) Montevideo</option>
|
||||
<option value="America/Argentina/Buenos_Aires">(GMT-03:00) Georgetown</option>
|
||||
<option value="Atlantic/South_Georgia">(GMT-02:00) Mid-Atlantic</option>
|
||||
<option value="Atlantic/Azores">(GMT-01:00) Azores</option>
|
||||
<option value="Atlantic/Cape_Verde">(GMT-01:00) Cape Verde Is.</option>
|
||||
<option value="Europe/London">(GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London</option>
|
||||
<option value="Atlantic/Reykjavik">(GMT) Monrovia, Reykjavik</option>
|
||||
<option value="Africa/Casablanca">(GMT) Casablanca</option>
|
||||
<option value="Europe/Belgrade">(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague</option>
|
||||
<option value="Europe/Sarajevo">(GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb</option>
|
||||
<option value="Europe/Brussels">(GMT+01:00) Brussels, Copenhagen, Madrid, Paris</option>
|
||||
<option value="Africa/Algiers">(GMT+01:00) West Central Africa</option>
|
||||
<option value="Europe/Amsterdam">(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna</option>
|
||||
<option value="Africa/Cairo">(GMT+02:00) Cairo</option>
|
||||
<option value="Europe/Helsinki">(GMT+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius</option>
|
||||
<option value="Europe/Athens">(GMT+02:00) Athens, Bucharest, Istanbul</option>
|
||||
<option value="Asia/Jerusalem">(GMT+02:00) Jerusalem</option>
|
||||
<option value="Asia/Amman">(GMT+02:00) Amman</option>
|
||||
<option value="Asia/Beirut">(GMT+02:00) Beirut</option>
|
||||
<option value="Africa/Windhoek">(GMT+02:00) Windhoek</option>
|
||||
<option value="Africa/Harare">(GMT+02:00) Harare, Pretoria</option>
|
||||
<option value="Asia/Kuwait">(GMT+03:00) Kuwait, Riyadh</option>
|
||||
<option value="Asia/Baghdad">(GMT+03:00) Baghdad</option>
|
||||
<option value="Europe/Minsk">(GMT+03:00) Minsk</option>
|
||||
<option value="Africa/Nairobi">(GMT+03:00) Nairobi</option>
|
||||
<option value="Asia/Tbilisi">(GMT+03:00) Tbilisi</option>
|
||||
<option value="Asia/Tehran">(GMT+03:30) Tehran</option>
|
||||
<option value="Asia/Muscat">(GMT+04:00) Abu Dhabi, Muscat</option>
|
||||
<option value="Asia/Baku">(GMT+04:00) Baku</option>
|
||||
<option value="Europe/Moscow">(GMT+04:00) Moscow, St. Petersburg, Volgograd</option>
|
||||
<option value="Asia/Yerevan">(GMT+04:00) Yerevan</option>
|
||||
<option value="Asia/Karachi">(GMT+05:00) Islamabad, Karachi</option>
|
||||
<option value="Asia/Tashkent">(GMT+05:00) Tashkent</option>
|
||||
<option value="Asia/Kolkata">(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi</option>
|
||||
<option value="Asia/Colombo">(GMT+05:30) Sri Jayawardenepura</option>
|
||||
<option value="Asia/Katmandu">(GMT+05:45) Kathmandu</option>
|
||||
<option value="Asia/Dhaka">(GMT+06:00) Astana, Dhaka</option>
|
||||
<option value="Asia/Yekaterinburg">(GMT+06:00) Ekaterinburg</option>
|
||||
<option value="Asia/Rangoon">(GMT+06:30) Yangon (Rangoon)</option>
|
||||
<option value="Asia/Novosibirsk">(GMT+07:00) Almaty, Novosibirsk</option>
|
||||
<option value="Asia/Bangkok">(GMT+07:00) Bangkok, Hanoi, Jakarta</option>
|
||||
<option value="Asia/Beijing">(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi</option>
|
||||
<option value="Asia/Krasnoyarsk">(GMT+08:00) Krasnoyarsk</option>
|
||||
<option value="Asia/Ulaanbaatar">(GMT+08:00) Irkutsk, Ulaan Bataar</option>
|
||||
<option value="Asia/Kuala_Lumpur">(GMT+08:00) Kuala Lumpur, Singapore</option>
|
||||
<option value="Asia/Taipei">(GMT+08:00) Taipei</option>
|
||||
<option value="Australia/Perth">(GMT+08:00) Perth</option>
|
||||
<option value="Asia/Seoul">(GMT+09:00) Seoul</option>
|
||||
<option value="Asia/Tokyo">(GMT+09:00) Osaka, Sapporo, Tokyo</option>
|
||||
<option value="Australia/Darwin">(GMT+09:30) Darwin</option>
|
||||
<option value="Australia/Adelaide">(GMT+09:30) Adelaide</option>
|
||||
<option value="Australia/Sydney">(GMT+10:00) Canberra, Melbourne, Sydney</option>
|
||||
<option value="Australia/Brisbane">(GMT+10:00) Brisbane</option>
|
||||
<option value="Australia/Hobart">(GMT+10:00) Hobart</option>
|
||||
<option value="Asia/Yakutsk">(GMT+10:00) Yakutsk</option>
|
||||
<option value="Pacific/Guam">(GMT+10:00) Guam, Port Moresby</option>
|
||||
<option value="Asia/Vladivostok">(GMT+11:00) Vladivostok</option>
|
||||
<option value="Pacific/Fiji">(GMT+12:00) Fiji, Kamchatka, Marshall Is.</option>
|
||||
<option value="Asia/Magadan">(GMT+12:00) Magadan, Solomon Is., New Caledonia</option>
|
||||
<option value="Pacific/Auckland">(GMT+12:00) Auckland, Wellington</option>
|
||||
<option value="Pacific/Tongatapu">(GMT+13:00) Nukualofa</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label><?php echo __('Email', 'users'); ?></label>
|
||||
<input name="email" class="form-control" value="<?php if (Request::post('email')) echo Html::toText(Request::post('email')); ?>" type="text" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="submit" class="btn btn-primary" name="install_submit" value="<?php echo __('Install', 'system'); ?>" />
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="monstra-dialog <?php if(Request::get('action') && Request::get('action') == 'install') { ?>hide<?php } ?>">
|
||||
<ul class="list-unstyled">
|
||||
<?php
|
||||
|
||||
if (version_compare(PHP_VERSION, "5.2.0", "<")) {
|
||||
echo '<li class="error alert alert-danger">'.__('PHP 5.2 or greater is required', 'system').'</li>';
|
||||
} else {
|
||||
echo '<li class="ok alert alert-success">'.__('PHP Version', 'system').' '.PHP_VERSION.'</li>';
|
||||
}
|
||||
|
||||
if (in_array('SimpleXML', $php_modules)) {
|
||||
echo '<li class="ok alert alert-success">'.__('Module SimpleXML is installed', 'system').'</li>';
|
||||
} else {
|
||||
echo '<li class="error alert alert-danger">'.__('SimpleXML module is required', 'system').'</li>';
|
||||
}
|
||||
|
||||
if (in_array('dom', $php_modules)) {
|
||||
echo '<li class="ok alert alert-success">'.__('Module DOM is installed', 'system').'</li>';
|
||||
} else {
|
||||
echo '<li class="error alert alert-danger">'.__('Module DOM is required', 'system').'</li>';
|
||||
}
|
||||
|
||||
if (function_exists('apache_get_modules')) {
|
||||
if ( ! in_array('mod_rewrite',apache_get_modules())) {
|
||||
echo '<li class="error alert alert-danger">'.__('Apache Mod Rewrite is required', 'system').'</li>';
|
||||
} else {
|
||||
echo '<li class="ok alert alert-success">'.__('Module Mod Rewrite is installed', 'system').'</li>';
|
||||
}
|
||||
} else {
|
||||
echo '<li class="ok alert alert-success">'.__('Module Mod Rewrite is installed', 'system').'</li>';
|
||||
}
|
||||
|
||||
foreach ($dir_array as $dir) {
|
||||
if (is_writable($dir.'/')) {
|
||||
echo '<li class="ok alert alert-success">'.__('Directory: <b> :dir </b> writable', 'system', array(':dir' => $dir)).'</li>';
|
||||
} else {
|
||||
echo '<li class="error alert alert-danger">'.__('Directory: <b> :dir </b> not writable', 'system', array(':dir' => $dir)).'</li>';
|
||||
}
|
||||
}
|
||||
|
||||
if (is_writable(__FILE__)) {
|
||||
echo '<li class="ok alert alert-success">'.__('Install script writable', 'system').'</li>';
|
||||
} else {
|
||||
echo '<li class="error alert alert-danger">'.__('Install script not writable', 'system').'</li>';
|
||||
}
|
||||
|
||||
if (is_writable('sitemap.xml')) {
|
||||
echo '<li class="ok alert alert-success">'.__('Sitemap file writable', 'system').'</li>';
|
||||
} else {
|
||||
echo '<li class="error alert alert-danger">'.__('Sitemap file not writable', 'system').'</li>';
|
||||
}
|
||||
|
||||
if (is_writable('.htaccess')) {
|
||||
echo '<li class="ok alert alert-success">'.__('Main .htaccess file writable', 'system').'</li>';
|
||||
} else {
|
||||
echo '<li class="error alert alert-danger">'.__('Main .htaccess file not writable', 'system').'</li>';
|
||||
}
|
||||
|
||||
if (isset($errors['sitename'])) echo '<li class="error">'.$errors['sitename'].'</li>';
|
||||
if (isset($errors['siteurl'])) echo '<li class="error">'.$errors['siteurl'].'</li>';
|
||||
if (isset($errors['login'])) echo '<li class="error">'.$errors['login'].'</li>';
|
||||
if (isset($errors['password'])) echo '<li class="error">'.$errors['password'].'</li>';
|
||||
if (isset($errors['email'])) echo '<li class="error">'.$errors['email'].'</li>';
|
||||
if (isset($errors['email_valid'])) echo '<li class="error">'.$errors['email_valid'].'</li>';
|
||||
?>
|
||||
</ul>
|
||||
<a href="install.php?action=install" class="btn btn-primary continue"><?php echo __('Continue', 'system'); ?></a>
|
||||
</div>
|
||||
|
||||
<div class="install-block-footer login-footer">
|
||||
<div class="text-center">
|
||||
<span>© 2012 - 2014 <a href="http://monstra.org" class="small-grey-text" target="_blank">Monstra</a> – <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
$('.language-link').tooltip();
|
||||
|
||||
$(document).ready(function() {
|
||||
$('.continue').click(function() {
|
||||
$('.monstra-dialog').addClass('hide');
|
||||
$('.install-block').removeClass('hide');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -71,6 +71,12 @@ class Agent
|
||||
'infoseek',
|
||||
'lycos',
|
||||
'ia_archiver',
|
||||
'yandex',
|
||||
'mail.ru',
|
||||
'ask.com',
|
||||
'Copyscape.com',
|
||||
'bing.com',
|
||||
|
||||
);
|
||||
|
||||
/**
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -4,23 +4,17 @@
|
||||
<meta charset="utf-8">
|
||||
<title>Error</title>
|
||||
<style type="text/css">
|
||||
body {
|
||||
background: #F5F5F5;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
#gelato-error {
|
||||
background:#eee;
|
||||
background:#F5F5F5;
|
||||
color:0;
|
||||
width:95%;
|
||||
width:100%;
|
||||
font-size:14px;
|
||||
font-family:Verdana, Arial, Helvetica, "Nimbus Sans", FreeSans, Malayalam, sans-serif;
|
||||
margin:20px auto;
|
||||
|
||||
-webkit-box-shadow: 1px 1px 18px rgba(50, 50, 50, 0.75);
|
||||
-moz-box-shadow: 1px 1px 18px rgba(50, 50, 50, 0.75);
|
||||
box-shadow: 1px 1px 18px rgba(50, 50, 50, 0.75);
|
||||
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
|
||||
|
||||
}
|
||||
|
||||
#gelato-error pre {
|
||||
@@ -31,23 +25,17 @@
|
||||
}
|
||||
|
||||
#gelato-error a {
|
||||
color:#cc0a0a;
|
||||
color:#DC143C;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
#gelato-error .error {
|
||||
background:#cc0a0a;
|
||||
background:#DC143C;
|
||||
color:#fff;
|
||||
font-size:24px;
|
||||
font-weight:700;
|
||||
padding:10px;
|
||||
|
||||
-moz-border-radius-topleft: 5px;
|
||||
-webkit-border-top-left-radius: 5px;
|
||||
border-top-left-radius: 5px;
|
||||
-moz-border-radius-topright: 5px;
|
||||
-webkit-border-top-right-radius: 5px;
|
||||
border-top-right-radius: 5px;
|
||||
}
|
||||
|
||||
#gelato-error .body {
|
||||
@@ -288,7 +276,10 @@
|
||||
<?php endforeach; ?>
|
||||
</table>
|
||||
</div>
|
||||
<div style="padding-top:20px;padding-bottom:20px; padding-left:10px;"><a href="http://gelato.monstra.org">Gelato Library</a></div>
|
||||
<div style="padding-top:20px;padding-bottom:20px; padding-left:10px;">
|
||||
<a href="http://monstra.org">MONSTRA</a>
|
||||
<a href="http://gelato.monstra.org">GELATO</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -203,4 +203,26 @@ class Dir
|
||||
return $total_size;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy directory.
|
||||
* <code>
|
||||
* Dir::copy('source_folder_path', 'destination_folder_path);
|
||||
* </code>
|
||||
* @param $src
|
||||
* @param $dst
|
||||
*/
|
||||
public static function copy($src, $dst) {
|
||||
$dir = opendir($src);
|
||||
@mkdir($dst);
|
||||
while(false !== ( $file = readdir($dir)) ) {
|
||||
if (( $file != '.' ) && ( $file != '..' )) {
|
||||
if ( is_dir($src .'/'. $file) ) {
|
||||
self::copy($src .'/'. $file, $dst .'/'. $file);
|
||||
} else {
|
||||
copy($src .'/'. $file,$dst .'/'. $file);
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir($dir);
|
||||
}
|
||||
}
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -141,7 +141,7 @@ class Form
|
||||
$attributes['type'] = 'text';
|
||||
}
|
||||
|
||||
return '<input'.Html::attributes($attributes).' />';
|
||||
return '<input'.Html::attributes($attributes).'>';
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -51,7 +51,7 @@ class Html
|
||||
*
|
||||
* <code>
|
||||
*
|
||||
* // Registering a Htmlk macro
|
||||
* // Registering a Html macro
|
||||
* Html::macro('my_element', function() {
|
||||
* return '<element id="monstra">';
|
||||
* });
|
||||
@@ -61,7 +61,7 @@ class Html
|
||||
*
|
||||
*
|
||||
* // Registering a Html macro with parameters
|
||||
* Html::macro('my_element', function(id = '') {
|
||||
* Html::macro('my_element', function($id = '') {
|
||||
* return '<element id="'.$id.'">';
|
||||
* });
|
||||
*
|
||||
@@ -157,7 +157,7 @@ class Html
|
||||
*/
|
||||
public static function br($num = 1)
|
||||
{
|
||||
return str_repeat("<br />",(int) $num);
|
||||
return str_repeat("<br>",(int) $num);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -285,7 +285,7 @@ class Html
|
||||
$attributes['src'] = $file;
|
||||
$attributes['alt'] = (isset($attributes['alt'])) ? $attributes['alt'] : pathinfo($file, PATHINFO_FILENAME);
|
||||
|
||||
return '<img'.Html::attributes($attributes).' />';
|
||||
return '<img'.Html::attributes($attributes).'>';
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -173,9 +173,10 @@ class Image
|
||||
public function resize($width, $height = null, $aspect_ratio = null)
|
||||
{
|
||||
// Redefine vars
|
||||
$width = (int) $width;
|
||||
$height = ($height === null) ? null : (int) $height;
|
||||
$width = (int) $width;
|
||||
$height = ($height === null) ? null : (int) $height;
|
||||
$aspect_ratio = ($aspect_ratio === null) ? null : (int) $aspect_ratio;
|
||||
$xpos = $ypos = 0;
|
||||
|
||||
// Resizes the image to {$width}% of the original size
|
||||
if ($height === null) {
|
||||
@@ -186,13 +187,18 @@ class Image
|
||||
} else {
|
||||
|
||||
// Resizes the image to the smalles possible dimension while maintaining aspect ratio
|
||||
if ($aspect_ratio === Image::AUTO) {
|
||||
if ($aspect_ratio === Image::AUTO || $aspect_ratio === null) {
|
||||
|
||||
// Calculate smallest size based on given height and width while maintaining aspect ratio
|
||||
$percentage = min(($width / $this->width), ($height / $this->height));
|
||||
|
||||
$new_width = round($this->width * $percentage);
|
||||
$new_height = round($this->height * $percentage);
|
||||
|
||||
if ($aspect_ratio === null) {
|
||||
$xpos = (int)(($width - $new_width) / 2);
|
||||
$ypos = (int)(($height - $new_height) / 2);
|
||||
}
|
||||
|
||||
// Resizes the image using the width to maintain aspect ratio
|
||||
} elseif ($aspect_ratio === Image::WIDTH) {
|
||||
@@ -216,24 +222,28 @@ class Image
|
||||
}
|
||||
}
|
||||
|
||||
// Create a new true color image width new width and height
|
||||
$resized = imagecreatetruecolor($new_width, $new_height);
|
||||
$old_image = $this->image;
|
||||
|
||||
if ($aspect_ratio === null) {
|
||||
$this->image = imagecreatetruecolor($width, $height);
|
||||
} else {
|
||||
$this->image = imagecreatetruecolor($new_width, $new_height);
|
||||
}
|
||||
|
||||
if ($this->type === IMAGETYPE_PNG) {
|
||||
$bgcolor = imagecolorallocatealpha($this->image, 0, 0, 0, 127);
|
||||
} else {
|
||||
$bgcolor = imagecolorallocate($this->image, 255, 255, 255);
|
||||
}
|
||||
|
||||
imagefill($this->image, 0, 0, $bgcolor);
|
||||
|
||||
// Copy and resize part of an image with resampling
|
||||
imagecopyresampled($resized, $this->image, 0, 0, 0, 0, $new_width, $new_height, $this->width, $this->height);
|
||||
imagecopyresampled($this->image, $old_image, $xpos, $ypos, 0, 0, $new_width, $new_height, $this->width, $this->height);
|
||||
|
||||
// Destroy an image
|
||||
imagedestroy($this->image);
|
||||
|
||||
// Create a new true color image width new width and height
|
||||
$this->image = imagecreatetruecolor($new_width, $new_height);
|
||||
|
||||
// Copy and resize part of an image with resampling
|
||||
imagecopyresampled($this->image, $resized, 0, 0, 0, 0, $new_width, $new_height, $new_width, $new_height);
|
||||
|
||||
// Destroy an image
|
||||
imagedestroy($resized);
|
||||
|
||||
imagedestroy($old_image);
|
||||
|
||||
// Save new width and height
|
||||
$this->width = $new_width;
|
||||
$this->height = $new_height;
|
||||
@@ -259,32 +269,28 @@ class Image
|
||||
// Redefine vars
|
||||
$width = (int) $width;
|
||||
$height = (int) $height;
|
||||
$x = (int) $x;
|
||||
$y = (int) $y;
|
||||
$x = (int) $x;
|
||||
$y = (int) $y;
|
||||
|
||||
// Calculate
|
||||
if ($x + $width > $this->width) $width = $this->width - $x;
|
||||
if ($y + $height > $this->height) $height = $this->height - $y;
|
||||
if ($width <= 0 || $height <= 0) return false;
|
||||
|
||||
// Create a new true color image
|
||||
$crop = imagecreatetruecolor($width, $height);
|
||||
|
||||
// Copy and resize part of an image with resampling
|
||||
imagecopyresampled($crop, $this->image, 0, 0, $x, $y, $this->width, $this->height, $this->width, $this->height);
|
||||
|
||||
// Destroy an image
|
||||
imagedestroy($this->image);
|
||||
|
||||
$old_image = $this->image;
|
||||
|
||||
// Create a new true color image
|
||||
$this->image = imagecreatetruecolor($width, $height);
|
||||
|
||||
$transparent = imagecolorallocatealpha($this->image, 0, 0, 0, 127);
|
||||
imagefill($this->image, 0, 0, $transparent);
|
||||
|
||||
// Copy and resize part of an image with resampling
|
||||
imagecopyresampled($this->image, $crop, 0, 0, 0, 0, $width, $height, $width, $height);
|
||||
imagecopyresampled($this->image, $old_image, 0, 0, $x, $y, $width, $height, $width, $height);
|
||||
|
||||
// Destroy an image
|
||||
imagedestroy($crop);
|
||||
|
||||
imagedestroy($old_image);
|
||||
|
||||
// Save new width and height
|
||||
$this->width = $width;
|
||||
$this->height = $height;
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -10,7 +10,7 @@
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @author Stephen Clay <steve@mrclay.org>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -109,23 +109,9 @@ class MinifyCSS
|
||||
(\\b|[#\'"-]) # 3 = first character of a value
|
||||
/x', '$1$2:$3', $css);
|
||||
|
||||
// remove ws in selectors
|
||||
$css = preg_replace_callback('/
|
||||
(?: # non-capture
|
||||
\\s*
|
||||
[^~>+,\\s]+ # selector part
|
||||
\\s*
|
||||
[,>+~] # combinators
|
||||
)+
|
||||
\\s*
|
||||
[^~>+,\\s]+ # selector part
|
||||
{ # open declaration block
|
||||
/x'
|
||||
,array($this, '_selectorsCB'), $css);
|
||||
|
||||
// minimize hex colors
|
||||
$css = preg_replace('/([^=])#([a-f\\d])\\2([a-f\\d])\\3([a-f\\d])\\4([\\s;\\}])/i'
|
||||
, '$1#$2$3$4$5', $css);
|
||||
/*$css = preg_replace('/([^=])#([a-f\\d])\\2([a-f\\d])\\3([a-f\\d])\\4([\\s;\\}])/i'
|
||||
, '$1#$2$3$4$5', $css);*/
|
||||
|
||||
// remove spaces between font families
|
||||
$css = preg_replace_callback('/font-family:([^;}]+)([;}])/'
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -28,7 +28,7 @@ class Number
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert bytes in 'kb','mb','gb','tb','pb'
|
||||
* Convert bytes in 'KB','MB','GB','TiB','PiB'
|
||||
*
|
||||
* <code>
|
||||
* echo Number::byteFormat(10000);
|
||||
@@ -42,9 +42,31 @@ class Number
|
||||
// Redefine vars
|
||||
$size = (int) $size;
|
||||
|
||||
$unit = array('b', 'kb', 'mb', 'gb', 'tb', 'pb');
|
||||
$unit = array('B', 'KB', 'MB', 'GB', 'TiB', 'PiB');
|
||||
|
||||
return @round($size/pow(1024, ($i=floor(log($size, 1024)))), 2).' '.$unit[$i];
|
||||
return @round($size/pow(1024, ($i=floor(log($size, 1024)))), 2).' '.$unit[($i < 0 ? 0 : $i)];
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert 'KB','MB','GB' in bytes
|
||||
*
|
||||
* <code>
|
||||
* echo Number::convertToBytes('10MB');
|
||||
* </code>
|
||||
*
|
||||
* @param string $num Number to convert
|
||||
* @return int
|
||||
*/
|
||||
public static function convertToBytes( $num ) {
|
||||
$num = strtolower( $num );
|
||||
$bytes = (int) $num;
|
||||
if ( strpos( $num, 'k' ) !== false )
|
||||
$bytes = intval( $num ) * 1024;
|
||||
elseif ( strpos( $num, 'm' ) !== false )
|
||||
$bytes = intval($num) * 1024 * 1024;
|
||||
elseif ( strpos( $num, 'g' ) !== false )
|
||||
$bytes = intval( $num ) * 1024 * 1024 * 1024;
|
||||
return $bytes;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
@@ -24,6 +24,12 @@ class Zip
|
||||
public $offset = 0;
|
||||
public $now;
|
||||
|
||||
private $_archive_info = array();
|
||||
private $_zip_signature = "\x50\x4b\x03\x04";
|
||||
private $_dir_signature = "\x50\x4b\x01\x02";
|
||||
private $_central_signature_end = "\x50\x4b\x05\x06";
|
||||
private $farc = null;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
@@ -264,7 +270,7 @@ class Zip
|
||||
* @param string $root_path Root path
|
||||
* @return mixed
|
||||
*/
|
||||
public function readDir($path, $preserve_filepath = true, $root_path = null)
|
||||
public function readDir($path, $preserve_filepath = true, $root_path = null, $exclude_files = array())
|
||||
{
|
||||
if ( ! $fp = @opendir($path)) {
|
||||
return false;
|
||||
@@ -277,12 +283,12 @@ class Zip
|
||||
|
||||
while (false !== ($file = readdir($fp))) {
|
||||
|
||||
if (substr($file, 0, 1) == '.') {
|
||||
if (substr($file, 0, 1) == '.' || in_array($path.$file, $exclude_files)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (@is_dir($path.$file)) {
|
||||
$this->readDir($path.$file."/", $preserve_filepath, $root_path);
|
||||
$this->readDir($path.$file."/", $preserve_filepath, $root_path, $exclude_files);
|
||||
} else {
|
||||
if (false !== ($data = file_get_contents($path.$file))) {
|
||||
$name = str_replace("\\", "/", $path);
|
||||
@@ -372,4 +378,302 @@ class Zip
|
||||
$this->offset = 0;
|
||||
}
|
||||
|
||||
public function extract($zip_file, $target_dir = null)
|
||||
{
|
||||
$chmod = 0777;
|
||||
$this->_archive_info = array();
|
||||
|
||||
$files = $this->_read_archive($zip_file);
|
||||
|
||||
if (!$files) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$file_locations = array();
|
||||
foreach ($files as $file => $trash) {
|
||||
$dirname = pathinfo($file, PATHINFO_DIRNAME);
|
||||
|
||||
$folders = explode('/', $dirname);
|
||||
$out_dn = $target_dir . '/' . $dirname;
|
||||
|
||||
if ( !is_dir($out_dn)) {
|
||||
$str = '';
|
||||
foreach ($folders as $folder) {
|
||||
$str = $str ? $str . '/' . $folder : $folder;
|
||||
if ( !is_dir($target_dir . '/' . $str)) {
|
||||
if ( ! @mkdir($target_dir . '/' . $str)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
chmod($target_dir . '/' . $str, $chmod);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (substr($file, -1, 1) == '/') {
|
||||
continue;
|
||||
}
|
||||
|
||||
$file_locations[] = $file_location = $target_dir . '/' . $file;
|
||||
|
||||
$this->_extract_file($file, $file_location);
|
||||
}
|
||||
|
||||
$this->_archive_info = array();
|
||||
|
||||
return $file_locations;
|
||||
}
|
||||
|
||||
private function _read_archive($zip_file)
|
||||
{
|
||||
if (sizeof($this->_archive_info)) {
|
||||
return $this->_archive_info;
|
||||
}
|
||||
|
||||
$fh = fopen($zip_file, 'r');
|
||||
$this->farc = &$fh;
|
||||
|
||||
if ( !$fh) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( !$this->_read_file_list_by_eof($fh)) {
|
||||
if ( !$this->_read_files_by_signatures($fh)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->_archive_info;
|
||||
}
|
||||
|
||||
private function _read_file_list_by_eof(&$fh)
|
||||
{
|
||||
for ($x = 0; $x < 1024; $x++) {
|
||||
fseek($fh, -22 - $x, SEEK_END);
|
||||
|
||||
$signature = fread($fh, 4);
|
||||
|
||||
if ($signature == $this->_central_signature_end) {
|
||||
$eodir['disk_number_this'] = unpack("v", fread($fh, 2));
|
||||
$eodir['disk_number'] = unpack("v", fread($fh, 2));
|
||||
$eodir['total_entries_this'] = unpack("v", fread($fh, 2));
|
||||
$eodir['total_entries'] = unpack("v", fread($fh, 2));
|
||||
$eodir['size_of_cd'] = unpack("V", fread($fh, 4));
|
||||
$eodir['offset_start_cd'] = unpack("V", fread($fh, 4));
|
||||
$zip_comment_lenght = unpack("v", fread($fh, 2));
|
||||
$eodir['zipfile_comment'] = $zip_comment_lenght[1] ? fread($fh, $zip_comment_lenght[1]) : '';
|
||||
|
||||
fseek($fh, $eodir['offset_start_cd'][1]);
|
||||
$signature = fread($fh, 4);
|
||||
|
||||
while ($signature == $this->_dir_signature) {
|
||||
$dir['version_madeby'] = unpack("v", fread($fh, 2));
|
||||
$dir['version_needed'] = unpack("v", fread($fh, 2));
|
||||
$dir['general_bit_flag'] = unpack("v", fread($fh, 2));
|
||||
$dir['compression_method'] = unpack("v", fread($fh, 2));
|
||||
$dir['lastmod_time'] = unpack("v", fread($fh, 2));
|
||||
$dir['lastmod_date'] = unpack("v", fread($fh, 2));
|
||||
$dir['crc-32'] = fread($fh, 4);
|
||||
$dir['compressed_size'] = unpack("V", fread($fh, 4));
|
||||
$dir['uncompressed_size'] = unpack("V", fread($fh, 4));
|
||||
$zip_file_length = unpack("v", fread($fh, 2));
|
||||
$extra_field_length = unpack("v", fread($fh, 2));
|
||||
$fileCommentLength = unpack("v", fread($fh, 2));
|
||||
$dir['disk_number_start'] = unpack("v", fread($fh, 2));
|
||||
$dir['internal_attributes'] = unpack("v", fread($fh, 2));
|
||||
$dir['external_attributes1'] = unpack("v", fread($fh, 2));
|
||||
$dir['external_attributes2'] = unpack("v", fread($fh, 2));
|
||||
$dir['relative_offset'] = unpack("V", fread($fh, 4));
|
||||
$dir['file_name'] = fread($fh, $zip_file_length[1]);
|
||||
$dir['extra_field'] = $extra_field_length[1] ? fread($fh, $extra_field_length[1]) : '';
|
||||
$dir['file_comment'] = $fileCommentLength[1] ? fread($fh, $fileCommentLength[1]) : '';
|
||||
|
||||
$binary_mod_date = str_pad(decbin($dir['lastmod_date'][1]), 16, '0', STR_PAD_LEFT);
|
||||
$binary_mod_time = str_pad(decbin($dir['lastmod_time'][1]), 16, '0', STR_PAD_LEFT);
|
||||
$last_mod_year = bindec(substr($binary_mod_date, 0, 7)) + 1980;
|
||||
$last_mod_month = bindec(substr($binary_mod_date, 7, 4));
|
||||
$last_mod_day = bindec(substr($binary_mod_date, 11, 5));
|
||||
$last_mod_hour = bindec(substr($binary_mod_time, 0, 5));
|
||||
$last_mod_minute = bindec(substr($binary_mod_time, 5, 6));
|
||||
$last_mod_second = bindec(substr($binary_mod_time, 11, 5));
|
||||
|
||||
$central_dir_list[$dir['file_name']] = array(
|
||||
'version_madeby' => $dir['version_madeby'][1],
|
||||
'version_needed' => $dir['version_needed'][1],
|
||||
'general_bit_flag' => str_pad(decbin($dir['general_bit_flag'][1]), 8, '0', STR_PAD_LEFT),
|
||||
'compression_method' => $dir['compression_method'][1],
|
||||
'lastmod_datetime' => mktime($last_mod_hour, $last_mod_minute, $last_mod_second, $last_mod_month, $last_mod_day, $last_mod_year),
|
||||
'crc-32' => str_pad(dechex(ord($dir['crc-32'][3])), 2, '0', STR_PAD_LEFT) .
|
||||
str_pad(dechex(ord($dir['crc-32'][2])), 2, '0', STR_PAD_LEFT) .
|
||||
str_pad(dechex(ord($dir['crc-32'][1])), 2, '0', STR_PAD_LEFT) .
|
||||
str_pad(dechex(ord($dir['crc-32'][0])), 2, '0', STR_PAD_LEFT),
|
||||
'compressed_size' => $dir['compressed_size'][1],
|
||||
'uncompressed_size' => $dir['uncompressed_size'][1],
|
||||
'disk_number_start' => $dir['disk_number_start'][1],
|
||||
'internal_attributes' => $dir['internal_attributes'][1],
|
||||
'external_attributes1' => $dir['external_attributes1'][1],
|
||||
'external_attributes2' => $dir['external_attributes2'][1],
|
||||
'relative_offset' => $dir['relative_offset'][1],
|
||||
'file_name' => $dir['file_name'],
|
||||
'extra_field' => $dir['extra_field'],
|
||||
'file_comment' => $dir['file_comment'],
|
||||
);
|
||||
|
||||
$signature = fread($fh, 4);
|
||||
}
|
||||
|
||||
if (isset($central_dir_list)) {
|
||||
foreach ($central_dir_list as $filename => $details) {
|
||||
$i = $this->_get_file_header($fh, $details['relative_offset']);
|
||||
|
||||
$this->_archive_info[$filename]['file_name'] = $filename;
|
||||
$this->_archive_info[$filename]['compression_method'] = $details['compression_method'];
|
||||
$this->_archive_info[$filename]['version_needed'] = $details['version_needed'];
|
||||
$this->_archive_info[$filename]['lastmod_datetime'] = $details['lastmod_datetime'];
|
||||
$this->_archive_info[$filename]['crc-32'] = $details['crc-32'];
|
||||
$this->_archive_info[$filename]['compressed_size'] = $details['compressed_size'];
|
||||
$this->_archive_info[$filename]['uncompressed_size'] = $details['uncompressed_size'];
|
||||
$this->_archive_info[$filename]['lastmod_datetime'] = $details['lastmod_datetime'];
|
||||
$this->_archive_info[$filename]['extra_field'] = $i['extra_field'];
|
||||
$this->_archive_info[$filename]['contents_start_offset'] = $i['contents_start_offset'];
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private function _read_files_by_signatures(&$fh)
|
||||
{
|
||||
fseek($fh, 0);
|
||||
|
||||
$return = false;
|
||||
for (;;) {
|
||||
$details = $this->_get_file_header($fh);
|
||||
|
||||
if ( !$details) {
|
||||
fseek($fh, 12 - 4, SEEK_CUR);
|
||||
$details = $this->_get_file_header($fh);
|
||||
}
|
||||
|
||||
if ( !$details) {
|
||||
break;
|
||||
}
|
||||
|
||||
$filename = $details['file_name'];
|
||||
$this->_archive_info[$filename] = $details;
|
||||
$return = true;
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
private function _get_file_header(&$fh, $start_offset = FALSE)
|
||||
{
|
||||
if ($start_offset !== false) {
|
||||
fseek($fh, $start_offset);
|
||||
}
|
||||
|
||||
$signature = fread($fh, 4);
|
||||
|
||||
if ($signature == $this->_zip_signature) {
|
||||
$file['version_needed'] = unpack("v", fread($fh, 2));
|
||||
$file['general_bit_flag'] = unpack("v", fread($fh, 2));
|
||||
$file['compression_method'] = unpack("v", fread($fh, 2));
|
||||
$file['lastmod_time'] = unpack("v", fread($fh, 2));
|
||||
$file['lastmod_date'] = unpack("v", fread($fh, 2));
|
||||
$file['crc-32'] = fread($fh, 4);
|
||||
$file['compressed_size'] = unpack("V", fread($fh, 4));
|
||||
$file['uncompressed_size'] = unpack("V", fread($fh, 4));
|
||||
$zip_file_length = unpack("v", fread($fh, 2));
|
||||
$extra_field_length = unpack("v", fread($fh, 2));
|
||||
$file['file_name'] = fread($fh, $zip_file_length[1]);
|
||||
$file['extra_field'] = $extra_field_length[1] ? fread($fh, $extra_field_length[1]) : '';
|
||||
$file['contents_start_offset'] = ftell($fh);
|
||||
|
||||
fseek($fh, $file['compressed_size'][1], SEEK_CUR);
|
||||
|
||||
$binary_mod_date = str_pad(decbin($file['lastmod_date'][1]), 16, '0', STR_PAD_LEFT);
|
||||
$binary_mod_time = str_pad(decbin($file['lastmod_time'][1]), 16, '0', STR_PAD_LEFT);
|
||||
|
||||
$last_mod_year = bindec(substr($binary_mod_date, 0, 7)) + 1980;
|
||||
$last_mod_month = bindec(substr($binary_mod_date, 7, 4));
|
||||
$last_mod_day = bindec(substr($binary_mod_date, 11, 5));
|
||||
$last_mod_hour = bindec(substr($binary_mod_time, 0, 5));
|
||||
$last_mod_minute = bindec(substr($binary_mod_time, 5, 6));
|
||||
$last_mod_second = bindec(substr($binary_mod_time, 11, 5));
|
||||
|
||||
return array(
|
||||
'file_name' => $file['file_name'],
|
||||
'compression_method' => $file['compression_method'][1],
|
||||
'version_needed' => $file['version_needed'][1],
|
||||
'lastmod_datetime' => mktime($last_mod_hour, $last_mod_minute, $last_mod_second, $last_mod_month, $last_mod_day, $last_mod_year),
|
||||
'crc-32' => str_pad(dechex(ord($file['crc-32'][3])), 2, '0', STR_PAD_LEFT) .
|
||||
str_pad(dechex(ord($file['crc-32'][2])), 2, '0', STR_PAD_LEFT) .
|
||||
str_pad(dechex(ord($file['crc-32'][1])), 2, '0', STR_PAD_LEFT) .
|
||||
str_pad(dechex(ord($file['crc-32'][0])), 2, '0', STR_PAD_LEFT),
|
||||
'compressed_size' => $file['compressed_size'][1],
|
||||
'uncompressed_size' => $file['uncompressed_size'][1],
|
||||
'extra_field' => $file['extra_field'],
|
||||
'general_bit_flag' => str_pad(decbin($file['general_bit_flag'][1]), 8, '0', STR_PAD_LEFT),
|
||||
'contents_start_offset' => $file['contents_start_offset']
|
||||
);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private function _extract_file($compressed_file_name, $target_file_name = false)
|
||||
{
|
||||
if ( !sizeof($this->_archive_info)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$fdetails = &$this->_archive_info[$compressed_file_name];
|
||||
|
||||
if ( ! isset($this->_archive_info[$compressed_file_name])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (substr($compressed_file_name, -1) == '/') {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( !$fdetails['uncompressed_size']) {
|
||||
return $target_file_name ? file_put_contents($target_file_name, '') : '';
|
||||
}
|
||||
|
||||
fseek($this->farc, $fdetails['contents_start_offset']);
|
||||
$ret = $this->_uncompress(
|
||||
fread($this->farc, $fdetails['compressed_size']),
|
||||
$fdetails['compression_method'],
|
||||
$fdetails['uncompressed_size'],
|
||||
$target_file_name
|
||||
);
|
||||
|
||||
if ($target_file_name) {
|
||||
chmod($target_file_name, 0644);
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
private function _uncompress($content, $mode, $uncompressed_size, $target_file_name = false)
|
||||
{
|
||||
switch ($mode) {
|
||||
case 0:
|
||||
return $target_file_name ? file_put_contents($target_file_name, $content) : $content;
|
||||
case 8:
|
||||
return $target_file_name
|
||||
? file_put_contents($target_file_name, gzinflate($content, $uncompressed_size))
|
||||
: gzinflate($content, $uncompressed_size);
|
||||
case 12:
|
||||
return $target_file_name
|
||||
? file_put_contents($target_file_name, bzdecompress($content)) : bzdecompress($content);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
40
plugins/blog/README.md
Normal file
40
plugins/blog/README.md
Normal file
@@ -0,0 +1,40 @@
|
||||
Blog
|
||||
================
|
||||
|
||||
### Usage
|
||||
|
||||
#### Get Post
|
||||
<?php echo Blog::getPost(); ?>
|
||||
|
||||
#### Get Posts
|
||||
<?php echo Blog::getPosts(); ?>
|
||||
|
||||
#### Get 5 Posts (could be any amount, 5 or 1 or 25):
|
||||
<?php echo Blog::getPosts(5); ?>
|
||||
|
||||
#### Get related Posts
|
||||
<?php echo Blog::getRelatedPosts(); ?>
|
||||
|
||||
#### Get 4 latest posts from Blog
|
||||
<?php echo Blog::getPostsBlock(4); ?>
|
||||
|
||||
#### Get Tags&Keywords
|
||||
<?php Blog::getTags(); ?>
|
||||
|
||||
#### Get Tags&Keywords for current page
|
||||
<?php Blog::getTags(Page::slug()); ?>
|
||||
|
||||
Get Post Title
|
||||
<?php echo Blog::getPostTitle(); ?>
|
||||
|
||||
### Shortcode for content
|
||||
|
||||
#### Divided post into 2 parts (short and full)
|
||||
{cut}
|
||||
|
||||
Example:
|
||||
|
||||
<p>Best free themes for Monstra CMS at monstrathemes.com</p>
|
||||
{cut}
|
||||
<p>There is going to display your content as blog post =)</p>
|
||||
|
416
plugins/blog/blog.plugin.php
Normal file
416
plugins/blog/blog.plugin.php
Normal file
@@ -0,0 +1,416 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Blog plugin
|
||||
*
|
||||
* @package Monstra
|
||||
* @subpackage Plugins
|
||||
* @author Romanenko Sergey / Awilum
|
||||
* @copyright 2012 Romanenko Sergey / Awilum
|
||||
* @version 1.7.3
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
// Register plugin
|
||||
Plugin::register( __FILE__,
|
||||
__('Blog', 'blog'),
|
||||
__('Blog plugin for Monstra', 'blog'),
|
||||
'1.7.3',
|
||||
'Awilum',
|
||||
'http://monstra.org/');
|
||||
|
||||
// Add action
|
||||
Action::add('frontend_pre_render', 'Blog::_rss');
|
||||
|
||||
/**
|
||||
* Blog Class
|
||||
*/
|
||||
class Blog {
|
||||
|
||||
|
||||
/**
|
||||
* Parrent page name(slug)
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $parent_page_name = 'blog';
|
||||
|
||||
/**
|
||||
* Get tags
|
||||
*
|
||||
* <code>
|
||||
* echo Blog::getTags();
|
||||
* </code>
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getTags($slug = null) {
|
||||
|
||||
// Display view
|
||||
return View::factory('blog/views/frontend/tags')
|
||||
->assign('tags', Blog::getTagsArray($slug))
|
||||
->render();
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get breadcrumbs
|
||||
*
|
||||
* <code>
|
||||
* echo Blog::breadcrumbs();
|
||||
* </code>
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function breadcrumbs($locale = '') {
|
||||
|
||||
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
|
||||
|
||||
$current_page = Pages::$requested_page;
|
||||
$parent_page = '';
|
||||
if ($current_page !== 'error404') {
|
||||
$page = Pages::$pages->select('[slug="'.$current_page.'" and locale="'.$locale.'"]', null);
|
||||
if (trim($page['parent']) !== '') {
|
||||
$parent = true;
|
||||
$parent_page = Pages::$pages->select('[slug="'.$page['parent'].'" and locale="'.$locale.'"]', null);
|
||||
} else {
|
||||
$parent = false;
|
||||
}
|
||||
|
||||
// Display view
|
||||
View::factory('blog/views/frontend/breadcrumbs')
|
||||
->assign('current_page', $current_page)
|
||||
->assign('page', $page)
|
||||
->assign('parent', $parent)
|
||||
->assign('parent_page', $parent_page)
|
||||
->display();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get tags array
|
||||
*
|
||||
* <code>
|
||||
* echo Blog::getTagsArray();
|
||||
* </code>
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getTagsArray($slug = null, $locale='') {
|
||||
|
||||
// Init vars
|
||||
$tags = array();
|
||||
$tags_string = '';
|
||||
|
||||
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
|
||||
|
||||
if ($slug == null) {
|
||||
$posts = Pages::$pages->select('[parent="'.Blog::$parent_page_name.'" and status="published" and locale="'.$locale.'"]', 'all');
|
||||
} else {
|
||||
$posts = Pages::$pages->select('[parent="'.Blog::$parent_page_name.'" and status="published" and slug="'.$slug.'" and locale="'.$locale.'"]', 'all');
|
||||
}
|
||||
|
||||
foreach($posts as $post) {
|
||||
if (isset($post['tags'])) {
|
||||
$tags_string .= $post['tags'].',';
|
||||
}
|
||||
}
|
||||
|
||||
$tags_string = substr($tags_string, 0, strlen($tags_string)-1);
|
||||
|
||||
// Explode tags in tags array
|
||||
$tags = explode(',', $tags_string);
|
||||
|
||||
// Remove empty array elementss
|
||||
foreach ($tags as $key => $value) {
|
||||
if ($tags[$key] == '') {
|
||||
unset($tags[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
// Trim tags
|
||||
array_walk($tags, create_function('&$val', '$val = trim($val);'));
|
||||
|
||||
// Get unique tags
|
||||
$tags = array_unique($tags);
|
||||
|
||||
// Return tags
|
||||
return $tags;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get posts
|
||||
*
|
||||
* <code>
|
||||
* // Get all posts
|
||||
* echo Blog::getPosts();
|
||||
*
|
||||
* // Get last 5 posts
|
||||
* echo Blog::getPosts(5);
|
||||
* </code>
|
||||
*
|
||||
* @param integer $num Number of posts to show
|
||||
* @return string
|
||||
*/
|
||||
public static function getPosts($nums = 10, $locale = '') {
|
||||
|
||||
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
|
||||
|
||||
// Get page param
|
||||
$page = (Request::get('page')) ? (int)Request::get('page') : 1;
|
||||
|
||||
if (Request::get('tag')) {
|
||||
$query = '[parent="'.Blog::$parent_page_name.'" and status="published" and locale="'.$locale.'" and contains(tags, "'.Request::get('tag').'")]';
|
||||
Notification::set('tag', Request::get('tag'));
|
||||
} else {
|
||||
$query = '[parent="'.Blog::$parent_page_name.'" and status="published" and locale="'.$locale.'"]';
|
||||
Notification::clean();
|
||||
}
|
||||
|
||||
// Get Elements Count
|
||||
$elements = count(Pages::$pages->select($query, 'all'));
|
||||
|
||||
// Get Pages Count
|
||||
$pages = ceil($elements/$nums);
|
||||
|
||||
|
||||
if ($page < 1) {
|
||||
$page = 1;
|
||||
} elseif ($page > $pages) {
|
||||
$page = $pages;
|
||||
}
|
||||
|
||||
$start = ($page-1)*$nums;
|
||||
|
||||
// If there is no posts
|
||||
if ($start < 0) $start = 0;
|
||||
|
||||
// Get posts and sort by DESC
|
||||
$posts = Pages::$pages->select($query, $nums, $start, array('slug', 'title', 'author', 'date', 'locale', 'template'), 'date', 'DESC');
|
||||
|
||||
// Loop
|
||||
foreach($posts as $key => $post) {
|
||||
$post_short = explode("{cut}", Text::toHtml(File::getContent(STORAGE . DS . 'pages' . DS . $post['id'] . '.page.txt')));
|
||||
$posts[$key]['content'] = Filter::apply('content', $post_short[0]);
|
||||
$posts[$key]['slug'] = $posts[$key]['slug'];
|
||||
$posts[$key]['locale'] = ($posts[$key]['locale'] == Site::getCurrentSiteLocale()) ? '' : $posts[$key]['locale'].'/';
|
||||
}
|
||||
|
||||
// Display view
|
||||
return View::factory('blog/views/frontend/index')
|
||||
->assign('posts', $posts)
|
||||
->render().
|
||||
View::factory('blog/views/frontend/pager')
|
||||
->assign('pages', $pages)
|
||||
->assign('page', $page)
|
||||
->render();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get posts block
|
||||
*
|
||||
* <code>
|
||||
* // Get all posts
|
||||
* echo Blog::getPostsBlock();
|
||||
*
|
||||
* // Get last 5 posts
|
||||
* echo Blog::getPostsBlock(5);
|
||||
* </code>
|
||||
*
|
||||
* @param integer $num Number of posts to show
|
||||
* @return string
|
||||
*/
|
||||
public static function getPostsBlock($nums = 10, $locale = '') {
|
||||
|
||||
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
|
||||
|
||||
// XPath Query
|
||||
$query = '[parent="'.Blog::$parent_page_name.'" and status="published" and locale="'.$locale.'"]';
|
||||
|
||||
// Get posts and sort by DESC
|
||||
$posts = Pages::$pages->select($query, $nums, 0, array('slug', 'title', 'author', 'date'), 'date', 'DESC');
|
||||
|
||||
// Loop
|
||||
foreach($posts as $key => $post) {
|
||||
$post_short = explode("{cut}", Text::toHtml(File::getContent(STORAGE . DS . 'pages' . DS . $post['id'] . '.page.txt')));
|
||||
$posts[$key]['content'] = Filter::apply('content', $post_short[0]);
|
||||
}
|
||||
|
||||
// Display view
|
||||
return View::factory('blog/views/frontend/block')
|
||||
->assign('posts', $posts)
|
||||
->render();
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get related posts
|
||||
*
|
||||
* <code>
|
||||
* echo Blog::getRelatedPosts();
|
||||
* </code>
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getRelatedPosts($limit = null, $locale = '') {
|
||||
|
||||
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
|
||||
|
||||
$related_posts = array();
|
||||
$tags = Blog::getTagsArray(Page::slug());
|
||||
|
||||
foreach($tags as $tag) {
|
||||
|
||||
$query = '[parent="'.Blog::$parent_page_name.'" and locale="'.$locale.'" and status="published" and contains(tags, "'.$tag.'") and slug!="'.Page::slug().'"]';
|
||||
|
||||
if ($result = Arr::subvalSort(Pages::$pages->select($query, ($limit == null) ? 'all' : (int)$limit), 'date', 'DESC')) {
|
||||
$related_posts = $result;
|
||||
}
|
||||
}
|
||||
|
||||
// Display view
|
||||
return View::factory('blog/views/frontend/related_posts')
|
||||
->assign('related_posts', $related_posts)
|
||||
->render();
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get post content
|
||||
*
|
||||
* <code>
|
||||
* echo Blog::getPost();
|
||||
* </code>
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getPost() {
|
||||
|
||||
// Get post
|
||||
$post = Text::toHtml(File::getContent(STORAGE . DS . 'pages' . DS . Pages::$page['id'] . '.page.txt'));
|
||||
|
||||
// Apply content filter
|
||||
$post = Filter::apply('content', $post);
|
||||
|
||||
// Remove {cut} shortcode
|
||||
$post = strtr($post, array('{cut}' => ''));
|
||||
|
||||
// Return post
|
||||
return $post;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get post content before cut
|
||||
*
|
||||
* <code>
|
||||
* echo Blog::getPostBeforeCut('home');
|
||||
* </code>
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getPostBeforeCut($slug, $locale = '') {
|
||||
|
||||
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
|
||||
|
||||
$page = Pages::$pages->select('[slug="'.$slug.'" and locale="'.$locale.'"]', null);
|
||||
|
||||
// Get post
|
||||
$post = explode("{cut}", Text::toHtml(File::getContent(STORAGE . DS . 'pages' . DS . $page['id'] . '.page.txt')));
|
||||
|
||||
// Apply content filter
|
||||
$post_content = Filter::apply('content', $post[0]);
|
||||
|
||||
// Return post
|
||||
return $post_content;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get post content after cut
|
||||
*
|
||||
* <code>
|
||||
* echo Blog::getPostAfterCut('home');
|
||||
* </code>
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getPostAfterCut($slug, $locale = '') {
|
||||
|
||||
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
|
||||
|
||||
$page = Pages::$pages->select('[slug="'.$slug.'" and locale="'.$locale.'"]', null);
|
||||
|
||||
// Get post
|
||||
$post = explode("{cut}", Text::toHtml(File::getContent(STORAGE . DS . 'pages' . DS . $page['id'] . '.page.txt')));
|
||||
|
||||
// Apply content filter
|
||||
$post_content = Filter::apply('content', $post[1]);
|
||||
|
||||
// Return post
|
||||
return $post_content;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Blog Post title
|
||||
*
|
||||
* <code>
|
||||
* echo Blog::getPostTitle();
|
||||
* </code>
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getPostTitle() {
|
||||
return Page::title();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Blog Post Date
|
||||
*
|
||||
* <code>
|
||||
* echo Blog::getPostDate();
|
||||
* </code>
|
||||
*
|
||||
* @param string $format Date format
|
||||
* @return string
|
||||
*/
|
||||
public static function getPostDate($format = 'Y-m-d') {
|
||||
return Page::date($format);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get author of current post
|
||||
*
|
||||
* <code>
|
||||
* echo Blog::getPostAuthor();
|
||||
* </code>
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getPostAuthor()
|
||||
{
|
||||
return Page::author();
|
||||
}
|
||||
|
||||
/**
|
||||
* _rss
|
||||
*/
|
||||
public static function _rss() {
|
||||
if (Uri::segment(0) == 'rss') {
|
||||
include PLUGINS . DS . 'blog' . DS . 'rss.php';
|
||||
Request::shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
11
plugins/blog/install/blog.manifest.xml
Normal file
11
plugins/blog/install/blog.manifest.xml
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<root>
|
||||
<plugin_location>plugins/blog/blog.plugin.php</plugin_location>
|
||||
<plugin_status>active</plugin_status>
|
||||
<plugin_priority>15</plugin_priority>
|
||||
<plugin_name>Blog</plugin_name>
|
||||
<plugin_description>Blog plugin for Monstra</plugin_description>
|
||||
<plugin_version>1.7.3</plugin_version>
|
||||
<plugin_author>Awilum</plugin_author>
|
||||
<plugin_author_uri>http://monstra.org/</plugin_author_uri>
|
||||
</root>
|
12
plugins/blog/languages/en.lang.php
Normal file
12
plugins/blog/languages/en.lang.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'blog' => array(
|
||||
'Blog' => 'Blog',
|
||||
'Blog plugin for Monstra' => 'Blog plugin for Monstra',
|
||||
'begin' => 'begin',
|
||||
'end' => 'end',
|
||||
'prev' => 'prev',
|
||||
'next' => 'next',
|
||||
)
|
||||
);
|
12
plugins/blog/languages/pl.lang.php
Normal file
12
plugins/blog/languages/pl.lang.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'blog' => array(
|
||||
'Blog' => 'Blog',
|
||||
'Blog plugin for Monstra' => 'Wtyczka Blog dla systemu Monstra',
|
||||
'begin' => 'początek',
|
||||
'end' => 'koniec',
|
||||
'prev' => 'poprzedni',
|
||||
'next' => 'następny',
|
||||
)
|
||||
);
|
13
plugins/blog/languages/ru.lang.php
Normal file
13
plugins/blog/languages/ru.lang.php
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'blog' => array(
|
||||
'Blog' => 'Блог',
|
||||
'Blog plugin for Monstra' => 'Плагин блога для Monstra',
|
||||
'begin' => 'начало',
|
||||
'end' => 'конец',
|
||||
'prev' => 'назад',
|
||||
'next' => 'вперед',
|
||||
'Related posts' => 'Статьи по теме',
|
||||
)
|
||||
);
|
12
plugins/blog/languages/tr.lang.php
Normal file
12
plugins/blog/languages/tr.lang.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'blog' => array(
|
||||
'Blog' => 'Günce',
|
||||
'Blog plugin for Monstra' => 'Monstra için günce eklentisi',
|
||||
'begin' => 'Baş',
|
||||
'end' => 'Son',
|
||||
'prev' => 'Önceki',
|
||||
'next' => 'Sonraki',
|
||||
)
|
||||
);
|
34
plugins/blog/rss.php
Normal file
34
plugins/blog/rss.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
// Get all posts for blog parent page/post
|
||||
$posts = Pages::$pages->select('[parent="'.Blog::$parent_page_name.'" and status="published"]', 5, 0, array('slug', 'title', 'author', 'date'), 'date', 'DESC');
|
||||
|
||||
// Date now
|
||||
$now = date("D, d M Y H:i:s T");
|
||||
ob_end_clean();
|
||||
?>
|
||||
<?php header('Content-type: text/xml; charset="utf-8"'); ?>
|
||||
<?php echo'<?xml version="1.0" encoding="utf-8"?>'."\n"; ?>
|
||||
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>MonstraCMS::BLOG::RSS</title>
|
||||
<link><?php echo Option::get('siteurl'); ?>/blog</link>
|
||||
<description>The latest updates for <?php echo Option::get('sitename'); ?>.</description>
|
||||
<language>en-us</language>
|
||||
<pubDate><?php echo $now; ?></pubDate>
|
||||
<lastBuildDate><?php echo $now; ?></lastBuildDate>
|
||||
<atom:link href="<?php echo Option::get('siteurl'); ?>/rss.php" rel="self" type="application/rss+xml" />
|
||||
<generator>Monstra</generator>
|
||||
<?php foreach ($posts as $post) { ?>
|
||||
<item>
|
||||
<title><?php echo $post['title']; ?></title>
|
||||
<link><?php echo Option::get('siteurl').'/blog/'.$post['slug']; ?></link>
|
||||
<guid><?php echo Option::get('siteurl').'/blog/'.$post['slug']; ?></guid>
|
||||
<pubDate><?php echo Date::format($post['date'], 'd M Y'); ?></pubDate>
|
||||
<description><![CDATA[<?php echo Text::toHtml(Text::cut(File::getContent(STORAGE . DS . 'pages' . DS . $post['id'] . '.page.txt'), 300)); ?>]]></description>
|
||||
<author><?php echo $post['author']; ?></author>
|
||||
</item>
|
||||
<?php } ?>
|
||||
</channel>
|
||||
</rss>
|
||||
<?php Response::status(200); ?>
|
7
plugins/blog/views/frontend/block.view.php
Normal file
7
plugins/blog/views/frontend/block.view.php
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php foreach($posts as $post) { ?>
|
||||
<h3 class="monstra-blog-title"><a href="<?php echo Option::get('siteurl'); ?>/<?php echo Blog::$parent_page_name; ?>/<?php echo $post['slug'] ?>"><?php echo $post['title']; ?></a></h3>
|
||||
<small class="monstra-blog-date"><?php echo Date::format($post['date'], 'd M Y'); ?></small>
|
||||
<div class="monstra-blog-post">
|
||||
<?php echo $post['content']; ?>
|
||||
</div>
|
||||
<?php } ?>
|
5
plugins/blog/views/frontend/breadcrumbs.view.php
Normal file
5
plugins/blog/views/frontend/breadcrumbs.view.php
Normal file
@@ -0,0 +1,5 @@
|
||||
<?php if ($parent) { ?>
|
||||
<a href="<?php echo Site::url()."/".$page['parent']; ?><?php if(Notification::get('tag')) { ?>?tag=<?php echo Notification::get('tag'); ?><?php } ?>"><?php echo $parent_page['title']; ?></a> <span>→</span> <a href="<?php echo Site::url().$page['parent'].'/'.$page['slug']; ?>"><?php echo $page['title']; ?></a>
|
||||
<?php } else { ?>
|
||||
<a href="<?php echo Site::url()."/".$page['slug']; ?><?php if(Notification::get('tag')) { ?>?tag=<?php echo Notification::get('tag'); ?><?php } ?>"><?php echo $page['title']; ?></a>
|
||||
<?php } ?>
|
7
plugins/blog/views/frontend/index.view.php
Normal file
7
plugins/blog/views/frontend/index.view.php
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php foreach($posts as $post) { ?>
|
||||
<h3 class="monstra-blog-title"><a href="<?php echo Option::get('siteurl'); ?>/<?php echo $post['locale'] ?><?php echo Blog::$parent_page_name; ?>/<?php echo $post['slug'] ?>"><?php echo $post['title']; ?></a></h3>
|
||||
<small class="monstra-blog-date"><?php echo Date::format($post['date'], 'd M Y'); ?> / <?php echo $post['author']; ?></small>
|
||||
<div class="monstra-blog-post">
|
||||
<?php echo $post['content']; ?>
|
||||
</div>
|
||||
<?php } ?>
|
29
plugins/blog/views/frontend/pager.view.php
Normal file
29
plugins/blog/views/frontend/pager.view.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<br><br>
|
||||
<?php
|
||||
|
||||
if (Request::get('tag')) $tag = '&tag='.Request::get('tag'); else $tag = '';
|
||||
|
||||
$neighbours = 6;
|
||||
$left_neighbour = $page - $neighbours;
|
||||
if ($left_neighbour < 1) $left_neighbour = 1;
|
||||
|
||||
$right_neighbour = $page + $neighbours;
|
||||
if ($right_neighbour > $pages) $right_neighbour = $pages;
|
||||
|
||||
if ($page > 1) {
|
||||
echo ' <a href="?page=1'.$tag.'">'.__('begin', 'blog').'</a> ... <a href="?page=' . ($page-1) . $tag.'"> '.__('prev', 'blog').'</a> ';
|
||||
}
|
||||
|
||||
for ($i=$left_neighbour; $i<=$right_neighbour; $i++) {
|
||||
if ($i != $page) {
|
||||
echo ' <a href="?page=' . $i . $tag.'">' . $i . '</a> ';
|
||||
} else {
|
||||
echo ' <b>' . $i . '</b> ';
|
||||
}
|
||||
}
|
||||
|
||||
if ($page < $pages) {
|
||||
echo ' <a href="?page=' . ($page+1) . $tag.'">'.__('next', 'blog').'</a> ... <a href="?page=' . $pages . $tag.'">'.__('end', 'blog').'</a> ';
|
||||
}
|
||||
|
||||
?>
|
7
plugins/blog/views/frontend/related_posts.view.php
Normal file
7
plugins/blog/views/frontend/related_posts.view.php
Normal file
@@ -0,0 +1,7 @@
|
||||
<br><br>
|
||||
<b><?php echo __('Related posts', 'blog'); ?>:</b>
|
||||
<div>
|
||||
<?php foreach($related_posts as $related_post) { ?>
|
||||
<a href="<?php echo Option::get('siteurl'); ?>/<?php echo Blog::$parent_page_name; ?>/<?php echo $related_post['slug']; ?>"><?php echo $related_post['title']; ?></a><br>
|
||||
<?php } ?>
|
||||
</div>
|
3
plugins/blog/views/frontend/tags.view.php
Normal file
3
plugins/blog/views/frontend/tags.view.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<?php foreach($tags as $tag) { ?>
|
||||
<a href="<?php echo Option::get('siteurl'); ?>/<?php echo Blog::$parent_page_name; ?>?tag=<?php echo $tag; ?>" class="monstra-blog-tag"><span class="label label-primary"><?php echo $tag; ?></span></a>
|
||||
<?php } ?>
|
@@ -15,8 +15,6 @@ class BackupAdmin extends Backend
|
||||
{
|
||||
$backups_path = ROOT . DS . 'backups';
|
||||
|
||||
$backups_list = array();
|
||||
|
||||
// Create backup
|
||||
// -------------------------------------
|
||||
if (Request::post('create_backup')) {
|
||||
@@ -32,12 +30,18 @@ class BackupAdmin extends Backend
|
||||
$zip->readDir(STORAGE . DS, false);
|
||||
|
||||
// Add public folder
|
||||
if (Request::post('add_public_folder')) $zip->readDir(ROOT . DS . 'public' . DS, false);
|
||||
$zip->readDir(ROOT . DS . 'public' . DS, false);
|
||||
|
||||
// Add plugins folder
|
||||
if (Request::post('add_plugins_folder')) $zip->readDir(PLUGINS . DS, false);
|
||||
$zip->readDir(PLUGINS . DS, false, null, array(PLUGINS . DS . 'box'));
|
||||
|
||||
$zip->archive($backups_path . DS . Date::format(time(), "Y-m-d-H-i-s").'.zip');
|
||||
if ($zip->archive($backups_path . DS . Date::format(time(), "Y-m-d-H-i-s").'.zip')) {
|
||||
Notification::set('success', __('Backup was created', 'backup'));
|
||||
} else {
|
||||
Notification::set('error', __('Backup was not created', 'backup'));
|
||||
}
|
||||
|
||||
Request::redirect(Option::get('siteurl').'/admin/index.php?id=backup');
|
||||
|
||||
} else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
|
||||
}
|
||||
@@ -48,8 +52,13 @@ class BackupAdmin extends Backend
|
||||
|
||||
if (Security::check(Request::get('token'))) {
|
||||
|
||||
File::delete($backups_path . DS . Request::get('delete_file'));
|
||||
Request::redirect(Option::get('siteurl').'admin/index.php?id=backup');
|
||||
if (File::delete($backups_path . DS . Request::get('delete_file'))) {
|
||||
Notification::set('success', __('Backup was deleted', 'backup'));
|
||||
} else {
|
||||
Notification::set('error', __('Backup was not deleted', 'backup'));
|
||||
}
|
||||
|
||||
Request::redirect(Option::get('siteurl').'/admin/index.php?id=backup');
|
||||
|
||||
} else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
|
||||
}
|
||||
@@ -62,12 +71,34 @@ class BackupAdmin extends Backend
|
||||
} else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
|
||||
}
|
||||
|
||||
// Get backup list
|
||||
$backups_list = File::scan($backups_path, '.zip');
|
||||
// Restore backup
|
||||
// -------------------------------------
|
||||
if (Request::get('restore')) {
|
||||
|
||||
if (Security::check(Request::get('token'))) {
|
||||
|
||||
$tmp_dir = ROOT . DS . 'tmp' . DS . uniqid('backup_');
|
||||
|
||||
if (Dir::create($tmp_dir)) {
|
||||
$file_locations = Zip::factory()->extract($backups_path . DS . Request::get('restore'), $tmp_dir);
|
||||
if (!empty($file_locations)) {
|
||||
Dir::copy($tmp_dir, ROOT . DS);
|
||||
Notification::set('success', __('Backup was restored', 'backup'));
|
||||
} else {
|
||||
Notification::set('error', __('Unzip error', 'backup'));
|
||||
}
|
||||
} else {
|
||||
Notification::set('error', __('Backup was not restored', 'backup'));
|
||||
}
|
||||
|
||||
Request::redirect(Option::get('siteurl').'/admin/index.php?id=backup');
|
||||
|
||||
} else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
|
||||
}
|
||||
|
||||
// Display view
|
||||
View::factory('box/backup/views/backend/index')
|
||||
->assign('backups_list', $backups_list)
|
||||
->assign('backups_list', File::scan($backups_path, '.zip'))
|
||||
->display();
|
||||
}
|
||||
}
|
||||
|
@@ -6,7 +6,7 @@
|
||||
* @package Monstra
|
||||
* @subpackage Plugins
|
||||
* @author Romanenko Sergey / Awilum
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum
|
||||
* @version 1.0.0
|
||||
*
|
||||
*/
|
||||
|
@@ -3,8 +3,10 @@
|
||||
return array(
|
||||
'backup' => array(
|
||||
'Backups' => 'Backups',
|
||||
'Backup' => 'Backup',
|
||||
'Backup Date' => 'Backup Date',
|
||||
'Create Backup' => 'Create Backup',
|
||||
'Restore' => 'Restore',
|
||||
'Delete' => 'Delete',
|
||||
'storage' => 'storage',
|
||||
'public' => 'public',
|
||||
@@ -13,5 +15,12 @@
|
||||
'Actions' => 'Actions',
|
||||
'Delete backup: :backup' => 'Delete backup: :backup',
|
||||
'Creating...' => 'Creating...',
|
||||
'Backup was created' => 'Backup was created',
|
||||
'Backup was not created' => 'Backup was not created',
|
||||
'Backup was deleted' => 'Backup was deleted',
|
||||
'Backup was not deleted' => 'Backup was not deleted',
|
||||
'Backup was restored' => 'Backup was restored',
|
||||
'Unzip error' => 'Unzip error',
|
||||
'Backup was not restored' => 'Backup was not restored',
|
||||
)
|
||||
);
|
||||
);
|
||||
|
17
plugins/box/backup/languages/id.lang.php
Normal file
17
plugins/box/backup/languages/id.lang.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'backup' => array(
|
||||
'Backups' => 'Cadangan',
|
||||
'Backup date' => 'Tanggal Cadangan',
|
||||
'Create Backup' => 'Buat Cadangan',
|
||||
'Delete' => 'Hapus',
|
||||
'storage' => 'Penyimpanan',
|
||||
'public' => 'Umum',
|
||||
'plugins' => 'Plugins',
|
||||
'Size' => 'Ukuran',
|
||||
'Actions' => 'Tindakan',
|
||||
'Delete backup: :backup' => 'Hapus Cadangan: :backup',
|
||||
'Creating...' => 'Dibuat...',
|
||||
)
|
||||
);
|
17
plugins/box/backup/languages/ja.lang.php
Normal file
17
plugins/box/backup/languages/ja.lang.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'backup' => array(
|
||||
'Backups' => 'バックアップ',
|
||||
'Backup Date' => 'バックアップ日',
|
||||
'Create Backup' => 'バックアップの作成',
|
||||
'Delete' => '削除',
|
||||
'storage' => 'ストレージ',
|
||||
'public' => '公開',
|
||||
'plugins' => 'プラグイン',
|
||||
'Size' => 'サイズ',
|
||||
'Actions' => 'アクション',
|
||||
'Delete backup: :backup' => 'バックアップの削除: :backup',
|
||||
'Creating...' => '作成中...',
|
||||
)
|
||||
);
|
17
plugins/box/backup/languages/nl.lang.php
Normal file
17
plugins/box/backup/languages/nl.lang.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'backup' => array(
|
||||
'Backups' => 'Backups',
|
||||
'Backup' => 'Backup',
|
||||
'Create Backup' => 'Maak backup',
|
||||
'Delete' => 'Verwijderen',
|
||||
'storage' => 'Opslag',
|
||||
'public' => 'Publiek',
|
||||
'plugins' => 'Plugins',
|
||||
'Size' => 'Grootte',
|
||||
'Actions' => 'Acties',
|
||||
'Delete backup: :backup' => 'Verwijder backup: :backup',
|
||||
'Creating...' => 'Backup wordt gemaakt...',
|
||||
)
|
||||
);
|
17
plugins/box/backup/languages/pl.lang.php
Normal file
17
plugins/box/backup/languages/pl.lang.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'backup' => array(
|
||||
'Backups' => 'Kopie zapasowe',
|
||||
'Backup Date' => 'Data kopii zapasowej',
|
||||
'Create Backup' => 'Utwórz kopię zapasową',
|
||||
'Delete' => 'Usuń',
|
||||
'storage' => 'magazyn',
|
||||
'public' => 'publiczny',
|
||||
'plugins' => 'wtyczki',
|
||||
'Size' => 'Rozmiar',
|
||||
'Actions' => 'Akcje',
|
||||
'Delete backup: :backup' => 'Czy napewno usunąć kopię zapasową: :backup',
|
||||
'Creating...' => 'Tworzenie kopii zapasowej...',
|
||||
)
|
||||
);
|
@@ -13,5 +13,9 @@
|
||||
'Actions' => 'Действия',
|
||||
'Delete backup: :backup' => 'Удалить бекап: :backup',
|
||||
'Creating...' => 'Создание...',
|
||||
'Backup was deleted' => 'Бекап не был создан',
|
||||
'Backup was created' => 'Бекап был создан',
|
||||
'Backup was not restored' => 'Бекап не был восстановлен',
|
||||
'Backup was restored' => 'Бекап был восстановлен',
|
||||
)
|
||||
);
|
||||
|
26
plugins/box/backup/languages/tr.lang.php
Normal file
26
plugins/box/backup/languages/tr.lang.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'backup' => array(
|
||||
'Backups' => 'Yedekler',
|
||||
'Backup' => 'Yedek',
|
||||
'Backup Date' => 'Yedekleme Tarihi',
|
||||
'Create Backup' => 'Yedek Al',
|
||||
'Delete' => 'Sil',
|
||||
'Restore' => 'Geri Yükle',
|
||||
'storage' => 'depo',
|
||||
'public' => 'genel',
|
||||
'plugins' => 'eklentiler',
|
||||
'Size' => 'Boyut',
|
||||
'Actions' => 'Eylemler',
|
||||
'Delete backup: :backup' => ':backup adlı yedek silinsin mi',
|
||||
'Creating...' => 'Oluşturuluyor...',
|
||||
'Backup was created' => 'Yedek oluşturuldu',
|
||||
'Backup was not created' => 'Yedek oluşturulmadı',
|
||||
'Backup was deleted' => 'Yedek silindi',
|
||||
'Backup was not deleted' => 'Yedek silinmedi',
|
||||
'Backup was restored' => 'Yedek geri yüklendi',
|
||||
'Unzip error' => 'Sıkıştırılmış yedeği açma (unzip) hatası',
|
||||
'Backup was not restored' => 'Yedek geri yüklenmedi',
|
||||
)
|
||||
);
|
17
plugins/box/backup/languages/zh-cn.lang.php
Normal file
17
plugins/box/backup/languages/zh-cn.lang.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'backup' => array(
|
||||
'Backups' => '备份',
|
||||
'Backup Date' => '备份日期',
|
||||
'Create Backup' => '创建备份',
|
||||
'Delete' => '删除',
|
||||
'storage' => '存储',
|
||||
'public' => '公开',
|
||||
'plugins' => '插件',
|
||||
'Size' => '大小',
|
||||
'Actions' => '操作',
|
||||
'Delete backup: :backup' => '删除备份: :backup',
|
||||
'Creating...' => '正在创建...',
|
||||
)
|
||||
);
|
@@ -1,30 +1,28 @@
|
||||
<h2><?php echo __('Backups', 'backup'); ?></h2>
|
||||
<br />
|
||||
<script>$().ready(function(){$('[name=create_backup]').click(function(){$(this).button('loading');});});</script>
|
||||
|
||||
<?php if (Notification::get('success')) Alert::success(Notification::get('success')); ?>
|
||||
|
||||
<script>
|
||||
$().ready(function(){$('[name=create_backup]').click(function(){$(this).button('loading');});});
|
||||
</script>
|
||||
|
||||
<?php
|
||||
echo (
|
||||
Form::open() .
|
||||
Form::hidden('csrf', Security::token()).
|
||||
Form::checkbox('add_storage_folder', null, true, array('disabled' => 'disabled')) . ' ' . __('storage', 'backup') . ' ' . Html::nbsp(2) .
|
||||
Form::checkbox('add_public_folder') . ' ' . __('public', 'backup') . ' ' . Html::nbsp(2) .
|
||||
Form::checkbox('add_plugins_folder') . ' ' . __('plugins', 'backup') . ' ' . Html::nbsp(2) .
|
||||
Form::submit('create_backup', __('Create Backup', 'backup'), array('class' => 'btn', 'data-loading-text' => __('Creating...', 'backup'))).
|
||||
Form::close()
|
||||
);
|
||||
?>
|
||||
<div class="vertical-align margin-bottom-1">
|
||||
<div class="text-left row-phone">
|
||||
<h2><?php echo __('Backups', 'backup'); ?></h2>
|
||||
</div>
|
||||
<div class="text-right row-phone">
|
||||
<?php
|
||||
echo (
|
||||
Form::open(null, array('class' => 'form-inline')) .
|
||||
Form::hidden('csrf', Security::token()).
|
||||
Form::submit('create_backup', __('Create Backup', 'backup'), array('class' => 'btn btn-phone btn-primary', 'data-loading-text' => __('Creating...', 'backup'))).
|
||||
Form::close()
|
||||
);
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Backup_list -->
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><?php echo __('Backup', 'backup'); ?></th>
|
||||
<th><?php echo __('Size', 'backup'); ?></th>
|
||||
<th class="visible-lg hidden-xs"><?php echo __('Size', 'backup'); ?></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -33,14 +31,21 @@ $().ready(function(){$('[name=create_backup]').click(function(){$(this).button('
|
||||
<tr>
|
||||
<td>
|
||||
<?php $name = strtotime(str_replace('-', '', basename($backup, '.zip'))); ?>
|
||||
<?php echo Html::anchor(Date::format($name, 'F jS, Y - g:i A'), Option::get('siteurl').'admin/index.php?id=backup&download='.$backup.'&token='.Security::token()); ?>
|
||||
<?php echo Html::anchor(Date::format($name, 'F jS, Y - g:i A'), Option::get('siteurl').'/admin/index.php?id=backup&download='.$backup.'&token='.Security::token()); ?>
|
||||
</td>
|
||||
<td><?php echo Number::byteFormat(filesize(ROOT . DS . 'backups' . DS . $backup)); ?></td>
|
||||
<td class="visible-lg hidden-xs"><?php echo Number::byteFormat(filesize(ROOT . DS . 'backups' . DS . $backup)); ?></td>
|
||||
<td>
|
||||
<div class="pull-right">
|
||||
<?php
|
||||
if (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') {
|
||||
echo Html::anchor(__('Restore', 'backup'),
|
||||
'index.php?id=backup&restore='.$backup.'&token='.Security::token(),
|
||||
array('class' => 'btn btn-primary'));
|
||||
}
|
||||
?>
|
||||
<?php echo Html::anchor(__('Delete', 'backup'),
|
||||
'index.php?id=backup&delete_file='.$backup.'&token='.Security::token(),
|
||||
array('class' => 'btn btn-small', 'onclick' => "return confirmDelete('".__('Delete backup: :backup', 'backup', array(':backup' => Date::format($name, 'F jS, Y - g:i A')))."')"));
|
||||
array('class' => 'btn btn-danger', 'onclick' => "return confirmDelete('".__('Delete backup: :backup', 'backup', array(':backup' => Date::format($name, 'F jS, Y - g:i A')))."')"));
|
||||
?>
|
||||
</div>
|
||||
</td>
|
||||
@@ -48,4 +53,5 @@ $().ready(function(){$('[name=create_backup]').click(function(){$(this).button('
|
||||
<?php } ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- /Backup_list -->
|
||||
|
@@ -2,6 +2,7 @@
|
||||
|
||||
// Add plugin navigation link
|
||||
Navigation::add(__('Blocks', 'blocks'), 'content', 'blocks', 2);
|
||||
Dashboard::addNewItem('blocks', __('Blocks', 'blocks'), 'index.php?id=blocks&action=add_block', 2);
|
||||
|
||||
/**
|
||||
* Blocks Admin Class
|
||||
|
@@ -6,7 +6,7 @@
|
||||
* @package Monstra
|
||||
* @subpackage Plugins
|
||||
* @author Romanenko Sergey / Awilum
|
||||
* @copyright 2012-2013 Romanenko Sergey / Awilum
|
||||
* @copyright 2012-2014 Romanenko Sergey / Awilum
|
||||
* @version 1.0.0
|
||||
*
|
||||
*/
|
||||
|
@@ -10,7 +10,7 @@
|
||||
'Create New Block' => 'Erstelle einen neuen Block',
|
||||
'New Block' => 'Neuer Block',
|
||||
'Edit Block' => 'Bearbeite Block',
|
||||
'Save' => 'Save',
|
||||
'Save' => 'Speichern',
|
||||
'Save and Exit' => 'Speichern und Schließen',
|
||||
'Actions' => 'Aktionen',
|
||||
'Required field' => 'Erforderliches Feld',
|
||||
@@ -19,11 +19,12 @@
|
||||
'Delete block: :block' => 'Lösche Block: :block',
|
||||
'Block content' => 'Block-Inhalt',
|
||||
'Block <i>:name</i> deleted' => 'Block <i>:name</i> gelöscht',
|
||||
'Your changes to the block <i>:name</i> have been saved.' => 'Deine Änderungen für den Block <i>:name</i> wurden übernommen.',
|
||||
'Your changes to the block <i>:name</i> have been saved.' => 'Deine Änderungen für den Block <i>:name</i> wurden gespeichert.',
|
||||
'Delete block: :block' => 'Lösche Block: :block',
|
||||
'View Embed Code' => 'View Embed Code',
|
||||
'View Embed Code' => 'Zeige Embed Code',
|
||||
'Embed Code' => 'Embed Code',
|
||||
'Shortcode' => 'Shortcode',
|
||||
'PHP Code' => 'PHP Code',
|
||||
'Cancel' => 'Abbrechen',
|
||||
)
|
||||
);
|
||||
|
@@ -25,5 +25,6 @@
|
||||
'Embed Code' => 'Embed Code',
|
||||
'Shortcode' => 'Shortcode',
|
||||
'PHP Code' => 'PHP Code',
|
||||
'Cancel' => 'Cancel',
|
||||
)
|
||||
);
|
||||
|
@@ -25,5 +25,6 @@
|
||||
'Embed Code' => 'Codigo para incrustar',
|
||||
'Shortcode' => 'Codigo corto',
|
||||
'PHP Code' => 'Codigo PHP',
|
||||
'Cancel' => 'Cancel',
|
||||
)
|
||||
);
|
@@ -25,5 +25,6 @@
|
||||
'Embed Code' => 'کد درج شده',
|
||||
'Shortcode' => 'کدکوتاه',
|
||||
'PHP Code' => 'کد PHP',
|
||||
'Cancel' => 'Cancel',
|
||||
)
|
||||
);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user