mirror of
https://github.com/monstra-cms/monstra.git
synced 2025-08-04 20:27:40 +02:00
Compare commits
942 Commits
sparky-js-
...
v3.0.0
Author | SHA1 | Date | |
---|---|---|---|
|
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 | ||
|
783a1160ea | ||
|
e439fc04f4 | ||
|
812acbe956 | ||
|
6496e1bad1 | ||
|
928c12abc7 | ||
|
e007040feb | ||
|
ee1fd08621 | ||
|
08a61017f9 | ||
|
f42a4ce42d | ||
|
f4f699b73a | ||
|
68fed3a3e5 | ||
|
be4c58d242 | ||
|
ad3c63a3d4 | ||
|
b180b797ee | ||
|
9d165d34f5 | ||
|
e2fff5db3c | ||
|
3d886007b3 | ||
|
3dabdda2b8 | ||
|
ce8aa7f921 | ||
|
b2c7eaeb14 | ||
|
a01a304a83 | ||
|
d626ae68be | ||
|
5ee512a77b | ||
|
6257af8e71 | ||
|
dd84366820 | ||
|
b24cdaec96 | ||
|
25a3e4df3d | ||
|
946c1f79d5 | ||
|
9db1ae1b15 | ||
|
abde9ff8fa | ||
|
4e78ac015a | ||
|
289e4d228a | ||
|
23024a9162 | ||
|
6b9077ef35 | ||
|
60929b17bf | ||
|
702efc6a11 | ||
|
3936d266e7 | ||
|
7f7bcaef5f | ||
|
ad494c4dc9 | ||
|
8b1c3a7ba6 | ||
|
f3c304c5b7 | ||
|
bc1c7ffdee | ||
|
8f32e07721 | ||
|
9617d9e864 | ||
|
15d9ad3500 | ||
|
658031c004 | ||
|
599cf96199 | ||
|
23f7fbf39f | ||
|
cb973d3ea9 | ||
|
d261be9b07 | ||
|
2c0fa8eb72 | ||
|
a768bc31ed | ||
|
7433dbd24c | ||
|
a464d2bff5 | ||
|
99ecf3774b | ||
|
29d6d8daf3 | ||
|
a5d19114cb | ||
|
6c8f9cad05 | ||
|
28b3002ded | ||
|
af4bc97bf2 | ||
|
3ab9fcc1a8 | ||
|
4e389d4de2 | ||
|
85c2849037 | ||
|
3cd0ec09dc | ||
|
614b876faf | ||
|
3cb31c2616 | ||
|
b0452c7932 | ||
|
03e10b4507 | ||
|
207d6b4956 | ||
|
e55b1e3344 | ||
|
0d5e023887 | ||
|
42bd547365 | ||
|
0f39d039d0 | ||
|
af67698147 | ||
|
0a4eb5900a | ||
|
db8547c173 | ||
|
f112ec8ddd | ||
|
37f4faa2ff | ||
|
362ec1f2a2 | ||
|
00abeaba1b | ||
|
5b15c1c284 | ||
|
7c70d34552 | ||
|
4282ad853e | ||
|
664e29b6dc | ||
|
29bc706fd7 | ||
|
5ce635283e | ||
|
4e945e9b4e | ||
|
0ac1a1d44b | ||
|
fafb50476b | ||
|
6e875be7ca | ||
|
0f68f836d3 | ||
|
30157ecb94 | ||
|
8384465526 | ||
|
356b4d3194 | ||
|
daefb787f3 | ||
|
05590c76b3 | ||
|
37d9d215c5 | ||
|
a3b46fb25f | ||
|
beda4326cb | ||
|
fd87b58bca | ||
|
5bac23c097 | ||
|
341ca86075 | ||
|
70954e8cdb | ||
|
aba5dda41b | ||
|
ce75fde7a8 | ||
|
2e1c8ebc0e | ||
|
13fb6babb7 | ||
|
572d64323e | ||
|
fa9f43227c | ||
|
4a5403e0c3 | ||
|
aee0387649 | ||
|
c506bbff08 | ||
|
0e5e21d5a3 | ||
|
d3ddd11ed9 | ||
|
027ae36e69 | ||
|
a0ab314424 | ||
|
e25f5ba2f3 | ||
|
bc037a6758 | ||
|
75fb5bfe92 | ||
|
ef47cbedff | ||
|
8d04772473 | ||
|
537f1b999b | ||
|
cf1ce4b660 | ||
|
f259e2e700 | ||
|
5c7ce4f3a4 | ||
|
d322887f05 | ||
|
878aa46457 | ||
|
5315020c1e | ||
|
ded831e9a7 | ||
|
2f2ef57e9d | ||
|
514815a559 | ||
|
b050af69d1 | ||
|
70a9286c33 | ||
|
d0c5296540 | ||
|
bd7591a3c9 | ||
|
efc3dd429d | ||
|
242930c425 | ||
|
0a9ba78091 | ||
|
5baddfa952 | ||
|
b9c2967b18 | ||
|
0f47fd5d50 | ||
|
6f97bf10e7 | ||
|
33795d5267 | ||
|
58c0e1207d | ||
|
fa5824e03c | ||
|
b9471a505e | ||
|
4e3802cde3 | ||
|
1018411068 | ||
|
cebb6deac8 | ||
|
38e53c08db | ||
|
d2aab04430 | ||
|
0f8103d6ae | ||
|
27e355cd56 |
12
.htaccess
12
.htaccess
@@ -19,8 +19,16 @@ Options -Indexes
|
||||
# Setting rewrite rules.
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine on
|
||||
RewriteBase /projects/monstra-cms/
|
||||
|
||||
# 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,126 @@
|
||||
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
|
||||
- Error Handler turned off for Production environment
|
||||
- Localization: Farsi(fa) translations fixes.
|
||||
- Pages Manager: fix translates #107
|
||||
- Missing Translation on Login Page - fixed #106
|
||||
- Lithuanian flag and other languages fixes. Thanks to mbarzda
|
||||
|
||||
Monstra 2.2.0, 2013-03-25
|
||||
------------------------
|
||||
- Mobile Ready! Monstra fully responsive for mobile devices, tablets, and normal computer screens.
|
||||
- Improved Monstra Architecture!
|
||||
- New Stand-alone Monstra Library (Gelato) was created! Totally improved old classes and added new classes!
|
||||
- Monstra Library with new useful classes - ClassLoader, ErrorHandler, Log, MinifyJS, MinifyCSS, MinifyHTML, Token, Registry.
|
||||
- Adopted PSR-0 PSR-1 PSR-2
|
||||
- Localization: Farsi(fa), Magyar(hu), Français(fr), Spanish(es), Serbian(sr-yu), Slovakian(sk) translations added. Thanks to Abdulhalim, Lez, Neri, Mapadesign, Hugomano and Nakome.
|
||||
- Idiorm Updated to 1.3.0
|
||||
- jQuery Updated to 1.9.1
|
||||
- Twitter Bootstrap Updated to 2.3.0
|
||||
- Default Theme: Social Meta Tags - added.
|
||||
- Default Theme: Hook "theme_meta" - added.
|
||||
- Admin Default Theme: Added missing meta tags.
|
||||
- Improve Installer Usability. Flags Added.
|
||||
- Default Site Email added.
|
||||
- PHPMailer added.
|
||||
- Pages Manager: added ability to quickly update page status and page access.
|
||||
- Intstaller Layout: Added missing meta tags.
|
||||
- Filesmanager plugin: added ability to view images.
|
||||
- Filesmanager Plugin: forbidden types array - updated.
|
||||
- CSRF detection text - updated.
|
||||
- Engine Uri: code improvements.
|
||||
- XMLDB: Table Class - fixed select method. Thanks to DmitriyMX
|
||||
- Bootstrap CSS: Icons url - fixed.
|
||||
- Plugins Manager: buttons confirm dialog message - fixed.
|
||||
- Pages Manager: page cloning problem - fixed.
|
||||
- Localizations: translations fixes.
|
||||
|
||||
Monstra 2.1.3, 2012-12-09
|
||||
------------------------
|
||||
- Pages Plugin: New shortcodes added - page_author, page_slug, page_url page_available, page_breadcrumbs, page_date, page_content.
|
||||
@@ -175,7 +298,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
|
||||
|
||||
@@ -211,4 +334,4 @@ Monstra 1.0.1, 2012-04-26
|
||||
|
||||
Monstra 1.0.0, 2012-04-24
|
||||
------------------------
|
||||
- Initial release
|
||||
- Initial release
|
@@ -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>.
|
24
README.md
24
README.md
@@ -1,15 +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.0 or higher
|
||||
- SimpleXML Module
|
||||
- Apache Mod Rewrite
|
||||
- Multibyte String
|
||||
|
||||
Operation system: Unix, Linux, Windows, Mac OS
|
||||
Middleware: PHP 5.2.3 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)
|
||||
@@ -19,21 +14,18 @@ Fast and small content management system written in PHP!
|
||||
5. Also you may also need to recursively CHMOD the /install.php, /.htaccess and /sitemap.xml to 755(or 777) if your host doesn't set it implicitly.
|
||||
6. Type http://example.org/install.php in the browser.
|
||||
|
||||
|
||||
## Contributing
|
||||
1. Help on the [Forum.](http://forum.monstra.org)
|
||||
2. Donate to keep Monstra free. We will add you to Monstra [Sponsors Page.](http://monstra.org/about/sponsors)
|
||||
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/Monstra/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/Monstra/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
|
||||
@@ -79,24 +113,29 @@ if (Request::post('reset_password_submit')) {
|
||||
// Update user hash
|
||||
$users->updateWhere("[login='" . $user_login . "']", array('hash' => $new_hash));
|
||||
|
||||
// Message
|
||||
$message = View::factory('box/users/views/frontend/reset_password_email')
|
||||
$mail = new PHPMailer();
|
||||
$mail->CharSet = 'utf-8';
|
||||
$mail->ContentType = 'text/html';
|
||||
$mail->SetFrom(Option::get('system_email'));
|
||||
$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/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)
|
||||
->render();
|
||||
|
||||
// Send
|
||||
@mail($user['email'], __('Your login details for :site_name', 'users', array(':site_name' => $site_name)), $message);
|
||||
->assign('email_template', 'reset-password')
|
||||
->render());
|
||||
$mail->Send();
|
||||
|
||||
// Set notification
|
||||
Notification::set('success', __('Your login details for :site_name has been sent', 'users', array(':site_name' => $site_name)));
|
||||
Notification::set('reset_password', 'reset_password');
|
||||
|
||||
// Redirect to password-reset page
|
||||
Request::redirect(Site::url().'admin');
|
||||
Request::redirect(Site::url().'/admin');
|
||||
|
||||
}
|
||||
|
||||
@@ -122,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;
|
||||
|
@@ -1,207 +1,387 @@
|
||||
/************************************
|
||||
Monstra
|
||||
styles.css
|
||||
default.css
|
||||
*************************************
|
||||
CONTENTS
|
||||
1. GENERAL
|
||||
2. HEADER
|
||||
3. CONTENT
|
||||
4. LEFT MENU
|
||||
5. AUTHORIZATION
|
||||
6. MISC
|
||||
|
||||
1. GENERAL
|
||||
2. COMPONENTS
|
||||
3. MEDIA QUERIES
|
||||
|
||||
*************************************
|
||||
1. GENERAL
|
||||
*************************************/
|
||||
|
||||
@font-face {
|
||||
font-family: 'Glyphicons Halflings';
|
||||
src: url('@site_url/public/assets/fonts/glyphicons-halflings-regular.eot');
|
||||
src: url('@site_url/public/assets/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),
|
||||
url('@site_url/public/assets/fonts/glyphicons-halflings-regular.woff') format('woff'),
|
||||
url('@site_url/public/assets/fonts/glyphicons-halflings-regular.ttf') format('truetype'),
|
||||
url('@site_url/public/assets/fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg');
|
||||
}
|
||||
|
||||
body {
|
||||
padding-top: 60px;
|
||||
margin: 0;
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
font-size: 13px;
|
||||
line-height: 18px;
|
||||
color: #333333;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
margin: 0;
|
||||
font-family: inherit;
|
||||
font-weight: bold;
|
||||
color: inherit;
|
||||
text-rendering: optimizelegibility;
|
||||
}
|
||||
h1 small,
|
||||
h2 small,
|
||||
h3 small,
|
||||
h4 small,
|
||||
h5 small,
|
||||
h6 small {
|
||||
font-weight: normal;
|
||||
color: #999999;
|
||||
}
|
||||
h1 {
|
||||
font-size: 30px;
|
||||
line-height: 36px;
|
||||
}
|
||||
h1 small {
|
||||
font-size: 18px;
|
||||
}
|
||||
h2 {
|
||||
font-size: 24px;
|
||||
line-height: 36px;
|
||||
}
|
||||
h2 small {
|
||||
font-size: 18px;
|
||||
}
|
||||
h3 {
|
||||
line-height: 27px;
|
||||
font-size: 16px;
|
||||
}
|
||||
h3 small {
|
||||
font-size: 14px;
|
||||
}
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
line-height: 18px;
|
||||
}
|
||||
h4 {
|
||||
font-size: 14px;
|
||||
}
|
||||
h4 small {
|
||||
font-size: 12px;
|
||||
}
|
||||
h5 {
|
||||
font-size: 12px;
|
||||
}
|
||||
h6 {
|
||||
font-size: 11px;
|
||||
color: #999999;
|
||||
text-transform: uppercase;
|
||||
background: #FAFAFA;
|
||||
}
|
||||
|
||||
/* Inputs */
|
||||
h1,h2,h3,h4,h5 {
|
||||
color: #222;
|
||||
}
|
||||
|
||||
input[type=text]:focus,
|
||||
input[type=email]:focus,
|
||||
input[type=url]:focus,
|
||||
input[type=phone]:focus,
|
||||
input[type=password]:focus,
|
||||
select:focus,
|
||||
textarea:focus {
|
||||
border-color: #999;
|
||||
.error-none {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.error-field {
|
||||
border:1px solid red!important;
|
||||
}
|
||||
|
||||
.error-message {
|
||||
color: red;
|
||||
}
|
||||
|
||||
a.btn-expand {
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
font-size:14px;
|
||||
text-decoration: none;
|
||||
padding-left:4px;
|
||||
padding-right:4px;
|
||||
}
|
||||
|
||||
.btn:active,
|
||||
.btn.active {
|
||||
background-image: none;
|
||||
outline: 0;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
.login-footer,
|
||||
.login-footer a {
|
||||
color:#777;
|
||||
font-size:12px;
|
||||
}
|
||||
|
||||
footer {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
footer,
|
||||
footer a {
|
||||
color:#777;
|
||||
font-size:12px;
|
||||
}
|
||||
|
||||
footer span {
|
||||
border-top: 1px solid #E0E0E0;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
/*************************************
|
||||
2. COMPONENTS
|
||||
*************************************/
|
||||
|
||||
/* Well */
|
||||
.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);
|
||||
|
||||
}
|
||||
|
||||
.dashboard-well {
|
||||
padding-top: 6px;
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
|
||||
.dashboard-well a.welcome-back {
|
||||
text-decoration: none;
|
||||
color: #333;
|
||||
font-size: 16px;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
/* Admin Form */
|
||||
.form-signin {
|
||||
max-width: 400px;
|
||||
}
|
||||
|
||||
.form-signin {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.form-signin .administration-area,
|
||||
.form-signin .reset-password-area {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
/* Dropdown Menu */
|
||||
.dropdown-menu .divider {
|
||||
background-color: #555454;
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
border: 1px solid #333;
|
||||
background: #333;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.dropdown-menu > li > a {
|
||||
color: #eee;
|
||||
}
|
||||
|
||||
/* Navbar */
|
||||
.navbar-inverse .navbar-nav > li > a {
|
||||
color: #eee;
|
||||
}
|
||||
|
||||
.navbar-inverse {
|
||||
background: #222;
|
||||
}
|
||||
|
||||
.navbar-default {
|
||||
border-radius: 0px;
|
||||
}
|
||||
|
||||
ul.navbar-nav {
|
||||
min-height: 60px;
|
||||
}
|
||||
|
||||
.navbar-nav > li {
|
||||
min-height: 60px;
|
||||
}
|
||||
|
||||
.navbar-nav > li > a {
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
font-size: 24px;
|
||||
padding: 13px 15px;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-nav > .open > a,
|
||||
.navbar-inverse .navbar-nav > .open > a:hover,
|
||||
.navbar-inverse .navbar-nav > .open > a:focus {
|
||||
background: #333;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-nav > .active > a,
|
||||
.navbar-inverse .navbar-nav > .active > a:hover,
|
||||
.navbar-inverse .navbar-nav > .active > a:focus {
|
||||
background: #333;
|
||||
}
|
||||
|
||||
a.navbar-brand {
|
||||
font-weight: bold;
|
||||
color: #FAFAFA!important;
|
||||
}
|
||||
|
||||
.navbar-nav .dropdown-menu {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.navbar-nav .dropdown-menu > li > a {
|
||||
padding: 7px 20px;
|
||||
}
|
||||
|
||||
.nav > li > a {
|
||||
padding-top: 15px;
|
||||
padding-bottom: 15px;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
}
|
||||
|
||||
.nav > li > a > img {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
border: 1px solid #888;
|
||||
margin: 0 0 0 4px;
|
||||
}
|
||||
|
||||
/* Flat Elements */
|
||||
.form-control,
|
||||
.btn,
|
||||
.dropdown-menu,
|
||||
.modal-content,
|
||||
.badge,
|
||||
.label,
|
||||
.input-group-addon,
|
||||
.alert,
|
||||
.tooltip,
|
||||
.tooltip-inner,
|
||||
pre,
|
||||
code {
|
||||
border-radius: 0px;
|
||||
}
|
||||
.badge,
|
||||
.tooltip,
|
||||
.tooltip-inner,
|
||||
.label,
|
||||
pre,
|
||||
code {
|
||||
font-weight: normal;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
pre {
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* Inputs */
|
||||
select,
|
||||
textarea,
|
||||
input[type="text"],
|
||||
input[type="password"],
|
||||
input[type="datetime"],
|
||||
input[type="datetime-local"],
|
||||
input[type="date"],
|
||||
input[type="month"],
|
||||
input[type="time"],
|
||||
input[type="week"],
|
||||
input[type="number"],
|
||||
input[type="email"],
|
||||
input[type="url"],
|
||||
input[type="search"],
|
||||
input[type="tel"],
|
||||
input[type="color"],
|
||||
.form-control,
|
||||
.uneditable-input {
|
||||
color: #3c3c3c;
|
||||
border-color: #d0d0d0;
|
||||
background-color: #fff;
|
||||
}
|
||||
select:focus,
|
||||
textarea:focus,
|
||||
input[type="text"]:focus,
|
||||
input[type="password"]:focus,
|
||||
input[type="datetime"]:focus,
|
||||
input[type="datetime-local"]:focus,
|
||||
input[type="date"]:focus,
|
||||
input[type="month"]:focus,
|
||||
input[type="time"]:focus,
|
||||
input[type="week"]:focus,
|
||||
input[type="number"]:focus,
|
||||
input[type="email"]:focus,
|
||||
input[type="url"]:focus,
|
||||
input[type="search"]:focus,
|
||||
input[type="tel"]:focus,
|
||||
input[type="color"]:focus,
|
||||
.form-control:focus,
|
||||
.uneditable-input:focus {
|
||||
border-color: #aaaaaa;
|
||||
-webkit-box-shadow: 0 0 8px #dce1e5;
|
||||
-moz-box-shadow: 0 0 8px #dce1e5;
|
||||
box-shadow: 0 0 8px #dce1e5;
|
||||
}
|
||||
|
||||
/* Datapicker */
|
||||
.datapicker {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
/* Breadcrumb */
|
||||
.breadcrumb {
|
||||
background: #fff;
|
||||
border-radius: 0px;
|
||||
}
|
||||
|
||||
/* Tabs */
|
||||
.nav-tabs > li > a {
|
||||
border-radius: 0px;
|
||||
}
|
||||
|
||||
.tab-page {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.tab-pane > table {
|
||||
border-top:none!important;
|
||||
}
|
||||
|
||||
.tab-content {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.tab-page {
|
||||
border-bottom: 1px solid #DDDDDD;
|
||||
border-left: 1px solid #DDDDDD;
|
||||
border-right: 1px solid #DDDDDD;
|
||||
padding: 20px 10px 10px;
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
table {
|
||||
max-width: 100%;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
background-color: transparent;
|
||||
max-width: 100%;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
background-color: transparent;
|
||||
}
|
||||
.table {
|
||||
width: 100%;
|
||||
margin-bottom: 18px;
|
||||
width: 100%;
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
.table th,
|
||||
.table td {
|
||||
padding: 8px;
|
||||
line-height: 18px;
|
||||
text-align: left;
|
||||
border-top: 1px solid #dddddd;
|
||||
padding: 8px;
|
||||
line-height: 18px;
|
||||
text-align: left;
|
||||
border-top: 1px solid #dddddd;
|
||||
background: #fff;
|
||||
}
|
||||
.table th {
|
||||
font-weight: bold;
|
||||
font-weight: bold;
|
||||
}
|
||||
.table thead th {
|
||||
vertical-align: bottom;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
.table colgroup + thead tr:first-child th,
|
||||
.table colgroup + thead tr:first-child td,
|
||||
.table thead:first-child tr:first-child th,
|
||||
.table thead:first-child tr:first-child td {
|
||||
border-top: 0;
|
||||
border-top: 0;
|
||||
}
|
||||
.table tbody + tbody {
|
||||
border-top: 2px solid #dddddd;
|
||||
border-top: 2px solid #dddddd;
|
||||
}
|
||||
.table-condensed th,
|
||||
.table-condensed td {
|
||||
padding: 4px 5px;
|
||||
padding: 4px 5px;
|
||||
}
|
||||
.table-bordered {
|
||||
border: 1px solid #dddddd;
|
||||
border-left: 0;
|
||||
border-collapse: separate;
|
||||
*border-collapse: collapsed;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #dddddd;
|
||||
border-left: 0;
|
||||
border-collapse: separate;
|
||||
*border-collapse: collapsed;
|
||||
}
|
||||
.table-bordered th:first-child,
|
||||
.table-bordered td:first-child {
|
||||
border-left: 1px solid #dddddd;
|
||||
border-left: 1px solid #dddddd;
|
||||
}
|
||||
|
||||
.table-bordered td:first-child {
|
||||
padding-left:15px;
|
||||
padding-left:15px;
|
||||
}
|
||||
|
||||
.table-bordered thead:first-child tr:first-child th,
|
||||
.table-bordered tbody:first-child tr:first-child th,
|
||||
.table-bordered tbody:first-child tr:first-child td {
|
||||
border-top: 0;
|
||||
}
|
||||
.table-bordered thead:first-child tr:first-child th:first-child,
|
||||
.table-bordered tbody:first-child tr:first-child td:first-child {
|
||||
-webkit-border-radius: 4px 0 0 0;
|
||||
-moz-border-radius: 4px 0 0 0;
|
||||
border-radius: 4px 0 0 0;
|
||||
}
|
||||
.table-bordered thead:first-child tr:first-child th:last-child,
|
||||
.table-bordered tbody:first-child tr:first-child td:last-child {
|
||||
-webkit-border-radius: 0 4px 0 0;
|
||||
-moz-border-radius: 0 4px 0 0;
|
||||
border-radius: 0 4px 0 0;
|
||||
}
|
||||
.table-bordered thead:last-child tr:last-child th:first-child,
|
||||
.table-bordered tbody:last-child tr:last-child td:first-child {
|
||||
-webkit-border-radius: 0 0 0 4px;
|
||||
-moz-border-radius: 0 0 0 4px;
|
||||
border-radius: 0 0 0 4px;
|
||||
border-top: 0;
|
||||
}
|
||||
|
||||
.table-bordered thead tr th {
|
||||
font-weight:bold;
|
||||
background-color: #f5f5f5;
|
||||
background-repeat: repeat-x;
|
||||
background-image: -khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5));
|
||||
background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);
|
||||
background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5));
|
||||
background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);
|
||||
background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);
|
||||
background-image: linear-gradient(top, #ffffff, #f5f5f5);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);
|
||||
border-top: 1px solid #fff;
|
||||
font-weight:bold;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.table-bordered thead:last-child tr:last-child th:last-child,
|
||||
.table-bordered tbody:last-child tr:last-child td:last-child {
|
||||
-webkit-border-radius: 0 0 4px 0;
|
||||
-moz-border-radius: 0 0 4px 0;
|
||||
border-radius: 0 0 4px 0;
|
||||
}
|
||||
|
||||
.table-bordered thead:first-child tr:first-child > th:first-child, .table-bordered tbody:first-child tr:first-child > td:first-child {
|
||||
.table-bordered thead:first-child tr:first-child > th:first-child,
|
||||
.table-bordered tbody:first-child tr:first-child > td:first-child {
|
||||
border-top-left-radius: 0px;
|
||||
}
|
||||
|
||||
@@ -212,15 +392,22 @@ table {
|
||||
|
||||
.table-striped tbody tr:nth-child(odd) td,
|
||||
.table-striped tbody tr:nth-child(odd) th {
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
.table tbody tr:hover td,
|
||||
.table tbody tr:hover th {
|
||||
background-color: #f5f5f5;
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
|
||||
.table-bordered th, .table-bordered td {
|
||||
.table tbody tr:hover td,
|
||||
.table tbody tr:hover th {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.table-bordered th,
|
||||
.table-bordered td {
|
||||
border-left: none;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.table-bordered > thead > tr {
|
||||
height: 45px;
|
||||
}
|
||||
|
||||
td, th {
|
||||
@@ -228,254 +415,203 @@ td, th {
|
||||
vertical-align: inherit!important;
|
||||
}
|
||||
|
||||
/* Buttons */
|
||||
|
||||
.btn-toolbar {
|
||||
margin:0;
|
||||
}
|
||||
|
||||
.btn-group .btn {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.btn-actions-default {
|
||||
-webkit-border-top-left-radius: 4px!important;
|
||||
-moz-border-radius-topleft: 4px!important;
|
||||
border-top-left-radius: 4px!important;
|
||||
-webkit-border-bottom-left-radius: 4px!important;
|
||||
-moz-border-radius-bottomleft: 4px!important;
|
||||
border-bottom-left-radius: 4px!important;
|
||||
}
|
||||
|
||||
/* Tabs */
|
||||
|
||||
.tab-pane > table {
|
||||
margin-top:-20px;
|
||||
}
|
||||
|
||||
.tab-pane > table {
|
||||
border-top:none!important;
|
||||
}
|
||||
|
||||
.tab-content {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.tab-page {
|
||||
border-bottom: 1px solid #DDDDDD;
|
||||
border-left: 1px solid #DDDDDD;
|
||||
border-right: 1px solid #DDDDDD;
|
||||
margin-top: -20px;
|
||||
padding: 20px 10px 10px;
|
||||
}
|
||||
|
||||
|
||||
/**************************************
|
||||
2. HEADER
|
||||
*************************************/
|
||||
|
||||
.monstra-header {
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin-top:-60px;
|
||||
position: relative;
|
||||
z-index:999;
|
||||
}
|
||||
.monstra-header h3 a:hover, .monstra-header .brand:hover, .monstra-header ul .active > a {
|
||||
color: #ffffff;
|
||||
text-decoration: none;
|
||||
}
|
||||
.monstra-header h3 {
|
||||
position: relative;
|
||||
}
|
||||
.monstra-header h3 a, .monstra-header .brand {
|
||||
float: left;
|
||||
display: block;
|
||||
padding-top:15px;
|
||||
padding-left:10px;
|
||||
margin-left: 0px;
|
||||
color: #fdfdfd;
|
||||
font-family: arial;
|
||||
font-weight: 600;
|
||||
line-height: 1;
|
||||
font-size: 24px;
|
||||
text-shadow: 0 1px 2px rgba(0,0,0,.5);
|
||||
width:188px;
|
||||
}
|
||||
.monstra-header p {
|
||||
margin: 0;
|
||||
line-height: 60px;
|
||||
}
|
||||
|
||||
.monstra-header-inner, .topbar .fill {
|
||||
background-color: #ccc;
|
||||
background: url('@theme_admin_url/img/noisy_grid_dark.png');
|
||||
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
|
||||
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
/*************************************
|
||||
3. CONTENT
|
||||
*************************************/
|
||||
|
||||
.monstra-content {
|
||||
padding-top:20px;
|
||||
}
|
||||
|
||||
|
||||
/*************************************
|
||||
4. LEFT MENU
|
||||
*************************************/
|
||||
|
||||
.monstra-menu-category-separator {
|
||||
border: 0;
|
||||
.table-bordered > thead > tr > th,
|
||||
.table-bordered > tbody > tr > th,
|
||||
.table-bordered > tfoot > tr > th,
|
||||
.table-bordered > thead > tr > td,
|
||||
.table-bordered > tbody > tr > td,
|
||||
.table-bordered > tfoot > tr > td {
|
||||
border: 0;
|
||||
border-bottom: 1px solid #ccc;
|
||||
margin-top:5px;
|
||||
margin-bottom:8px;
|
||||
}
|
||||
|
||||
.monstra-menu-sidebar {
|
||||
background: url('@theme_admin_url/img/noisy_grid.png');
|
||||
background-color:#ccc;
|
||||
max-width:192px!important;
|
||||
min-width:136px!important;
|
||||
margin-bottom: 20px;
|
||||
padding: 19px;
|
||||
border-bottom:2px solid #ccc;
|
||||
border-right:2px solid #ccc;
|
||||
.vertical-align {
|
||||
display: table;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.monstra-menu-sidebar ul {
|
||||
clear: both;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: 'lucida grande','Lucida Sans Unicode', Tahoma, sans-serif;
|
||||
.vertical-align > div {
|
||||
display: table-cell;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.monstra-menu-sidebar li {
|
||||
list-style: none;
|
||||
margin: 0 0 0 -22px;
|
||||
padding: 0;
|
||||
.vertical-align > div > h1,
|
||||
.vertical-align > div > h2,
|
||||
.vertical-align > div > h3,
|
||||
.vertical-align > div > h4,
|
||||
.vertical-align > div > h5 {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.monstra-menu-sidebar li a {
|
||||
width:97%;
|
||||
color: #333;
|
||||
padding-left: 23px;
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
margin: 2px 0;
|
||||
.margin-top-1 {
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
.monstra-menu-sidebar li a.current {
|
||||
color: #000;
|
||||
padding-top:3px;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
background-color: #e6e6e6;
|
||||
background-repeat: no-repeat;
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));
|
||||
background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
|
||||
background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);
|
||||
background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
|
||||
background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
|
||||
background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
|
||||
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
|
||||
line-height: normal;
|
||||
.margin-top-2 {
|
||||
margin-top: 2em;
|
||||
}
|
||||
|
||||
.margin-bottom-1 {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.margin-bottom-2 {
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
|
||||
/* Editor */
|
||||
#editor_area {
|
||||
height: 400px!important;
|
||||
border: 1px solid #ccc;
|
||||
border-bottom-color: #bbb;
|
||||
border-right:2px solid #ccc;
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-webkit-transition: 0.1s linear all;
|
||||
-moz-transition: 0.1s linear all;
|
||||
-ms-transition: 0.1s linear all;
|
||||
-o-transition: 0.1s linear all;
|
||||
transition: 0.1s linear all;
|
||||
margin-left: 1px;
|
||||
color: #555;
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
font-size: 14px;
|
||||
line-height: 1.428571429;
|
||||
padding: 6px 9px;
|
||||
}
|
||||
|
||||
.monstra-menu-sidebar li a:hover {
|
||||
color: #000;
|
||||
background:#fff;
|
||||
.markItUpHeader ul li {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.nav-list > .active > a,
|
||||
.nav-list > .active > a:hover {
|
||||
color: #ffffff;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
|
||||
background-color: #0088cc;
|
||||
.markItUpHeader ul .markItUpSeparator {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.modal-header {
|
||||
border-bottom: 1px solid #F3F3F3;
|
||||
}
|
||||
|
||||
.modal-header .close {
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
.modal-footer {
|
||||
border-top: 1px solid #F3F3F3;
|
||||
}
|
||||
|
||||
.drop-file-here {
|
||||
padding: 5px 40px;
|
||||
background: #ccc;
|
||||
margin-left: 4px;
|
||||
background: #f7f7f7;
|
||||
border: 3px dashed #D5D5D5;
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.modal-backdrop {
|
||||
background-color: #000;
|
||||
}
|
||||
|
||||
.modal-backdrop.in {
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
box-shadow: none;
|
||||
border: none;
|
||||
}
|
||||
|
||||
#readme .modal-dialog {
|
||||
width: 70%;
|
||||
}
|
||||
|
||||
#readme .modal-body {
|
||||
padding-top: 0px;
|
||||
}
|
||||
|
||||
#Choco_container_via {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/*************************************
|
||||
5. AUTHORIZATION
|
||||
*************************************/
|
||||
.login-body {
|
||||
background-color: #FBFBFB;
|
||||
}
|
||||
|
||||
.form-signin {
|
||||
max-width: 290px;
|
||||
padding: 19px 29px 29px;
|
||||
margin: 0 auto 20px;
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
6. MISC
|
||||
3. MEDIA QUERIES
|
||||
*************************************/
|
||||
|
||||
.small-grey-text {
|
||||
color:#333;
|
||||
font-size: 10px;
|
||||
|
||||
@media (max-width: 480px) {
|
||||
/* MarkItUp */
|
||||
.markItUpButton11,
|
||||
.markItUpButton12,
|
||||
.markItUpButton13,
|
||||
.markItUpButton14,
|
||||
.markItUpButton15,
|
||||
.markItUpButton16,
|
||||
.markItUpButton17,
|
||||
.markItUpButton18 {
|
||||
display: none;
|
||||
}
|
||||
.markItUpSeparator{
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Dashboard */
|
||||
.dashboard-well .col-xs-6 {
|
||||
width: 100%;
|
||||
}
|
||||
.dashboard-well .col-xs-6 .pull-right {
|
||||
float: left!important;
|
||||
}
|
||||
|
||||
|
||||
.btn-phone {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.row-phone {
|
||||
display: block!important;
|
||||
width: 100%!important;
|
||||
text-align: left!important;
|
||||
}
|
||||
|
||||
/* Users */
|
||||
.users-btns > div {
|
||||
display: block;
|
||||
text-align: left;
|
||||
margin-top: 10px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.users-btns > div:nth-child(2) {
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.page-users .btn-cancel {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.small-grey-text:hover {
|
||||
color:#000;
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.nav > li > a {
|
||||
padding: 15px 9px!important;
|
||||
}
|
||||
}
|
||||
|
||||
.small-white-text {
|
||||
color:#fff;
|
||||
font-size: 10px;
|
||||
@media (max-width: 320px) {
|
||||
.mobile-nav-tabs .nav-tabs > li {
|
||||
width: 100%;
|
||||
height: 46px;
|
||||
margin: 0px;
|
||||
}
|
||||
.mobile-nav-tabs .nav-tabs > li > a {
|
||||
background: #fff;
|
||||
border: 0;
|
||||
}
|
||||
.mobile-nav-tabs .nav-tabs > li.active > a,
|
||||
.mobile-nav-tabs .nav-tabs > li.active > a:hover,
|
||||
.mobile-nav-tabs .nav-tabs > li.active > a:focus {
|
||||
border: 0;
|
||||
color: #fff;
|
||||
background-color: #428bca;
|
||||
}
|
||||
.mobile-nav-tabs .nav-tabs {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
border: 0;
|
||||
}
|
||||
.mobile-nav-tabs .tab-pane > table {
|
||||
border-top: 1px solid #ddd!important;
|
||||
}
|
||||
}
|
||||
|
||||
.small-white-text:hover {
|
||||
color:#fdfdfd;
|
||||
}
|
||||
|
||||
.error-none {display:none;}
|
||||
.error-field {border:1px solid red!important;}
|
||||
.container-fluid {padding-left:0px;}
|
||||
img {max-width:none;}
|
||||
|
||||
a.btn-expand{
|
||||
color: #333;
|
||||
font-weight:bold;
|
||||
font-size:14px;
|
||||
text-decoration: none;
|
||||
padding-left:4px;
|
||||
padding-right:4px;
|
||||
}
|
||||
|
||||
footer a , footer{
|
||||
color:#333;
|
||||
font-size:10px;
|
||||
}
|
||||
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 32 KiB |
Binary file not shown.
Before Width: | Height: | Size: 28 KiB |
@@ -2,112 +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-responsive.css', 'backend', 2); ?>
|
||||
<?php Stylesheet::add('admin/themes/default/css/default.css', 'backend', 3); ?>
|
||||
<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('admin/themes/default/js/default.js', 'backend', 3); ?>
|
||||
<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 hidden-phone">
|
||||
<h3><?php echo __('Content', 'pages'); ?></h3>
|
||||
<ul>
|
||||
<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>
|
||||
<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'); ?>
|
||||
</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>
|
||||
<div class="monstra-menu-category-separator"></div>
|
||||
<?php } ?>
|
||||
<h3><?php echo __('System', 'system'); ?></h3>
|
||||
<ul>
|
||||
<?php Navigation::draw('system'); ?>
|
||||
</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>
|
||||
</div>
|
||||
<!-- /Block_sidebar -->
|
||||
</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 } ?>
|
||||
</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>
|
||||
|
||||
<!-- 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 align="right">
|
||||
<span style="border-top:1px solid #E0E0E0; padding-top:10px;">
|
||||
<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> /
|
||||
© 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,19 +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;}
|
||||
|
||||
/* Messanger */
|
||||
Messenger.options = {
|
||||
extraClasses: 'messenger-fixed messenger-on-bottom messenger-on-right',
|
||||
theme: 'flat'
|
||||
}
|
@@ -5,20 +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); ?>
|
||||
<?php Stylesheet::add('public/assets/css/bootstrap-responsive.css', 'backend', 2); ?>
|
||||
<?php Stylesheet::add('admin/themes/default/css/default.css', 'backend', 3); ?>
|
||||
<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-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); ?>
|
||||
<?php Javascript::add('admin/themes/default/js/default.js', 'backend', 3); ?>
|
||||
<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('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') { ?>
|
||||
@@ -43,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 __('Enter', '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
|
||||
@@ -93,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.1.3';
|
||||
const VERSION = '3.0.0';
|
||||
|
||||
|
||||
/**
|
||||
* Monstra environment
|
||||
@@ -113,14 +114,24 @@ class Monstra
|
||||
* Set Gelato Display Errors to False for Production environment.
|
||||
*/
|
||||
if (Monstra::$environment == Monstra::PRODUCTION) {
|
||||
define('GELATO_DISPLAY_ERRORS', false);
|
||||
define('GELATO_DEVELOPMENT', false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define Monstra Folder for Gelato Logs
|
||||
*/
|
||||
define ('GELATO_LOGS_PATH', LOGS);
|
||||
|
||||
/**
|
||||
* Include Gelato Library
|
||||
*/
|
||||
include ROOT . DS . 'libraries'. DS .'Gelato'. DS .'Gelato.php';
|
||||
|
||||
/**
|
||||
* Map Monstra Engine Directory
|
||||
*/
|
||||
ClassLoader::directory(ROOT . DS . 'engine' . DS);
|
||||
|
||||
/**
|
||||
* Map all Monstra Classes
|
||||
*/
|
||||
@@ -157,6 +168,9 @@ class Monstra
|
||||
|
||||
// Idiorm
|
||||
'ORM' => ROOT . DS .'libraries'. DS . 'Idiorm'. DS .'ORM.php',
|
||||
|
||||
// PHPMailer
|
||||
'PHPMailer' => ROOT . DS .'libraries'. DS . 'PHPMailer'. DS .'PHPMailer.php',
|
||||
));
|
||||
|
||||
/**
|
||||
@@ -171,18 +185,14 @@ 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) {
|
||||
|
||||
// Cleanup minify
|
||||
if (count($files = File::scan(MINIFY, array('css', 'js', 'php'))) > 0) foreach ($files as $file) File::delete(MINIFY . DS . $file);
|
||||
|
||||
// Cleanup cache
|
||||
if (count($namespaces = Dir::scan(CACHE)) > 0) foreach ($namespaces as $namespace) Dir::delete(CACHE . DS . $namespace);
|
||||
Monstra::cleanTmp();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -293,6 +303,18 @@ class Monstra
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Clean Monstra TMP folder.
|
||||
*/
|
||||
public static function cleanTmp()
|
||||
{
|
||||
// Cleanup minify
|
||||
if (count($files = File::scan(MINIFY, array('css', 'js', 'php'))) > 0) foreach ($files as $file) File::delete(MINIFY . DS . $file);
|
||||
|
||||
// Cleanup cache
|
||||
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.
|
||||
@@ -32,11 +32,13 @@ class I18n
|
||||
'el' => 'Ελληνικά',
|
||||
'en' => 'English',
|
||||
'es' => 'Español',
|
||||
'fa' => 'Farsi',
|
||||
'fi' => 'Suomi',
|
||||
'fr' => 'Français',
|
||||
'gl' => 'Galego',
|
||||
'hu' => 'Magyar',
|
||||
'it' => 'Italiano',
|
||||
'id' => 'Bahasa Indonesia',
|
||||
'ja' => '日本語',
|
||||
'lt' => 'Lietuvių',
|
||||
'nl' => 'Nederlands',
|
||||
@@ -51,7 +53,7 @@ class I18n
|
||||
'sr-yu' => 'Serbian',
|
||||
'tr' => 'Türkçe',
|
||||
'uk' => 'Українська',
|
||||
'zh' => '中文',
|
||||
'zh-cn' => '䏿–‡',
|
||||
);
|
||||
|
||||
/**
|
||||
|
@@ -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.
|
||||
@@ -110,4 +110,86 @@ class Navigation
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw items
|
||||
*
|
||||
* <code>
|
||||
* Navigation::draw('content');
|
||||
* Navigation::draw('top', Navigation::TOP);
|
||||
* <code>
|
||||
*
|
||||
* @param string $category Category
|
||||
* @param integer $type Type. Default is LEFT
|
||||
*/
|
||||
public static function get($category, $type = Navigation::LEFT)
|
||||
{
|
||||
// Sort items by priority
|
||||
$items = Arr::subvalSort(Navigation::$items, 'priority');
|
||||
|
||||
// Draw left navigation
|
||||
if ($type == Navigation::LEFT) {
|
||||
|
||||
// Loop trough the items
|
||||
foreach ($items as $item) {
|
||||
|
||||
// If current plugin id == selected item id then set class to current
|
||||
if (Request::get('id') == $item['id'] && $item['external'] == false) $class = 'class = "current" '; else $class = '';
|
||||
|
||||
// If current category == item category and navigation type is left them draw this item
|
||||
if ($item['category'] == $category && $item['type'] == Navigation::LEFT) {
|
||||
|
||||
// Is external item id or not ?
|
||||
if ($item['external'] == false) {
|
||||
echo '<li><a '.$class.'href="index.php?id='.$item['id'].'">'.$item['name'].'</a></li>';
|
||||
} else {
|
||||
echo '<li><a target="_blank" href="'.$item['id'].'">'.$item['name'].'</a></li>';
|
||||
}
|
||||
}
|
||||
}
|
||||
} elseif ($type == Navigation::TOP) {
|
||||
// Draw top navigation
|
||||
foreach ($items as $item) {
|
||||
if ($item['category'] == $category && $item['type'] == Navigation::TOP) {
|
||||
if ($item['external'] == false) {
|
||||
echo '<a class="btn btn-small btn-inverse" href="index.php?id='.$item['id'].'">'.$item['name'].'</a>'.Html::nbsp(2);
|
||||
} else {
|
||||
echo '<a target="_blank" class="btn btn-small btn-inverse" href="'.$item['id'].'">'.$item['name'].'</a>'.Html::nbsp(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw dropdown items
|
||||
*
|
||||
* <code>
|
||||
* Navigation::getDropdown('content');
|
||||
* <code>
|
||||
*
|
||||
* @param string $category Category
|
||||
*/
|
||||
public static function getDropdown($category)
|
||||
{
|
||||
// Sort items by priority
|
||||
$items = Arr::subvalSort(Navigation::$items, 'priority');
|
||||
|
||||
// Loop trough the items
|
||||
foreach ($items as $item) {
|
||||
|
||||
// If current plugin id == selected item id then set class to current
|
||||
if (Request::get('id') == $item['id'] && $item['external'] == false) $class = 'selected = "selected" '; else $class = '';
|
||||
|
||||
// If current category == item category and navigation type is left them draw this item
|
||||
if ($item['category'] == $category && $item['type'] == Navigation::LEFT) {
|
||||
|
||||
// Is external item id or not ?
|
||||
if ($item['external'] == false) {
|
||||
echo '<option '.$class.'rel="index.php?id='.$item['id'].'">'.$item['name'].'</option>';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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.
|
||||
@@ -68,7 +68,7 @@ class Plugin
|
||||
$plugins = new Table('plugins');
|
||||
|
||||
// Select all plugins
|
||||
$records = $plugins->select(null, 'all', null, array('location', 'frontend', 'backend', 'status', 'priority'), 'priority', 'ASC');
|
||||
$records = $plugins->select(null, 'all', null, array('location', 'status', 'priority'), 'priority', 'ASC');
|
||||
|
||||
// Now include plugins from $records plugins array
|
||||
// If plugin is active then load it to the system.
|
||||
|
@@ -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.
|
||||
@@ -96,7 +96,7 @@ class Stylesheet
|
||||
}
|
||||
}
|
||||
$backend_buffer = Stylesheet::parseVariables($backend_buffer);
|
||||
file_put_contents($backend_site_css_path, Minify::css($backend_buffer));
|
||||
file_put_contents($backend_site_css_path, MinifyCSS::process($backend_buffer));
|
||||
$backend_regenerate = false;
|
||||
}
|
||||
|
||||
@@ -120,7 +120,7 @@ class Stylesheet
|
||||
}
|
||||
}
|
||||
$frontend_buffer = Stylesheet::parseVariables($frontend_buffer);
|
||||
file_put_contents($frontend_site_css_path, Minify::css($frontend_buffer));
|
||||
file_put_contents($frontend_site_css_path, MinifyCSS::process($frontend_buffer));
|
||||
$frontend_regenerate = false;
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
@@ -22,7 +22,7 @@ class Security
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $token_name = 'security_token';
|
||||
protected static $token_name = 'security_token';
|
||||
|
||||
/**
|
||||
* Protected constructor since this is a static class.
|
||||
@@ -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.
|
||||
@@ -176,7 +176,7 @@ class Site
|
||||
if ( ! file_exists(MINIFY . DS . 'theme.' . $current_theme . '.minify.' . $template . '.template.php') or
|
||||
filemtime(THEMES_SITE . DS . $current_theme . DS . $template .'.template.php') > filemtime(MINIFY . DS . 'theme.' . $current_theme . '.minify.' . $template . '.template.php')) {
|
||||
$buffer = file_get_contents(THEMES_SITE. DS . $current_theme . DS . $template .'.template.php');
|
||||
$buffer = Minify::html($buffer);
|
||||
$buffer = MinifyHTML::process($buffer);
|
||||
file_put_contents(MINIFY . DS . 'theme.' . $current_theme . '.minify.' . $template . '.template.php', $buffer);
|
||||
}
|
||||
|
||||
@@ -185,7 +185,7 @@ class Site
|
||||
if ( ! File::exists(MINIFY . DS . 'theme.' . $current_theme . '.' . 'minify.index.template.php') or
|
||||
filemtime(THEMES_SITE . DS . $current_theme . DS . 'index.template.php') > filemtime(MINIFY . DS . 'theme.' . $current_theme . '.' . 'minify.index.template.php')) {
|
||||
$buffer = file_get_contents(THEMES_SITE . DS . $current_theme . DS . 'index.template.php');
|
||||
$buffer = Minify::html($buffer);
|
||||
$buffer = MinifyHTML::process($buffer);
|
||||
file_put_contents(MINIFY . DS . 'theme.' . $current_theme . '.' . 'minify.index.template.php', $buffer);
|
||||
}
|
||||
|
||||
|
@@ -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.
|
||||
@@ -137,14 +137,11 @@ class Uri
|
||||
// param1/param2
|
||||
if ($uri[0] !== Uri::$default_component) {
|
||||
if (isset($uri[1])) {
|
||||
$data[0] = $uri[0];
|
||||
$data[1] = $uri[1];
|
||||
// Some more uri parts :)
|
||||
// site.ru/part1/part2/part3/part4/part5/part6/
|
||||
if (isset($uri[2])) $data[2] = $uri[2];
|
||||
if (isset($uri[3])) $data[3] = $uri[3];
|
||||
if (isset($uri[4])) $data[4] = $uri[4];
|
||||
if (isset($uri[5])) $data[5] = $uri[5];
|
||||
|
||||
foreach ($uri as $part) {
|
||||
$data[] = $part;
|
||||
}
|
||||
|
||||
} else { // default
|
||||
$data[0] = $uri[0];
|
||||
}
|
||||
|
@@ -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.
|
||||
@@ -546,7 +546,7 @@ class Table
|
||||
if ($order_by == 'id') {
|
||||
$records[$count]['sort'] = (int) $vars['id'];
|
||||
} else {
|
||||
$records[$count]['sort'] = (string) $value;
|
||||
$records[$count]['sort'] = (string) $vars[$order_by];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -807,6 +807,7 @@ class Table
|
||||
|
||||
return $c;
|
||||
}
|
||||
return $a;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -853,7 +854,7 @@ class Table
|
||||
*/
|
||||
protected static function _save($table)
|
||||
{
|
||||
$dom = new DOMDocument('1.0');
|
||||
$dom = new DOMDocument('1.0', 'utf-8');
|
||||
$dom->preserveWhiteSpace = false;
|
||||
|
||||
// Save new xml data to xml file only if loadXML successful.
|
||||
|
@@ -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,19 +1,10 @@
|
||||
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');
|
||||
|
||||
/**
|
||||
* Report All Errors
|
||||
*
|
||||
* By setting error reporting to -1, we essentially force PHP to report
|
||||
* every error, and this is guranteed to show every error on future
|
||||
* releases of PHP. This allows everything to be fixed early!
|
||||
* Monstra requires PHP 5.2.3 or greater
|
||||
*/
|
||||
error_reporting(-1);
|
||||
|
||||
/**
|
||||
* Monstra requires PHP 5.2.0 or greater
|
||||
*/
|
||||
if (version_compare(PHP_VERSION, "5.2.0", "<")) {
|
||||
exit("Monstra requires PHP 5.2.0 or greater.");
|
||||
if (version_compare(PHP_VERSION, "5.2.3", "<")) {
|
||||
exit("Monstra requires PHP 5.2.3 or greater.");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -30,7 +21,16 @@ include ROOT . DS .'engine'. DS .'Monstra.php';
|
||||
* Monstra::STAGING - The staging environment.
|
||||
* Monstra::PRODUCTION - The production environment.
|
||||
*/
|
||||
Monstra::$environment = Monstra::DEVELOPMENT;
|
||||
Monstra::$environment = Monstra::PRODUCTION;
|
||||
|
||||
/**
|
||||
* Report Errors
|
||||
*/
|
||||
if (Monstra::$environment == Monstra::PRODUCTION) {
|
||||
error_reporting(0);
|
||||
} else {
|
||||
error_reporting(-1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize Monstra
|
||||
|
@@ -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: 1.1 KiB |
19
index.php
19
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.
|
||||
@@ -21,16 +21,6 @@ define('ROOT', rtrim(dirname(__FILE__), '\\/'));
|
||||
define('BACKEND', false);
|
||||
define('MONSTRA_ACCESS', true);
|
||||
|
||||
/* TEMP CODE BEGIN */
|
||||
function byteFormat($size)
|
||||
{
|
||||
$unit = array('b', 'kb', 'mb', 'gb', 'tb', 'pb');
|
||||
|
||||
return @round($size/pow(1024, ($i=floor(log($size, 1024)))), 2).' '.$unit[$i];
|
||||
}
|
||||
$_start = memory_get_usage();
|
||||
/* TEMP CODE END */
|
||||
|
||||
// First check for installer then go
|
||||
if (file_exists('install.php')) {
|
||||
if (isset($_GET['install'])) {
|
||||
@@ -55,6 +45,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')));
|
||||
}
|
||||
}
|
||||
@@ -71,7 +64,3 @@ if (file_exists('install.php')) {
|
||||
// Flush (send) the output buffer and turn off output buffering
|
||||
ob_end_flush();
|
||||
}
|
||||
|
||||
/* TEMP CODE BEGIN */
|
||||
echo byteFormat(memory_get_usage() - $_start);
|
||||
/* TEMP CODE END */
|
||||
|
588
install.php
588
install.php
@@ -10,17 +10,20 @@
|
||||
if ( ! defined('BACKEND')) define('BACKEND', false);
|
||||
if ( ! defined('MONSTRA_ACCESS')) define('MONSTRA_ACCESS', true);
|
||||
|
||||
// Set default timezone
|
||||
$system_timezone = date_default_timezone_get();
|
||||
|
||||
// Load bootstrap file
|
||||
require_once(ROOT . DS . 'engine' . DS . '_init.php');
|
||||
|
||||
// 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']);
|
||||
@@ -32,16 +35,21 @@
|
||||
$dir_array = array('public', 'storage', 'backups', 'tmp');
|
||||
|
||||
// Languages array
|
||||
$languages_array = array('en', 'ru', 'lt', 'it', 'de', 'pt-br', 'uk');
|
||||
$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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,6 +85,7 @@
|
||||
'slogan' => __('Site slogan', 'system'),
|
||||
'defaultpage' => 'home',
|
||||
'timezone' => Request::post('timezone'),
|
||||
'system_email' => Request::post('email'),
|
||||
'theme_site_name' => 'default',
|
||||
'theme_admin_name' => 'default'));
|
||||
|
||||
@@ -101,6 +110,8 @@
|
||||
|
||||
// Installation done :)
|
||||
header("location: index.php?install=done");
|
||||
} else {
|
||||
Notification::setNow('errors', $errors);
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -111,89 +122,119 @@
|
||||
<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;
|
||||
float: none!important;
|
||||
margin-bottom:5px;
|
||||
padding-right:20px;
|
||||
max-width: 300px;
|
||||
margin: 20px auto 20px;
|
||||
text-align: center;
|
||||
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;
|
||||
}
|
||||
|
||||
.language-link {
|
||||
color:#7A7A7C;
|
||||
.install-languages a {
|
||||
padding-left: 2px;
|
||||
padding-right: 2px;
|
||||
}
|
||||
|
||||
.language-link+.language-link:before {
|
||||
color: #ccc;
|
||||
content: ' | ';
|
||||
.language-link img {
|
||||
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
|
||||
filter: alpha(opacity=30);
|
||||
-khtml-opacity: 0.3;
|
||||
-moz-opacity:0.3;
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.language-link:hover {
|
||||
color:#000;
|
||||
text-decoration: none;
|
||||
.language-link-current img {
|
||||
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
|
||||
filter: alpha(opacity=100);
|
||||
-moz-opacity:1.0;
|
||||
-khtml-opacity: 1.0;
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
.language-link-current {
|
||||
color:#000;
|
||||
font-weight: 700;
|
||||
.install-languages a img:hover {
|
||||
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
|
||||
filter: alpha(opacity=100);
|
||||
-moz-opacity:1.0;
|
||||
-khtml-opacity: 1.0;
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
.continue {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<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'] = '';
|
||||
@@ -241,211 +282,260 @@
|
||||
$errors[$dir] = 'error';
|
||||
}
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
||||
<div class="install-languages">
|
||||
<?php foreach ($languages_array as $lang_code) {?>
|
||||
<a class="language-link<?php if (Option::get('language') == $lang_code) echo ' language-link-current';?>" href="<?php echo $site_url.'?language=' . $lang_code; ?>"><?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.
|
||||
@@ -22,14 +22,14 @@ class Cache
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $cache_dir = '';
|
||||
protected static $cache_dir = '';
|
||||
|
||||
/**
|
||||
* Cache file ext
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $cache_file_ext = 'txt';
|
||||
protected static $cache_file_ext = 'txt';
|
||||
|
||||
/**
|
||||
* Cache life time (in seconds)
|
||||
|
@@ -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.
|
||||
@@ -58,7 +58,7 @@ class ClassLoader
|
||||
|
||||
/**
|
||||
* Add class to mapping.
|
||||
*
|
||||
*
|
||||
* <code>
|
||||
* ClassLoader::mapClass('ClassName', 'path/to/class');
|
||||
* </code>
|
||||
@@ -74,7 +74,7 @@ class ClassLoader
|
||||
|
||||
/**
|
||||
* Add multiple classes to mapping.
|
||||
*
|
||||
*
|
||||
* <code>
|
||||
* ClassLoader::mapClasses(array('ClassName' => 'path/to/class','ClassName' => 'path/to/class'));
|
||||
* </code>
|
||||
@@ -91,7 +91,7 @@ class ClassLoader
|
||||
|
||||
/**
|
||||
* Adds a PSR-0 directory path.
|
||||
*
|
||||
*
|
||||
* <code>
|
||||
* ClassLoader::directory('path/to/classes');
|
||||
* </code>
|
||||
@@ -106,7 +106,7 @@ class ClassLoader
|
||||
|
||||
/**
|
||||
* Registers a namespace.
|
||||
*
|
||||
*
|
||||
* <code>
|
||||
* ClassLoader::registerNamespace('Namespace', '/path/to/namespace/');
|
||||
* </code>
|
||||
@@ -122,9 +122,9 @@ class ClassLoader
|
||||
|
||||
/**
|
||||
* Set an alias for a class.
|
||||
*
|
||||
*
|
||||
* <code>
|
||||
* ClassLoader::registerNamespace('ClassNameAlias', 'ClassName');
|
||||
* ClassLoader::alias('ClassNameAlias', 'ClassName');
|
||||
* </code>
|
||||
*
|
||||
* @access public
|
||||
@@ -171,7 +171,7 @@ class ClassLoader
|
||||
|
||||
/**
|
||||
* Autoloader.
|
||||
*
|
||||
*
|
||||
* <code>
|
||||
* ClassLoader::load();
|
||||
* </code>
|
||||
@@ -222,4 +222,15 @@ class ClassLoader
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the Gelato ClassLoader to the SPL autoload stack.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function register()
|
||||
{
|
||||
spl_autoload_register('ClassLoader::load', true);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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.
|
||||
@@ -18,6 +18,25 @@
|
||||
class ErrorHandler
|
||||
{
|
||||
|
||||
/**
|
||||
* Error Levels
|
||||
*/
|
||||
public static $levels = array (
|
||||
E_ERROR => 'Fatal Error',
|
||||
E_PARSE => 'Parse Error',
|
||||
E_COMPILE_ERROR => 'Compile Error',
|
||||
E_COMPILE_WARNING => 'Compile Warning',
|
||||
E_STRICT => 'Strict Mode Error',
|
||||
E_NOTICE => 'Notice',
|
||||
E_WARNING => 'Warning',
|
||||
E_RECOVERABLE_ERROR => 'Recoverable Error',
|
||||
E_USER_NOTICE => 'Notice',
|
||||
E_USER_WARNING => 'Warning',
|
||||
E_USER_ERROR => 'Error',
|
||||
/*E_DEPRECATED => 'Deprecated',*/ /* PHP 5.3 only */
|
||||
/*E_USER_DEPRECATED => 'Deprecated'*/ /* PHP 5.3 only */
|
||||
);
|
||||
|
||||
/**
|
||||
* Protected constructor since this is a static class.
|
||||
*
|
||||
@@ -80,11 +99,35 @@ class ErrorHandler
|
||||
* @param integer $line The line number where the error occurred
|
||||
* @return boolean
|
||||
*/
|
||||
public static function errorHandler($code, $message, $file, $line)
|
||||
public static function error($code, $message, $file, $line)
|
||||
{
|
||||
// If isset error_reporting and $code then throw new error exception
|
||||
if ((error_reporting() & $code) !== 0) {
|
||||
throw new ErrorException($message, $code, 0, $file, $line);
|
||||
|
||||
/**
|
||||
* Dont thow NOTICE exception for PRODUCTION Environment. Just write to log.
|
||||
*/
|
||||
if (GELATO_DEVELOPMENT == false && $code == 8) {
|
||||
|
||||
// Get exception info
|
||||
$error['code'] = $code;
|
||||
$error['message'] = $message;
|
||||
$error['file'] = $file;
|
||||
$error['line'] = $line;
|
||||
$error['type'] = 'ErrorException: ';
|
||||
|
||||
$codes = array (
|
||||
E_USER_NOTICE => 'Notice',
|
||||
);
|
||||
|
||||
$error['type'] .= in_array($error['code'], array_keys($codes)) ? $codes[$error['code']] : 'Unknown Error';
|
||||
|
||||
// Write to log
|
||||
Log::write("{$error['type']}: {$error['message']} in {$error['file']} at line {$error['line']}");
|
||||
|
||||
} else {
|
||||
throw new ErrorException($message, $code, 0, $file, $line);
|
||||
}
|
||||
}
|
||||
|
||||
// Don't execute PHP internal error handler
|
||||
@@ -170,7 +213,7 @@ class ErrorHandler
|
||||
if (isset($entry['file'])) {
|
||||
$location['file'] = $entry['file'];
|
||||
$location['line'] = $entry['line'];
|
||||
$location['code'] = static::highlightCode($entry['file'], $entry['line']);
|
||||
$location['code'] = self::highlightCode($entry['file'], $entry['line']);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -188,9 +231,9 @@ class ErrorHandler
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert errors not caught by the errorHandler to ErrorExceptions.
|
||||
* Convert errors not caught by the error handler to ErrorExceptions.
|
||||
*/
|
||||
public static function fatalErrorHandler()
|
||||
public static function fatal()
|
||||
{
|
||||
$e = error_get_last();
|
||||
|
||||
@@ -210,70 +253,54 @@ class ErrorHandler
|
||||
public static function exception($exception)
|
||||
{
|
||||
try {
|
||||
// Empty output buffers
|
||||
|
||||
// Empty output buffers
|
||||
while(ob_get_level() > 0) ob_end_clean();
|
||||
|
||||
// Get exception info
|
||||
|
||||
$error['code'] = $exception->getCode();
|
||||
$error['message'] = $exception->getMessage();
|
||||
$error['file'] = $exception->getFile();
|
||||
$error['line'] = $exception->getLine();
|
||||
|
||||
// Determine error type
|
||||
|
||||
if ($exception instanceof ErrorException) {
|
||||
$error['type'] = 'ErrorException: ';
|
||||
|
||||
$codes = array
|
||||
(
|
||||
E_ERROR => 'Fatal Error',
|
||||
E_PARSE => 'Parse Error',
|
||||
E_COMPILE_ERROR => 'Compile Error',
|
||||
E_COMPILE_WARNING => 'Compile Warning',
|
||||
E_STRICT => 'Strict Mode Error',
|
||||
E_NOTICE => 'Notice',
|
||||
E_WARNING => 'Warning',
|
||||
E_RECOVERABLE_ERROR => 'Recoverable Error',
|
||||
/*E_DEPRECATED => 'Deprecated',*/
|
||||
E_USER_NOTICE => 'Notice',
|
||||
E_USER_WARNING => 'Warning',
|
||||
E_USER_ERROR => 'Error',
|
||||
/*E_USER_DEPRECATED => 'Deprecated'*/
|
||||
);
|
||||
|
||||
$error['type'] .= in_array($error['code'], array_keys($codes)) ? $codes[$error['code']] : 'Unknown Error';
|
||||
$error['type'] .= in_array($error['code'], array_keys(ErrorHandler::$levels)) ? ErrorHandler::$levels[$error['code']] : 'Unknown Error';
|
||||
} else {
|
||||
$error['type'] = get_class($exception);
|
||||
}
|
||||
|
||||
// @todo Write to error log
|
||||
|
||||
/*if () {
|
||||
Write here
|
||||
}*/
|
||||
// Write to log
|
||||
Log::write("{$error['type']}: {$error['message']} in {$error['file']} at line {$error['line']}");
|
||||
|
||||
// Send headers and output
|
||||
@header('Content-Type: text/html; charset=UTF-8');
|
||||
|
||||
if (GELATO_DISPLAY_ERRORS) {
|
||||
if (GELATO_DEVELOPMENT) {
|
||||
|
||||
$error['backtrace'] = $exception->getTrace();
|
||||
|
||||
if ($exception instanceof ErrorException) {
|
||||
$error['backtrace'] = array_slice($error['backtrace'], 1); //Remove call to error handler from backtrace
|
||||
}
|
||||
|
||||
$error['backtrace'] = static::formatBacktrace($error['backtrace']);
|
||||
$error['highlighted'] = static::highlightCode($error['file'], $error['line']);
|
||||
$error['backtrace'] = self::formatBacktrace($error['backtrace']);
|
||||
$error['highlighted'] = self::highlightCode($error['file'], $error['line']);
|
||||
|
||||
Response::status(500);
|
||||
@header('HTTP/1.1 500 Internal Server Error');
|
||||
include 'Resources/Views/Errors/exception.php';
|
||||
|
||||
} else {
|
||||
Response::status(500);
|
||||
|
||||
@header('HTTP/1.1 500 Internal Server Error');
|
||||
include 'Resources/Views/Errors/production.php';
|
||||
|
||||
}
|
||||
|
||||
} catch (Exception $e) {
|
||||
|
||||
// Empty output buffers
|
||||
while(ob_get_level() > 0) ob_end_clean();
|
||||
|
||||
echo $e->getMessage() . ' in ' . $e->getFile() . ' (line ' . $e->getLine() . ').';
|
||||
|
@@ -4,13 +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;
|
||||
}
|
||||
|
||||
#gelato-error pre {
|
||||
@@ -21,16 +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;
|
||||
|
||||
}
|
||||
|
||||
#gelato-error .body {
|
||||
@@ -271,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.
|
||||
@@ -18,22 +18,46 @@
|
||||
/**
|
||||
* The version of Gelato
|
||||
*/
|
||||
define('GELATO_VERSION', '1.0.0');
|
||||
define('GELATO_VERSION', '1.0.3');
|
||||
|
||||
/**
|
||||
* Define __DIR__ constant for PHP 5.2.x
|
||||
*/
|
||||
if ( ! defined('__DIR__')) {
|
||||
define('__DIR__', dirname(__FILE__));
|
||||
}
|
||||
|
||||
/**
|
||||
* Display Gelato Errors or not ?
|
||||
*/
|
||||
if ( ! defined('GELATO_DISPLAY_ERRORS')) {
|
||||
define('GELATO_DISPLAY_ERRORS', true);
|
||||
if ( ! defined('GELATO_DEVELOPMENT')) {
|
||||
define('GELATO_DEVELOPMENT', true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display Gelato Autoloader or not ?
|
||||
* Use Gelato Class Loader or not ?
|
||||
*/
|
||||
if ( ! defined('GELATO_AUTOLOADER')) {
|
||||
define('GELATO_AUTOLOADER', true);
|
||||
if ( ! defined('GELATO_CLASS_LOADER')) {
|
||||
define('GELATO_CLASS_LOADER', true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load Gelato Logger
|
||||
*/
|
||||
require_once __DIR__ . '/Log/Log.php';
|
||||
|
||||
/**
|
||||
* Use Gelato Logger default path or not ?
|
||||
*/
|
||||
if ( ! defined('GELATO_LOGS_PATH')) {
|
||||
define('GELATO_LOGS_PATH', __DIR__. '/_logs');
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure Gelato Logger
|
||||
*/
|
||||
Log::configure('path', GELATO_LOGS_PATH);
|
||||
|
||||
/**
|
||||
* Load Gelato Error Handler
|
||||
*/
|
||||
@@ -42,12 +66,12 @@ require_once __DIR__ . '/ErrorHandler/ErrorHandler.php';
|
||||
/**
|
||||
* Set Error Handler
|
||||
*/
|
||||
set_error_handler('ErrorHandler::errorHandler');
|
||||
set_error_handler('ErrorHandler::error');
|
||||
|
||||
/**
|
||||
* Set Fatal Error Handler
|
||||
*/
|
||||
register_shutdown_function('ErrorHandler::fatalErrorHandler');
|
||||
register_shutdown_function('ErrorHandler::fatal');
|
||||
|
||||
/**
|
||||
* Set Exception Handler
|
||||
@@ -76,7 +100,9 @@ ClassLoader::mapClasses(array(
|
||||
'Html' => __DIR__.'/Html/Html.php',
|
||||
'Image' => __DIR__.'/Image/Image.php',
|
||||
'Inflector' => __DIR__.'/Inflector/Inflector.php',
|
||||
'Minify' => __DIR__.'/Minify/Minify.php',
|
||||
'MinifyCSS' => __DIR__.'/Minify/MinifyCSS.php',
|
||||
'MinifyHTML' => __DIR__.'/Minify/MinifyHTML.php',
|
||||
'MinifyJS' => __DIR__.'/Minify/MinifyJS.php',
|
||||
'Notification' => __DIR__.'/Notification/Notification.php',
|
||||
'Number' => __DIR__.'/Number/Number.php',
|
||||
'Registry' => __DIR__.'/Registry/Registry.php',
|
||||
@@ -91,8 +117,8 @@ ClassLoader::mapClasses(array(
|
||||
));
|
||||
|
||||
/**
|
||||
* Register Gelato Autoloader
|
||||
* Register Gelato Class Loader
|
||||
*/
|
||||
if (GELATO_AUTOLOADER) {
|
||||
spl_autoload_register('ClassLoader::load');
|
||||
if (GELATO_CLASS_LOADER) {
|
||||
ClassLoader::register();
|
||||
}
|
||||
|
@@ -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,6 +28,13 @@ class Html
|
||||
'accept', 'tabindex', 'accesskey', 'alt', 'title', 'class',
|
||||
'style', 'selected', 'checked', 'readonly', 'disabled',
|
||||
);
|
||||
|
||||
/**
|
||||
* The registered custom macros.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $macros = array();
|
||||
|
||||
/**
|
||||
* Protected constructor since this is a static class.
|
||||
@@ -44,7 +51,7 @@ class Html
|
||||
*
|
||||
* <code>
|
||||
*
|
||||
* // Registering a Htmlk macro
|
||||
* // Registering a Html macro
|
||||
* Html::macro('my_element', function() {
|
||||
* return '<element id="monstra">';
|
||||
* });
|
||||
@@ -54,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.'">';
|
||||
* });
|
||||
*
|
||||
@@ -150,7 +157,7 @@ class Html
|
||||
*/
|
||||
public static function br($num = 1)
|
||||
{
|
||||
return str_repeat("<br />",(int) $num);
|
||||
return str_repeat("<br>",(int) $num);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -278,8 +285,57 @@ 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).'>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Obfuscate an e-mail address to prevent spam-bots from sniffing it.
|
||||
*
|
||||
* <code>
|
||||
* echo Html::email('gelato@monstra.org');
|
||||
* </code>
|
||||
*
|
||||
* @param string $email
|
||||
* @return string
|
||||
*/
|
||||
public static function email($email)
|
||||
{
|
||||
return str_replace('@', '@', Html::obfuscate($email));
|
||||
}
|
||||
|
||||
/**
|
||||
* Obfuscate a string to prevent spam-bots from sniffing it.
|
||||
*
|
||||
* This method obfuscate the value, randomly convert each
|
||||
* letter to its entity or hexadecimal representation, keeping a
|
||||
* bot from sniffing the randomly obfuscated letters.
|
||||
*
|
||||
* <code>
|
||||
* echo Html::obfuscate('gelato@monstra.org');
|
||||
* </code>
|
||||
*
|
||||
* @param string $value
|
||||
* @return string
|
||||
*/
|
||||
public static function obfuscate($value)
|
||||
{
|
||||
$safe = '';
|
||||
|
||||
foreach (str_split($value) as $letter) {
|
||||
switch (rand(1, 3)) {
|
||||
case 1:
|
||||
$safe .= '&#'.ord($letter).';';
|
||||
break;
|
||||
case 2:
|
||||
$safe .= '&#x'.dechex(ord($letter)).';';
|
||||
break;
|
||||
case 3:
|
||||
$safe .= $letter;
|
||||
}
|
||||
}
|
||||
|
||||
return $safe;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert html to plain text
|
||||
|
@@ -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.
|
||||
|
63
libraries/Gelato/Log/Log.php
Normal file
63
libraries/Gelato/Log/Log.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Gelato Library
|
||||
*
|
||||
* This source file is part of the Gelato Library. More information,
|
||||
* documentation and tutorials can be found at http://gelato.monstra.org
|
||||
*
|
||||
* @package Gelato
|
||||
*
|
||||
* @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.
|
||||
*/
|
||||
|
||||
class Log
|
||||
{
|
||||
|
||||
/**
|
||||
* Path to the logs.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected static $path = '';
|
||||
|
||||
/**
|
||||
* Protected constructor since this is a static class.
|
||||
*
|
||||
* @access protected
|
||||
*/
|
||||
protected function __construct()
|
||||
{
|
||||
// Nothing here
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure Log
|
||||
*
|
||||
* @access public
|
||||
* @param string $setting The setting
|
||||
* @param string $value The value
|
||||
*/
|
||||
public static function configure($setting, $value)
|
||||
{
|
||||
if (property_exists("log", $setting)) Log::$$setting = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes message to log.
|
||||
*
|
||||
* @access public
|
||||
* @param string $message The message to write to the log
|
||||
* @return boolean
|
||||
*/
|
||||
public static function write($message)
|
||||
{
|
||||
return (bool) file_put_contents(rtrim(Log::$path, '/') . '/' . gmdate('Y_m_d') . '.log',
|
||||
'[' . gmdate('d-M-Y H:i:s') . '] ' . $message . PHP_EOL,
|
||||
FILE_APPEND);
|
||||
}
|
||||
}
|
@@ -1,93 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Gelato Library
|
||||
*
|
||||
* This source file is part of the Gelato Library. More information,
|
||||
* documentation and tutorials can be found at http://gelato.monstra.org
|
||||
*
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @copyright 2012-2013 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.
|
||||
*/
|
||||
|
||||
class Minify
|
||||
{
|
||||
/**
|
||||
* Protected constructor since this is a static class.
|
||||
*
|
||||
* @access protected
|
||||
*/
|
||||
protected function __construct()
|
||||
{
|
||||
// Nothing here
|
||||
}
|
||||
|
||||
/**
|
||||
* Minify html
|
||||
*
|
||||
* <code>
|
||||
* echo Minify::html($buffer);
|
||||
* </code>
|
||||
*
|
||||
* @param string $buffer html
|
||||
* @return string
|
||||
*/
|
||||
public static function html($buffer)
|
||||
{
|
||||
return preg_replace('/^\\s+|\\s+$/m', '', $buffer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Minify css
|
||||
*
|
||||
* <code>
|
||||
* echo Minify::css($buffer);
|
||||
* </code>
|
||||
*
|
||||
* @param string $buffer css
|
||||
* @return string
|
||||
*/
|
||||
public static function css($buffer)
|
||||
{
|
||||
// Remove comments
|
||||
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
|
||||
|
||||
// Remove tabs, spaces, newlines, etc.
|
||||
$buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
|
||||
|
||||
// Preserve empty comment after '>' http://www.webdevout.net/css-hacks#in_css-selectors
|
||||
$buffer = preg_replace('@>/\\*\\s*\\*/@', '>/*keep*/', $buffer);
|
||||
|
||||
// Preserve empty comment between property and value
|
||||
// http://css-discuss.incutio.com/?page=BoxModelHack
|
||||
$buffer = preg_replace('@/\\*\\s*\\*/\\s*:@', '/*keep*/:', $buffer);
|
||||
$buffer = preg_replace('@:\\s*/\\*\\s*\\*/@', ':/*keep*/', $buffer);
|
||||
|
||||
// Remove ws around { } and last semicolon in declaration block
|
||||
$buffer = preg_replace('/\\s*{\\s*/', '{', $buffer);
|
||||
$buffer = preg_replace('/;?\\s*}\\s*/', '}', $buffer);
|
||||
|
||||
// Remove ws surrounding semicolons
|
||||
$buffer = preg_replace('/\\s*;\\s*/', ';', $buffer);
|
||||
|
||||
// Remove ws around urls
|
||||
$buffer = preg_replace('/url\\(\\s*([^\\)]+?)\\s*\\)/x', 'url($1)', $buffer);
|
||||
|
||||
// Remove ws between rules and colons
|
||||
$buffer = preg_replace('/\\s*([{;])\\s*([\\*_]?[\\w\\-]+)\\s*:\\s*(\\b|[#\'"])/x', '$1$2:$3', $buffer);
|
||||
|
||||
// Minimize hex colors
|
||||
$buffer = preg_replace('/([^=])#([a-f\\d])\\2([a-f\\d])\\3([a-f\\d])\\4([\\s;\\}])/i', '$1#$2$3$4$5', $buffer);
|
||||
|
||||
// Replace any ws involving newlines with a single newline
|
||||
$buffer = preg_replace('/[ \\t]*\\n+\\s*/', "\n", $buffer);
|
||||
|
||||
return $buffer;
|
||||
}
|
||||
|
||||
}
|
241
libraries/Gelato/Minify/MinifyCSS.php
Normal file
241
libraries/Gelato/Minify/MinifyCSS.php
Normal file
@@ -0,0 +1,241 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Gelato Library
|
||||
*
|
||||
* This source file is part of the Gelato Library. More information,
|
||||
* documentation and tutorials can be found at http://gelato.monstra.org
|
||||
*
|
||||
* @package Gelato
|
||||
*
|
||||
* @author Romanenko Sergey / Awilum <awilum@msn.com>
|
||||
* @author Stephen Clay <steve@mrclay.org>
|
||||
* @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.
|
||||
*/
|
||||
|
||||
class MinifyCSS
|
||||
{
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $_options = null;
|
||||
|
||||
/**
|
||||
* Are we "in" a hack? I.e. are some browsers targetted until the next comment?
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $_inHack = false;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param array $options (currently ignored)
|
||||
*/
|
||||
private function __construct($options)
|
||||
{
|
||||
$this->_options = $options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Minify a CSS string
|
||||
*
|
||||
* @param string $css
|
||||
*
|
||||
* @param array $options (currently ignored)
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function process($css, $options = array())
|
||||
{
|
||||
$obj = new MinifyCSS($options);
|
||||
|
||||
return $obj->_process($css);
|
||||
}
|
||||
|
||||
/**
|
||||
* Minify a CSS string
|
||||
*
|
||||
* @param string $css
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function _process($css)
|
||||
{
|
||||
$css = str_replace("\r\n", "\n", $css);
|
||||
|
||||
// preserve empty comment after '>'
|
||||
// http://www.webdevout.net/css-hacks#in_css-selectors
|
||||
$css = preg_replace('@>/\\*\\s*\\*/@', '>/*keep*/', $css);
|
||||
|
||||
// preserve empty comment between property and value
|
||||
// http://css-discuss.incutio.com/?page=BoxModelHack
|
||||
$css = preg_replace('@/\\*\\s*\\*/\\s*:@', '/*keep*/:', $css);
|
||||
$css = preg_replace('@:\\s*/\\*\\s*\\*/@', ':/*keep*/', $css);
|
||||
|
||||
// apply callback to all valid comments (and strip out surrounding ws
|
||||
$css = preg_replace_callback('@\\s*/\\*([\\s\\S]*?)\\*/\\s*@'
|
||||
,array($this, '_commentCB'), $css);
|
||||
|
||||
// remove ws around { } and last semicolon in declaration block
|
||||
$css = preg_replace('/\\s*{\\s*/', '{', $css);
|
||||
$css = preg_replace('/;?\\s*}\\s*/', '}', $css);
|
||||
|
||||
// remove ws surrounding semicolons
|
||||
$css = preg_replace('/\\s*;\\s*/', ';', $css);
|
||||
|
||||
// remove ws around urls
|
||||
$css = preg_replace('/
|
||||
url\\( # url(
|
||||
\\s*
|
||||
([^\\)]+?) # 1 = the URL (really just a bunch of non right parenthesis)
|
||||
\\s*
|
||||
\\) # )
|
||||
/x', 'url($1)', $css);
|
||||
|
||||
// remove ws between rules and colons
|
||||
$css = preg_replace('/
|
||||
\\s*
|
||||
([{;]) # 1 = beginning of block or rule separator
|
||||
\\s*
|
||||
([\\*_]?[\\w\\-]+) # 2 = property (and maybe IE filter)
|
||||
\\s*
|
||||
:
|
||||
\\s*
|
||||
(\\b|[#\'"-]) # 3 = first character of a value
|
||||
/x', '$1$2:$3', $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);*/
|
||||
|
||||
// remove spaces between font families
|
||||
$css = preg_replace_callback('/font-family:([^;}]+)([;}])/'
|
||||
,array($this, '_fontFamilyCB'), $css);
|
||||
|
||||
$css = preg_replace('/@import\\s+url/', '@import url', $css);
|
||||
|
||||
// replace any ws involving newlines with a single newline
|
||||
$css = preg_replace('/[ \\t]*\\n+\\s*/', "\n", $css);
|
||||
|
||||
// separate common descendent selectors w/ newlines (to limit line lengths)
|
||||
$css = preg_replace('/([\\w#\\.\\*]+)\\s+([\\w#\\.\\*]+){/', "$1\n$2{", $css);
|
||||
|
||||
// Use newline after 1st numeric value (to limit line lengths).
|
||||
$css = preg_replace('/
|
||||
((?:padding|margin|border|outline):\\d+(?:px|em)?) # 1 = prop : 1st numeric value
|
||||
\\s+
|
||||
/x'
|
||||
,"$1\n", $css);
|
||||
|
||||
// prevent triggering IE6 bug: http://www.crankygeek.com/ie6pebug/
|
||||
$css = preg_replace('/:first-l(etter|ine)\\{/', ':first-l$1 {', $css);
|
||||
|
||||
return trim($css);
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace what looks like a set of selectors
|
||||
*
|
||||
* @param array $m regex matches
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function _selectorsCB($m)
|
||||
{
|
||||
// remove ws around the combinators
|
||||
return preg_replace('/\\s*([,>+~])\\s*/', '$1', $m[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Process a comment and return a replacement
|
||||
*
|
||||
* @param array $m regex matches
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function _commentCB($m)
|
||||
{
|
||||
$hasSurroundingWs = (trim($m[0]) !== $m[1]);
|
||||
$m = $m[1];
|
||||
// $m is the comment content w/o the surrounding tokens,
|
||||
// but the return value will replace the entire comment.
|
||||
if ($m === 'keep') {
|
||||
return '/**/';
|
||||
}
|
||||
if ($m === '" "') {
|
||||
// component of http://tantek.com/CSS/Examples/midpass.html
|
||||
return '/*" "*/';
|
||||
}
|
||||
if (preg_match('@";\\}\\s*\\}/\\*\\s+@', $m)) {
|
||||
// component of http://tantek.com/CSS/Examples/midpass.html
|
||||
return '/*";}}/* */';
|
||||
}
|
||||
if ($this->_inHack) {
|
||||
// inversion: feeding only to one browser
|
||||
if (preg_match('@
|
||||
^/ # comment started like /*/
|
||||
\\s*
|
||||
(\\S[\\s\\S]+?) # has at least some non-ws content
|
||||
\\s*
|
||||
/\\* # ends like /*/ or /**/
|
||||
@x', $m, $n)) {
|
||||
// end hack mode after this comment, but preserve the hack and comment content
|
||||
$this->_inHack = false;
|
||||
|
||||
return "/*/{$n[1]}/**/";
|
||||
}
|
||||
}
|
||||
if (substr($m, -1) === '\\') { // comment ends like \*/
|
||||
// begin hack mode and preserve hack
|
||||
$this->_inHack = true;
|
||||
|
||||
return '/*\\*/';
|
||||
}
|
||||
if ($m !== '' && $m[0] === '/') { // comment looks like /*/ foo */
|
||||
// begin hack mode and preserve hack
|
||||
$this->_inHack = true;
|
||||
|
||||
return '/*/*/';
|
||||
}
|
||||
if ($this->_inHack) {
|
||||
// a regular comment ends hack mode but should be preserved
|
||||
$this->_inHack = false;
|
||||
|
||||
return '/**/';
|
||||
}
|
||||
// Issue 107: if there's any surrounding whitespace, it may be important, so
|
||||
// replace the comment with a single space
|
||||
return $hasSurroundingWs // remove all other comments
|
||||
? ' '
|
||||
: '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Process a font-family listing and return a replacement
|
||||
*
|
||||
* @param array $m regex matches
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function _fontFamilyCB($m)
|
||||
{
|
||||
// Issue 210: must not eliminate WS between words in unquoted families
|
||||
$pieces = preg_split('/(\'[^\']+\'|"[^"]+")/', $m[1], null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
|
||||
$out = 'font-family:';
|
||||
while (null !== ($piece = array_shift($pieces))) {
|
||||
if ($piece[0] !== '"' && $piece[0] !== "'") {
|
||||
$piece = preg_replace('/\\s+/', ' ', $piece);
|
||||
$piece = preg_replace('/\\s?,\\s?/', ',', $piece);
|
||||
}
|
||||
$out .= $piece;
|
||||
}
|
||||
|
||||
return $out . $m[2];
|
||||
}
|
||||
|
||||
}
|
47
libraries/Gelato/Minify/MinifyHTML.php
Normal file
47
libraries/Gelato/Minify/MinifyHTML.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Gelato Library
|
||||
*
|
||||
* This source file is part of the Gelato Library. More information,
|
||||
* documentation and tutorials can be found at http://gelato.monstra.org
|
||||
*
|
||||
* @package Gelato
|
||||
*
|
||||
* @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.
|
||||
*/
|
||||
|
||||
class MinifyHTML
|
||||
{
|
||||
/**
|
||||
* Minify html
|
||||
*
|
||||
* <code>
|
||||
* echo MinifyHTML::process($html);
|
||||
* </code>
|
||||
*
|
||||
* @param string $buffer html
|
||||
* @return string
|
||||
*/
|
||||
public static function process($html)
|
||||
{
|
||||
// Remove HTML comments (not containing IE conditional comments).
|
||||
$html = preg_replace_callback('/<!--([\\s\\S]*?)-->/', 'MinifyHTML::_comments', $html);
|
||||
|
||||
// Trim each line.
|
||||
$html = preg_replace('/^\\s+|\\s+$/m', '', $html);
|
||||
|
||||
// Return HTML
|
||||
return $html;
|
||||
}
|
||||
|
||||
protected static function _comments($m)
|
||||
{
|
||||
return (0 === strpos($m[1], '[') || false !== strpos($m[1], '<![')) ? $m[0] : '';
|
||||
}
|
||||
|
||||
}
|
50
libraries/Gelato/Minify/MinifyJS.php
Normal file
50
libraries/Gelato/Minify/MinifyJS.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Gelato Library
|
||||
*
|
||||
* This source file is part of the Gelato Library. More information,
|
||||
* documentation and tutorials can be found at http://gelato.monstra.org
|
||||
*
|
||||
* @package Gelato
|
||||
*
|
||||
* @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.
|
||||
*/
|
||||
|
||||
class MinifyJS
|
||||
{
|
||||
/**
|
||||
* Minify js
|
||||
*
|
||||
* <code>
|
||||
* echo MinifyJS::process($js);
|
||||
* </code>
|
||||
*
|
||||
* @param string $buffer html
|
||||
* @return string
|
||||
*/
|
||||
public static function process($js)
|
||||
{
|
||||
// newlines > linefeed
|
||||
$js = str_replace(array("\r\n", "\r", "\n"), "\n", $js);
|
||||
|
||||
// empty lines > collapse
|
||||
$js = preg_replace('/^[ \t]*|[ \t]*$/m', '', $js);
|
||||
$js = preg_replace('/\n+/m', "\n", $js);
|
||||
$js = trim($js);
|
||||
|
||||
// redundant whitespace > remove
|
||||
$js = preg_replace('/(?<=[{}\[\]\(\)=><&\|;:,\?!\+-])[ \t]*|[ \t]*(?=[{}\[\]\(\)=><&\|;:,\?!\+-])/i', '', $js);
|
||||
$js = preg_replace('/[ \t]+/', ' ', $js);
|
||||
|
||||
// redundant semicolons (followed by another semicolon or closing curly bracket) > remove
|
||||
$js = preg_replace('/;\s*(?=[;}])/s', '', $js);
|
||||
|
||||
// Return JS
|
||||
return $js;
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -4,6 +4,6 @@ Gelato is a PHP5 library for kickass Web Applications.
|
||||
|
||||
## Links
|
||||
- [Site](http://gelato.monstra.org)
|
||||
- [Github Repository](https://github.com/Monstra/gelato-library)
|
||||
- [Github Repository](https://github.com/MonstrLab/gelato)
|
||||
|
||||
Copyright (C) 2012-2013 Romanenko Sergey / Awilum [awilum@msn.com]
|
||||
Copyright (C) 2013 Romanenko Sergey / Awilum [awilum@msn.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.
|
||||
@@ -27,7 +27,7 @@ class Registry
|
||||
|
||||
/**
|
||||
* Checks if an object with this name is in the registry.
|
||||
*
|
||||
*
|
||||
* <code>
|
||||
* if (Registry::exists('var')) {
|
||||
* // Do something...
|
||||
@@ -44,7 +44,7 @@ class Registry
|
||||
|
||||
/**
|
||||
* Registers a given value under a given name.
|
||||
*
|
||||
*
|
||||
* <code>
|
||||
* Registry::set('var', 'value');
|
||||
* </code>
|
||||
@@ -69,7 +69,7 @@ class Registry
|
||||
|
||||
/**
|
||||
* Fetch an item from the registry.
|
||||
*
|
||||
*
|
||||
* <code>
|
||||
* $var = Registry::get('var', 'value');
|
||||
* </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.
|
||||
@@ -22,7 +22,7 @@ class Token
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $token_name = 'security_token';
|
||||
protected static $token_name = 'security_token';
|
||||
|
||||
/**
|
||||
* Protected constructor since this is a static class.
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
0
libraries/Gelato/_logs/.empty
Normal file
0
libraries/Gelato/_logs/.empty
Normal file
@@ -1,3 +1,21 @@
|
||||
Gelato 1.0.0, XXXX-XX-XX
|
||||
Gelato 1.0.3, 2013-04-03
|
||||
------------------------
|
||||
- Initial release
|
||||
- Html Class: obfuscate() method added.
|
||||
- Html Class: email() method added.
|
||||
- Html Class: missing $macros var added.
|
||||
|
||||
Gelato 1.0.2, 2013-03-17
|
||||
------------------------
|
||||
- Added support for PHP 5.2.3
|
||||
|
||||
Gelato 1.0.1, 2013-03-05
|
||||
------------------------
|
||||
- New constant GELATO_CLASS_LOADER instead of GELATO_AUTOLOADER
|
||||
- ErrorHanler Class Improvements.
|
||||
- Log Class Improvements.
|
||||
- ClassLoader: new method register() added.
|
||||
- Define __DIR__ constant for PHP 5.2.x
|
||||
|
||||
Gelato 1.0.0, 2013-02-26
|
||||
------------------------
|
||||
- Initial release
|
||||
|
File diff suppressed because it is too large
Load Diff
2946
libraries/PHPMailer/PHPMailer.php
Normal file
2946
libraries/PHPMailer/PHPMailer.php
Normal file
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>
|
||||
|
399
plugins/blog/blog.plugin.php
Normal file
399
plugins/blog/blog.plugin.php
Normal file
@@ -0,0 +1,399 @@
|
||||
<?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() {
|
||||
$current_page = Pages::$requested_page;
|
||||
$parent_page = '';
|
||||
if ($current_page !== 'error404') {
|
||||
$page = Pages::$pages->select('[slug="'.$current_page.'"]', null);
|
||||
if (trim($page['parent']) !== '') {
|
||||
$parent = true;
|
||||
$parent_page = Pages::$pages->select('[slug="'.$page['parent'].'"]', 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) {
|
||||
|
||||
// Init vars
|
||||
$tags = array();
|
||||
$tags_string = '';
|
||||
|
||||
if ($slug == null) {
|
||||
$posts = Pages::$pages->select('[parent="'.Blog::$parent_page_name.'" and status="published"]', 'all');
|
||||
} else {
|
||||
$posts = Pages::$pages->select('[parent="'.Blog::$parent_page_name.'" and status="published" and slug="'.$slug.'"]', '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) {
|
||||
|
||||
// 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 contains(tags, "'.Request::get('tag').'")]';
|
||||
Notification::set('tag', Request::get('tag'));
|
||||
} else {
|
||||
$query = '[parent="'.Blog::$parent_page_name.'" and status="published"]';
|
||||
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'), '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/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) {
|
||||
|
||||
// XPath Query
|
||||
$query = '[parent="'.Blog::$parent_page_name.'" and status="published"]';
|
||||
|
||||
// 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) {
|
||||
|
||||
$related_posts = array();
|
||||
$tags = Blog::getTagsArray(Page::slug());
|
||||
|
||||
foreach($tags as $tag) {
|
||||
|
||||
$query = '[parent="'.Blog::$parent_page_name.'" 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) {
|
||||
|
||||
$page = Pages::$pages->select('[slug="'.$slug.'"]', 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) {
|
||||
|
||||
$page = Pages::$pages->select('[slug="'.$slug.'"]', 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 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,8 @@
|
||||
return array(
|
||||
'backup' => array(
|
||||
'Backups' => 'Backups',
|
||||
'Backup date' => 'Backup Datum',
|
||||
'Create backup' => 'Erstelle Backup',
|
||||
'Backup' => 'Backup',
|
||||
'Create Backup' => 'Erstelle Backup',
|
||||
'Delete' => 'Löschen',
|
||||
'storage' => 'Speicher',
|
||||
'public' => 'Öffentliche',
|
||||
|
@@ -2,10 +2,12 @@
|
||||
|
||||
return array(
|
||||
'backup' => array(
|
||||
'Backups' => 'Backups',
|
||||
'Backup date' => 'Backup date',
|
||||
'Create backup' => 'Create backup',
|
||||
'Delete' => 'Delete',
|
||||
'Backups' => 'Backups',
|
||||
'Backup' => 'Backup',
|
||||
'Backup Date' => 'Backup Date',
|
||||
'Create Backup' => 'Create Backup',
|
||||
'Restore' => 'Restore',
|
||||
'Delete' => 'Delete',
|
||||
'storage' => 'storage',
|
||||
'public' => 'public',
|
||||
'plugins' => 'plugins',
|
||||
@@ -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/es.lang.php
Normal file
17
plugins/box/backup/languages/es.lang.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'backup' => array(
|
||||
'Backups' => 'Backup',
|
||||
'Backup date' => 'Backup dia',
|
||||
'Create Backup' => 'Crear Backup',
|
||||
'Delete' => 'Borrar',
|
||||
'storage' => 'Almacen',
|
||||
'public' => 'publico',
|
||||
'plugins' => 'plugins',
|
||||
'Size' => 'Tamaño',
|
||||
'Actions' => 'Acciones',
|
||||
'Delete backup: :backup' => 'Borrar Backup: :backup',
|
||||
'Creating...' => 'Creando...',
|
||||
)
|
||||
);
|
17
plugins/box/backup/languages/fa.lang.php
Normal file
17
plugins/box/backup/languages/fa.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/fr.lang.php
Normal file
17
plugins/box/backup/languages/fr.lang.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'backup' => array(
|
||||
'Backups' => 'Sauvegardes',
|
||||
'Backup date' => 'Date de la sauvegarde',
|
||||
'Create backup' => 'Créer une sauvegarde',
|
||||
'Delete' => 'Supprimer',
|
||||
'storage' => 'stockage',
|
||||
'public' => 'public',
|
||||
'plugins' => 'plugins',
|
||||
'Size' => 'Taille',
|
||||
'Actions' => 'Actions',
|
||||
'Delete backup: :backup' => 'Supprimer la sauvegarde: :backup',
|
||||
'Creating...' => 'Création...',
|
||||
)
|
||||
);
|
17
plugins/box/backup/languages/hu.lang.php
Normal file
17
plugins/box/backup/languages/hu.lang.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'backup' => array(
|
||||
'Backups' => 'Biztonsági mentések',
|
||||
'Backup date' => 'Biztonsági mentés dátuma',
|
||||
'Create Backup' => 'Biztonsági mentés készítése',
|
||||
'Delete' => 'Töröl',
|
||||
'storage' => 'tárol',
|
||||
'public' => 'nyilvános',
|
||||
'plugins' => 'pluginok',
|
||||
'Size' => 'Méret',
|
||||
'Actions' => 'Műveletek',
|
||||
'Delete backup: :backup' => 'Biztonsági mentés törlése: :backup',
|
||||
'Creating...' => 'Készítés...',
|
||||
)
|
||||
);
|
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...',
|
||||
)
|
||||
);
|
@@ -3,8 +3,8 @@
|
||||
return array(
|
||||
'backup' => array(
|
||||
'Backups' => 'Backup',
|
||||
'Backup date' => 'Backup',
|
||||
'Create backup' => 'Crea backup',
|
||||
'Backup' => 'Backup',
|
||||
'Create Backup' => 'Crea Backup',
|
||||
'Delete' => 'Elimina',
|
||||
'storage' => 'dati',
|
||||
'public' => 'pubblica',
|
||||
|
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...' => '作成中...',
|
||||
)
|
||||
);
|
@@ -3,8 +3,8 @@
|
||||
return array(
|
||||
'backup' => array(
|
||||
'Backups' => 'Atsarginės kopijos',
|
||||
'Backup date' => 'Atsarginės kopijos data',
|
||||
'Create backup' => 'Sukurti atsarginę kopiją',
|
||||
'Backup' => 'Atsarginės kopijos data',
|
||||
'Create Backup' => 'Sukurti atsarginę kopiją',
|
||||
'Delete' => 'Ištrinti',
|
||||
'storage' => 'storage',
|
||||
'public' => 'public',
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user