1
0
mirror of https://github.com/monstra-cms/monstra.git synced 2025-08-04 12:17:42 +02:00

818 Commits

Author SHA1 Message Date
Awilum
4dd2361e5f Merge branch 'dev' 2016-01-29 12:18:11 +03:00
Awilum
7e30f636b6 Monstra 3.0.3 2016-01-29 12:17:14 +03:00
Awilum
d768db494e Merge remote-tracking branch 'origin/dev' into dev 2016-01-29 00:58:04 +03:00
Awilum
685722cc8e license updates 2016-01-29 00:46:11 +03:00
Awilum
db7792e538 changelog updates 2016-01-29 00:44:06 +03:00
Sergey Romanenko
ec8bdf04bf Merge pull request #388 from clk824/dev
Fix 404 when using certain server configurations
2016-01-29 00:35:40 +03:00
Sergey Romanenko
26d68cc593 Merge pull request #372 from neoartdoo/patch-19
Create ka-ge.lang.php
2016-01-29 00:30:47 +03:00
Awilum
9c148e44d1 Update Admin Footer Info 2016-01-29 00:26:27 +03:00
Awilum
eb17b827d7 Update Admin Footer Info 2016-01-29 00:25:15 +03:00
Awilum
fab79a357d Readme fixes 2016-01-28 23:33:06 +03:00
Awilum
099fe32d88 Install Script Fixes 2016-01-28 23:30:20 +03:00
Awilum
6cc44a146e SR locale flag fix 2016-01-28 23:25:47 +03:00
Awilum
81b65c761b Use Parsedown Parser #370 2016-01-28 22:59:46 +03:00
Awilum
bc36876eac Merge branch 'master' into dev 2016-01-27 18:48:28 +03:00
Sergey Romanenko
4908967f67 Merge pull request #389 from DmitriyMX/dev
fix: error php syntax
2016-01-27 18:43:56 +03:00
Sergey Romanenko
46378701aa Merge pull request #395 from Freddynic159/master
Spanish translation update (fixed)
2016-01-27 18:43:30 +03:00
Sergey Romanenko
543f42ec1e Merge pull request #396 from neoartdoo/master
Minor Changes Serbian Language
2016-01-27 18:42:15 +03:00
Marjan Panić
eec5c01382 Update sr.lang.php 2016-01-27 16:10:13 +01:00
Marjan Panić
be4816a892 Language 2016-01-27 16:06:08 +01:00
Freddy Morán Jr
154d98b167 Update es.lang.php 2016-01-26 07:24:34 -06:00
Freddy Morán Jr
b6b0b43970 Update es.lang.php 2016-01-26 07:23:52 -06:00
Freddy Morán Jr
fd02accbd4 Update es.lang.php 2016-01-26 07:22:50 -06:00
Freddy Morán Jr
d1c096600a Update es.lang.php 2016-01-26 07:22:09 -06:00
Freddy Morán Jr
abd6bc6840 Update es.lang.php 2016-01-26 07:20:36 -06:00
Freddy Morán Jr
b18e724718 Update es.lang.php 2016-01-26 07:20:01 -06:00
Freddy Morán Jr
4081393325 Update es.lang.php 2016-01-26 07:19:21 -06:00
Freddy Morán Jr
a6cdab21a3 Update es.lang.php 2016-01-26 07:18:42 -06:00
Freddy Morán Jr
c9f0ec112f Update es.lang.php 2016-01-26 07:18:07 -06:00
Freddy Morán Jr
75ddf1292d Update es.lang.php 2016-01-26 07:17:24 -06:00
Freddy Morán Jr
f3d4ed57cf Update es.lang.php 2016-01-26 07:16:12 -06:00
Freddy Morán Jr
2e2a1480a2 Update es.lang.php 2016-01-26 07:15:32 -06:00
Freddy Morán Jr
73bd190942 Update es.lang.php 2016-01-26 07:15:01 -06:00
Sergey Romanenko
4ffadb84d3 Merge pull request #393 from Freddynic159/master
Spanish translation update
2016-01-22 20:24:41 +03:00
Freddy Morán Jr
5ed420208a Update es.lang.php 2016-01-22 09:24:51 -06:00
Freddy Morán Jr
1b980e4bde Update es.lang.php 2016-01-22 09:17:07 -06:00
Freddy Morán Jr
c899720f14 Update es.lang.php 2016-01-22 09:12:36 -06:00
Freddy Morán Jr
8edd205dec Update es.lang.php 2016-01-22 08:45:17 -06:00
Freddy Morán Jr
e303f9f6aa Update es.lang.php 2016-01-22 08:44:30 -06:00
Freddy Morán Jr
1de85168f0 Update es.lang.php 2016-01-22 08:41:36 -06:00
Freddy Morán Jr
fc721f55cb Update es.lang.php 2016-01-22 08:23:05 -06:00
Freddy Morán Jr
4a3a38bed3 Update es.lang.php 2016-01-22 08:19:26 -06:00
Freddy Morán Jr
5d7b28f801 Update es.lang.php 2016-01-22 08:17:31 -06:00
Freddy Morán Jr
fdcb24a3f3 Update es.lang.php 2016-01-22 08:12:09 -06:00
Freddy Morán Jr
b2a509bc7a Update es.lang.php 2016-01-22 08:09:52 -06:00
Freddy Morán Jr
13f55afdee Update es.lang.php 2016-01-22 07:59:08 -06:00
Freddy Morán Jr
7389d1f1c3 Update es.lang.php 2016-01-22 07:57:13 -06:00
Freddy Morán Jr
13eea5b730 Update es.lang.php 2016-01-22 07:54:18 -06:00
Freddy Morán Jr
6fce509e81 Update es.lang.php 2016-01-22 07:51:25 -06:00
Freddy Morán Jr
b0e2e32c71 Update es.lang.php 2016-01-22 07:49:12 -06:00
Sergey Romanenko
87b1cb2f96 Merge pull request #390 from mapadesign/patch-21
Update      'ka-ge' => 'Georgian',
2016-01-09 20:48:14 +03:00
mapadesign
28210a93db Update 'ka-ge' => 'Georgian',
'ka-ge' => 'Georgian', Change from      'ka-ge' => 'Georgian'
2016-01-07 21:11:54 +01:00
DmitriyMX
52ac023813 fix: error php syntax 2016-01-07 16:19:13 +03:00
Freddy Morán Jr
5630bed2ef Update es.lang.php 2015-12-07 16:23:06 -06:00
Freddy Morán Jr
13577c21b8 Update es.lang.php 2015-12-07 16:15:54 -06:00
Freddy Morán Jr
c67454940d Update es.lang.php 2015-12-07 16:13:03 -06:00
Freddy Morán Jr
f646cf11a5 Update es.lang.php 2015-12-07 16:03:27 -06:00
Freddy Morán Jr
2a18939513 Update es.lang.php 2015-12-07 16:02:01 -06:00
Freddy Morán Jr
b7f7b10403 Update es.lang.php 2015-12-07 15:53:53 -06:00
Freddy Morán Jr
51ee940202 Update es.lang.php 2015-12-07 15:51:52 -06:00
Freddy Morán Jr
48765f9ff2 Update es.lang.php 2015-12-07 15:37:48 -06:00
Freddy Morán Jr
f1230d43d2 Update es.lang.php 2015-12-07 15:34:48 -06:00
Freddy Morán Jr
4ebf5ce2eb Update es.lang.php 2015-12-07 15:31:36 -06:00
Sergei Kuznetcov
30a78d2f67 Fix 404 when using certain server configurations 2015-11-27 15:55:26 +05:00
Sergey Romanenko
fb90f35cf3 Merge pull request #387 from mapadesign/patch-4
Create ka-ge.lang.php
2015-11-10 22:50:00 +03:00
Sergey Romanenko
59c214ec55 Merge pull request #386 from mapadesign/patch-5
Create ka-ge.lang.php
2015-11-10 22:49:53 +03:00
Sergey Romanenko
f777989af7 Merge pull request #385 from mapadesign/patch-6
Create ka-ge.lang.php
2015-11-10 22:49:41 +03:00
Sergey Romanenko
09371c02f5 Merge pull request #384 from mapadesign/patch-7
Create ka-ge.lang.php
2015-11-10 22:49:30 +03:00
Sergey Romanenko
872cdc1a25 Merge pull request #383 from mapadesign/patch-8
Create ka-ge.lang.php
2015-11-10 22:49:16 +03:00
Sergey Romanenko
ef10651f74 Merge pull request #382 from mapadesign/patch-9
Create ka-ge.lang.php
2015-11-10 22:49:02 +03:00
Sergey Romanenko
fceebb4a1d Merge pull request #381 from mapadesign/patch-10
Create ka-ge.lang.php
2015-11-10 22:48:48 +03:00
Sergey Romanenko
d68cd28279 Merge pull request #380 from mapadesign/patch-11
Create ka-ge.lang.php
2015-11-10 22:48:35 +03:00
Sergey Romanenko
dd8905982a Merge pull request #379 from mapadesign/patch-12
Create ka-ge.lang.php
2015-11-10 22:48:21 +03:00
Sergey Romanenko
acd03a3ead Merge pull request #378 from mapadesign/patch-13
Create ka-ge.lang.php
2015-11-10 22:47:35 +03:00
Sergey Romanenko
89ee4506e6 Merge pull request #377 from mapadesign/patch-14
Create ka-ge.lang.php
2015-11-10 22:47:20 +03:00
Sergey Romanenko
01ea53730e Merge pull request #376 from mapadesign/patch-15
Create ka-ge.lang.php
2015-11-10 22:46:43 +03:00
Sergey Romanenko
bb14b17a41 Merge pull request #375 from mapadesign/patch-16
Create ka-ge.lang.php
2015-11-10 22:45:33 +03:00
Sergey Romanenko
54b8bc5e36 Merge pull request #374 from mapadesign/patch-17
Create ka-ge.lang.php
2015-11-10 22:45:07 +03:00
Sergey Romanenko
4b24e337d4 Merge pull request #373 from mapadesign/patch-18
Create ka-ge.lang.php
2015-11-10 22:44:58 +03:00
Sergey Romanenko
eb6e6aa6be Merge pull request #371 from mapadesign/patch-20
Update I18n.php
2015-11-10 22:44:24 +03:00
mapadesign
c0619cd13d Update I18n.php 2015-11-10 20:29:39 +01:00
mapadesign
50b678081e Create ka-ge.lang.php 2015-11-10 20:26:14 +01:00
mapadesign
b526ee2d4d Create ka-ge.lang.php 2015-11-10 20:24:53 +01:00
mapadesign
613593d7bd Create ka-ge.lang.php 2015-11-10 20:24:12 +01:00
mapadesign
46fabc0dee Create ka-ge.lang.php 2015-11-10 20:23:36 +01:00
mapadesign
343cefd114 Create ka-ge.lang.php 2015-11-10 20:22:52 +01:00
mapadesign
51c1582e36 Create ka-ge.lang.php 2015-11-10 20:22:10 +01:00
mapadesign
e0755de9b2 Create ka-ge.lang.php 2015-11-10 20:21:18 +01:00
mapadesign
3c5e54fea0 Create ka-ge.lang.php 2015-11-10 20:20:22 +01:00
mapadesign
dec8c18b1b Create ka-ge.lang.php 2015-11-10 20:19:47 +01:00
mapadesign
fba8dce45e Create ka-ge.lang.php 2015-11-10 20:18:56 +01:00
mapadesign
3994d1e2a7 Create ka-ge.lang.php 2015-11-10 20:18:01 +01:00
mapadesign
c87ea5029c Create ka-ge.lang.php 2015-11-10 20:17:14 +01:00
mapadesign
0eadda37b3 Create ka-ge.lang.php 2015-11-10 20:16:32 +01:00
mapadesign
3117d5e448 Create ka-ge.lang.php 2015-11-10 20:15:20 +01:00
mapadesign
e635422730 Create ka-ge.lang.php 2015-11-10 20:13:45 +01:00
mapadesign
24c6d342c6 Create ka-ge.lang.php 2015-11-10 20:11:42 +01:00
Awilum
797d9e0f18 Minimum PHP version for Monstra is 5.3.2 2015-11-07 01:44:19 +03:00
Awilum
e5241f6a5f Improve Monstra Security #369 2015-11-07 01:41:57 +03:00
Awilum
5b41adfd28 Use Parsedown Parser #370 2015-11-07 01:41:19 +03:00
Awilum
4b57135324 Merge branch 'dev' 2015-10-16 18:35:04 +03:00
Awilum
1aa2664046 Monstra 3.0.2 2015-10-16 18:34:33 +03:00
Awilum
13e1dd1e63 Monstra General Updates 2015-10-16 18:28:14 +03:00
Awilum
1854cfe80e Monstra General Updates 2015-10-16 18:09:58 +03:00
Awilum
43297d2006 Merge branch 'master' into dev 2015-10-16 17:38:53 +03:00
Sergey Romanenko
90c27f3595 Update README.md 2015-10-16 17:35:41 +03:00
Sergey Romanenko
e6277af3d0 Update README.md 2015-10-16 17:35:32 +03:00
Sergey Romanenko
7ba93ba374 Update README.md 2015-10-16 17:33:35 +03:00
Sergey Romanenko
4ed77e4db0 Merge pull request #362 from mapadesign/master
new Serbian Languages
2015-09-22 01:04:23 +03:00
Sergey Romanenko
8477d7350f Merge pull request #352 from liyiwu/patch-1
Update I18n.php
2015-09-22 01:01:28 +03:00
mapadesign
9e3e49a3f1 Update I18n.php
'sr-yu' => 'Serbian',  to 'sr' => 'Srpski',
2015-03-09 03:08:55 +01:00
mapadesign
8803b22705 Update sr.lang.php
minor linguistic changes
2015-02-27 11:33:08 +01:00
mapadesign
08974eb996 Update and rename sr-yu.lang.php to sr.lang.php
minor linguistic changes
2015-02-27 11:31:55 +01:00
mapadesign
e63e4eb5ce Rename sr-yu.lang.php to sr.lang.php 2015-02-27 11:30:30 +01:00
mapadesign
547f414c32 Update and rename sr-yu.lang.php to sr.lang.php
minor linguistic changes
2015-02-27 11:29:39 +01:00
mapadesign
f188413070 Rename sr-yu.lang.php to sr.lang.php 2015-02-27 11:25:15 +01:00
mapadesign
295c90b69c Update and rename sr-yu.lang.php to sr.lang.php 2015-02-27 11:24:24 +01:00
mapadesign
d1bed0529a Update and rename sr-yu.lang.php to sr.lang.php 2015-02-27 11:20:59 +01:00
mapadesign
cee7e89ae0 Update and rename sr-yu.lang.php to sr.lang.php 2015-02-27 10:46:41 +01:00
mapadesign
5986dc65c8 Update and rename sr-yu.lang.php to sr.lang.php 2015-02-27 10:45:50 +01:00
mapadesign
62e0417fb8 Update and rename sr-yu.lang.php to sr.lang.php
Languages phrases
2015-02-27 10:44:56 +01:00
mapadesign
19481f7e45 Update and rename sr-yu.lang.php to sr.lang.php 2015-02-27 10:43:22 +01:00
mapadesign
1ad40e50e6 Update and rename sr-yu.lang.php to sr.lang.php 2015-02-27 10:42:33 +01:00
mapadesign
d3f6e90d68 Update and rename sr-yu.lang.php to sr.lang.php
New language phrases translated.
2015-02-27 10:39:00 +01:00
mapadesign
4579bb6a1a New lang sr.lang.php 2015-02-27 10:32:53 +01:00
mapadesign
9e5d66b234 Rename sr-yu.lang.php to sr.lang.php 2015-02-27 10:29:21 +01:00
mapadesign
b4721b7d07 Update sr.lang.php 2015-02-27 10:28:42 +01:00
mapadesign
83fcd1b2fd Update and rename plugins/box/dashboard/languages to plugins/box/dashboard/languages/sr.lang.php 2015-02-27 10:28:12 +01:00
mapadesign
3ecf293ebe Update and rename sr-yu.lang.php to sr.lang.php 2015-02-27 10:26:08 +01:00
mapadesign
886e674de1 Update and rename sr-yu.lang.php to sr.lang.php 2015-02-27 10:24:43 +01:00
mapadesign
b0f9c22a9b Update sr.lang.php 2015-02-27 10:23:26 +01:00
mapadesign
78545161e4 Update and rename plugins/blog/languages to plugins/blog/languages/sr.lang.php
Prevod na srpskom, MOSTRA
2015-02-27 10:22:35 +01:00
greentea
2db404be89 Update I18n.php 2014-12-23 02:13:40 +08:00
Sergey Romanenko
7cf4bdbd3c Merge pull request #345 from Freddynic159/master
Spanish Translation Pack
2014-10-07 00:40:24 +04:00
Freddy Morán Jr.
4dc1766304 Update es.lang.php
Fixed some translation issues.
2014-09-17 17:21:54 -06:00
Freddy Morán Jr.
b92781cadf Update es.lang.php
Fixed some translation issues.
2014-09-17 08:23:16 -06:00
Freddy Morán Jr.
4aa51394df Update es.lang.php
Fixed some translation issues.
2014-09-17 08:21:55 -06:00
Freddy Morán Jr.
f02ecafc5b Update es.lang.php
Fixed some translation issues.
2014-09-17 08:18:39 -06:00
Freddy Morán Jr.
fd98f964f3 Update es.lang.php
Fixed some translation issues.
2014-09-17 08:17:30 -06:00
Freddy Morán Jr.
e71a2ef911 Update es.lang.php
Fixed some translation issues.
2014-09-16 18:31:01 -06:00
Freddy Morán Jr.
3ac26fda2a Update es.lang.php
Fixed some translation issues.
2014-09-16 18:29:50 -06:00
Freddy Morán Jr.
ffa4a7dd46 Update es.lang.php
Fixed some translation issues.
2014-09-16 18:26:18 -06:00
Freddy Morán Jr.
79c7562550 Update es.lang.php
Fixed some translation issues.
2014-09-16 18:22:58 -06:00
Freddy Morán Jr.
bced6667a7 Update es.lang.php
Fixed some translation issues.
2014-09-16 18:18:50 -06:00
Freddy Morán Jr.
e13048fdaf Update es.lang.php
Fixed some translation issues.
2014-09-16 18:09:00 -06:00
Freddy Morán Jr.
0190e9c67e Update es.lang.php
Fixed some translation issues.
2014-09-16 17:58:51 -06:00
Freddy Morán Jr.
40ebc20287 Update es.lang.php
Fixed some translation issues.
2014-09-16 10:02:10 -06:00
Freddy Morán Jr.
1f595a46ad Update es.lang.php
Fixed some translation issues.
2014-09-16 10:00:55 -06:00
Freddy Morán Jr.
20d247d40a Update es.lang.php
Fixed some translation issues.
2014-09-16 09:59:57 -06:00
Freddy Morán Jr.
ce4b3fba74 Update es.lang.php
Fixed some translation issues.
2014-09-16 09:59:07 -06:00
Freddy Morán Jr.
c0f73d2dd3 Update es.lang.php
Fixed some translation issues.
2014-09-16 09:57:22 -06:00
Freddy Morán Jr.
ddd8eebd05 Update es.lang.php
Fixed some translation issues.
2014-09-16 09:56:15 -06:00
Freddy Morán Jr.
cbdb29d4a7 Update es.lang.php
Fixed some translation issues.
2014-09-16 09:55:12 -06:00
Freddy Morán Jr.
6be613bce5 Update es.lang.php
Fixed some translation issues.
2014-09-16 09:54:11 -06:00
Freddy Morán Jr.
7475b8b13d Update es.lang.php
Fixed some translation issues.
2014-09-16 09:52:52 -06:00
Freddy Morán Jr.
268237e0c2 Create es.lang.php 2014-09-16 09:50:34 -06:00
Freddy Morán Jr.
c2a56a08c4 Create es.lang.php 2014-09-16 09:48:45 -06:00
Freddy Morán Jr.
6814818615 Update es.lang.php
Fixed some translation issues.
2014-09-16 09:47:32 -06:00
Freddy Morán Jr.
837eef3495 Update es.lang.php
Fixed some translation issues.
2014-09-16 09:46:09 -06:00
Awilum
36a69bd6c5 Merge branch 'dev' 2014-08-10 21:34:18 +04:00
Awilum
5f1746d62e Monstra 3.0.1 2014-08-10 21:04:32 +04:00
Awilum
9c48c41e55 Update plugins url #340 2014-08-10 16:07:59 +04:00
Awilum
a088fd9772 Themes Plugin: js and css counter does not recalculate #336 2014-08-10 16:06:06 +04:00
Awilum
d6221b3f50 Themes Plugin: Imposible to create new CSS #335 2014-08-09 00:18:49 +04:00
Awilum
a39d78d725 Themes Plugin: Imposible to create new CSS #335 2014-08-09 00:14:06 +04:00
Awilum
dfffa3d984 Error in Monstra Notifications #339 2014-08-08 23:52:43 +04:00
Awilum
79f42c2f01 Minimum php is 5.3 #333 2014-08-08 23:31:01 +04:00
Sergey Romanenko
5acdcbd32b Merge pull request #332 from ravilrrr/patch-2
языкозависимая ссылка на форум
2014-08-04 12:48:55 +04:00
ravilrrr
57f798e2cb языкозависимая ссылка на форум 2014-08-04 12:25:27 +04:00
Awilum
b60ffab09f Merge branch 'master' into dev 2014-08-02 00:25:43 +04:00
Sergey Romanenko
01a9112966 Update sk.lang.php 2014-08-01 18:44:36 +04:00
Awilum
2dd6faceed Merge branch 'dev' 2014-08-01 18:06:25 +04:00
Awilum
ac8ba8a6dc Monstra 3.0.0 2014-08-01 18:03:17 +04:00
Sergey Romanenko
19e0e36eec Markdown plugin filter disabled for site content by default 2014-08-01 09:19:46 +04:00
Sergey Romanenko
009e32e635 Blog Plugin - Pager Issue #326 2014-07-31 14:25:53 +04:00
Sergey Romanenko
7ff4ff29d9 Blog Plugin: fix for notice 2014-07-31 14:22:56 +04:00
Sergey Romanenko
31b103d9d3 Update default.css 2014-07-27 23:13:48 +04:00
Awilum
6b7f1fce17 MinifyCSS line 114 commented for now 2014-07-26 23:08:24 +04:00
Awilum
a4af90a72e Fix Users Frontend Registration 2014-07-26 14:45:05 +04:00
Awilum
eaccc1056d Repository Fix 2014-07-26 14:33:40 +04:00
Awilum
728f6509a6 Missing Translates added 2014-07-26 14:32:07 +04:00
Awilum
169803c85a FilesManager: fix translates 2014-07-26 12:25:28 +04:00
Awilum
3fddfa8d06 Layoyt Fixes 2014-07-26 12:21:07 +04:00
Awilum
5d696d9a47 Fix for Frontend User Reset Password page 2014-07-26 11:58:11 +04:00
Awilum
1c43b78d71 Fix for Frontend User Auth page 2014-07-26 11:52:07 +04:00
Awilum
d58e1c2f92 Monstra 3.0.0 will be! 2014-07-26 01:20:03 +04:00
Awilum
ab471b9555 UI Defect: Filesmanager Index View looks broken on iPhone #321 #320 2014-07-26 01:16:13 +04:00
Awilum
9f5516233d UI Defect: Pages Index View looks broken for portrait view on iPhone #319 2014-07-26 01:07:59 +04:00
Awilum
f8fa3f966b UI Defect: Plugins View looks broken for on iPhone #322 2014-07-26 01:05:56 +04:00
Awilum
7c548aa5b4 UI Defect: Backups View looks broken for portrait view on iPhone #323 2014-07-26 01:02:36 +04:00
Awilum
3592d3342a UI Defect: Information View looks broken for portrait view on iPhone #324 2014-07-26 00:59:02 +04:00
Awilum
4743f4e6e1 UI Defect: Navigation looks broken for portrait view on IPAD #318 2014-07-21 23:52:03 +04:00
Sergey Romanenko
55324b20a0 Update CHANGELOG.md 2014-07-21 23:02:01 +04:00
Sergey Romanenko
c11ee609bc Merge pull request #315 from ravilrrr/patch-6
FIX breadcrumbs only pages
2014-06-22 11:32:26 +04:00
Sergey Romanenko
43655828c9 Update layout.email.php 2014-06-19 13:31:23 +04:00
Sergey Romanenko
19afcbd9e8 Update layout.email.php 2014-06-19 11:53:22 +04:00
Sergey Romanenko
2643a33820 Merge pull request #317 from ravilrrr/patch-1
add robots
2014-06-18 22:26:23 +04:00
ravilrrr
4fb4de67d4 add robots
добавил список роботов для России и не только
2014-06-18 16:45:50 +04:00
Sergey Romanenko
b9d3292899 Merge pull request #316 from ravilrrr/dev
Ссылка на русскоязычный форум при русском языке в настройках.
2014-06-18 00:55:55 +04:00
ravilrrr
3470c28c03 Ссылка на русскоязычный форум при русском языке в настройках. 2014-06-18 00:02:11 +04:00
ravilrrr
3e7f381fc0 Update pages.plugin.php 2014-06-17 15:19:39 +04:00
Sergey Romanenko
392d8c253f Merge pull request #314 from ravilrrr/patch-4
Update registration.view.php vs Captcha
2014-06-16 21:53:28 +04:00
ravilrrr
c7133368d1 Update registration.view.php
Если не включена каптча, то кнопка Регистрация смещается т.к остается тег div
2014-06-15 19:11:31 +04:00
Sergey Romanenko
c5534d26ad Update codemirror.plugin.php 2014-06-05 14:30:04 +04:00
Sergey Romanenko
17569174aa Pages Shortcode issue #308 2014-06-04 09:56:33 +04:00
Sergey Romanenko
90057e13d0 Merge pull request #308 from ravilrrr/patch-1
Update pages.plugin.php
2014-06-04 09:53:06 +04:00
Sergey Romanenko
5abc71089e Merge pull request #310 from ravilrrr/patch-2
Update Html.php
2014-06-03 06:59:31 +04:00
ravilrrr
a078ba2ad1 Update Html.php 2014-05-31 18:19:07 +00:00
ravilrrr
5bbb9a7871 Update pages.plugin.php 2014-05-30 17:30:33 +03:00
Sergey Romanenko
ad5d92bbff Merge pull request #307 from archi-mobile/patch-5
Update login.template.php
2014-05-28 14:41:36 +03:00
archi-mobile
00f4c551a1 Update login.template.php 2014-05-28 01:35:47 -07:00
Sergey Romanenko
1d2c4cd068 Merge pull request #303 from archi-mobile/patch-1
Update header.chunk.php
2014-05-28 10:56:33 +03:00
Sergey Romanenko
0414e887e1 Merge pull request #300 from ravilrrr/dev
Fix plugin Codemirror
2014-05-28 10:54:28 +03:00
Sergey Romanenko
49347e80b6 Merge pull request #305 from archi-mobile/patch-3
Update index.view.php
2014-05-28 10:50:27 +03:00
Sergey Romanenko
1bb101edef Merge pull request #304 from archi-mobile/patch-2
Update ru.lang.php
2014-05-28 10:49:51 +03:00
archi-mobile
918f0470e0 Update index.view.php 2014-05-28 00:46:42 -07:00
archi-mobile
aaae5c723f Update ru.lang.php 2014-05-28 00:42:50 -07:00
archi-mobile
ed9490042d Update header.chunk.php 2014-05-28 00:36:42 -07:00
Sergey Romanenko
1ef144ba21 Merge pull request #299 from Kibele/dev
Update tr.lang.php files in plugins
2014-05-28 07:45:05 +03:00
ravilrrr
970ce69cfa Update codemirror.plugin.php 2014-05-27 19:39:14 +03:00
ravilrrr
33eedc9481 1.Изменил тему по умолчанию на более удобную/красивую
2.FIX Добавил правильную подсветку html и php в сниппетах и темах
3.Добавил подсветку в CSS файлах
4.Скорректировал шрифт
2014-05-27 19:24:21 +03:00
Ali Galip Çamlı
5bf01e01ca Update tr.lang.php in box/dashboard plugin
Merhaba...
2014-05-24 18:17:17 +03:00
Ali Galip Çamlı
8c66bac570 Update tr.lang.php in box/filesmanager plugin
'Maximum upload file size: :upload_max_filesize'
2014-05-24 18:14:06 +03:00
Ali Galip Çamlı
cd6cd24ed2 Update en.lang.php in box/filesmanager plugin
'Maximum upload file size: :upload_max_filesize'
2014-05-24 18:13:06 +03:00
Ali Galip Çamlı
d293b649b8 Update tr.lang.php in box/filesmanager plugin
'Drop File Here' is missed.
2014-05-24 18:11:13 +03:00
Ali Galip Çamlı
a27564c317 Update en.lang.php in box/filesmanager plugin
'Drop File Here' is missed.
2014-05-24 18:10:18 +03:00
Ali Galip Çamlı
c713cf40d2 Update tr.lang.php in box/filesmanager plugin
'Directory:' and 'File:' are missed.
2014-05-24 18:08:19 +03:00
Ali Galip Çamlı
abdde2411a Update en.lang.php in box/filesmanager plugin
'File:' and 'Directory:' are missed.
2014-05-24 18:07:18 +03:00
Ali Galip Çamlı
d9ee6c89d9 Update tr.lang.php in box/filesmanager plugin
'Rename' is missed.
2014-05-24 18:05:04 +03:00
Ali Galip Çamlı
f871958e51 Update en.lang.php in box/filesmanager plugin
'Rename' is missed.
2014-05-24 18:04:20 +03:00
Ali Galip Çamlı
552c84c7b2 Update tr.lang.php in box/filesmanager plugin
Some missed entries...
2014-05-24 18:02:11 +03:00
Ali Galip Çamlı
b9408b3522 Update en.lang.php in box/filesmanager plugin
Some missed entries...
2014-05-24 17:59:25 +03:00
Ali Galip Çamlı
c4895264de Update tr.lang.php in box/filesmanager plugin
'Select file' is missed.
2014-05-24 17:46:11 +03:00
Ali Galip Çamlı
3834f931d9 Update tr.lang.php in box/themes plugin
'Site Theme' is missed.
2014-05-24 17:44:06 +03:00
Ali Galip Çamlı
dba81f723e Update tr.lang.php in box/themes plugin
'Cancel' is missed.
2014-05-24 17:42:01 +03:00
Ali Galip Çamlı
c2e00b3f81 Update en.lang.php in box/themes plugin
'Cancel' is missed.
2014-05-24 17:41:18 +03:00
Ali Galip Çamlı
7a89ba8a9b Update tr.lang.php in box/backup plugin
Some missed entries...
2014-05-24 17:37:27 +03:00
Ali Galip Çamlı
45f6c4952e Update en.lang.php in box/backup plugin
Some missed entries...
2014-05-24 17:34:28 +03:00
Ali Galip Çamlı
b758b6e503 Update tr.lang.php in box/backup plugin
'Restore' is missed.
2014-05-24 17:30:14 +03:00
Ali Galip Çamlı
2b3bbd247b Update en.lang.php in box/backup plugin
'Restore' is missed.
2014-05-24 17:28:59 +03:00
Ali Galip Çamlı
3c79bc2a45 Update tr.lang.php in box/filesmanager plugin
"Cancel" and "Create" are missed.
2014-05-24 13:09:24 +03:00
Ali Galip Çamlı
29d11febfd Update tr.lang.php in box/filesmanager plugin
"Directory Name" is missed.
2014-05-24 13:06:37 +03:00
Ali Galip Çamlı
33d8024866 Update tr.lang.php in box/menu plugin
'Cancel' is missed.
2014-05-24 13:03:41 +03:00
Ali Galip Çamlı
9e92cc5372 Update tr.lang.php in box/snippets plugin
'Cancel' is missed.
2014-05-24 13:01:56 +03:00
Ali Galip Çamlı
cc3ca4476f Update tr.lang.php in box/pages plugin
Minor changes...
2014-05-24 13:00:22 +03:00
Ali Galip Çamlı
7dc755db99 Update tr.lang.php in box/pages plugin
'Name (slug)' => 'Ad (makine adı)', // check whether in use or not
'Slug (url)' is missed.
2014-05-24 12:58:38 +03:00
Ali Galip Çamlı
bacfb156f4 Update en.lang.php in box/pages plugin
'Name (slug)' => 'Name (slug)', // check whether in use or not
'Slug (url)' is missed
2014-05-24 12:56:46 +03:00
Ali Galip Çamlı
d469da3b2d Update tr.lang.php in box/pages plugin
'Cancel' is missed.
2014-05-24 12:53:18 +03:00
Ali Galip Çamlı
de90f501b6 Update en.lang.php in box/pages plugin
'Tags' is missed.
2014-05-24 12:51:39 +03:00
Ali Galip Çamlı
11ec340a15 Update tr.lang.php in box/pages plugin
'Tags' is missed.
2014-05-24 12:50:23 +03:00
Ali Galip Çamlı
5c8b3a2da1 Update tr.lang.php in box/information plugin 2014-05-24 12:46:19 +03:00
Ali Galip Çamlı
4eaa1165b0 Update tr.lang.php in box/blocks plugin 2014-05-24 12:36:53 +03:00
Ali Galip Çamlı
0285dabee3 Update edit.view.php in box/emails plugin
The word here is in no more blocks plugin, it is in emails plugin now.
2014-05-24 12:36:00 +03:00
Ali Galip Çamlı
a8000d167d Update tr.lang.php in box/backup plugin 2014-05-24 12:31:28 +03:00
Ali Galip Çamlı
2a35099a83 Update en.lang.php in box/backup plugin
'Backup' is missed.
2014-05-24 12:30:42 +03:00
Ali Galip Çamlı
fcf349d0a1 Update tr.lang.php in box/users plugin 2014-05-24 12:27:56 +03:00
Ali Galip Çamlı
44f1fd2e0a Update en.lang.php in box/users plugin 2014-05-24 12:22:49 +03:00
Ali Galip Çamlı
acb88579c8 Update tr.lang.php in box/users plugin
'Register New user' does not match 'Register New User'. "u" in "user" should be capitalized.
2014-05-24 12:21:54 +03:00
Ali Galip Çamlı
e18c4912b5 Update tr.lang.php in box/filesmanager plugin
"Create New Directory" entry...
2014-05-24 11:39:17 +03:00
Ali Galip Çamlı
b7ce4670ec Update tr.lang.php in box/system plugin
"Aç" instead of "Açık". It should be a verb as in "Open Maintenance Mode" for saying "Maintenance Mode On".
2014-05-24 11:25:45 +03:00
Ali Galip Çamlı
ff18aba1b5 Create tr.lang.php in sandbox plugin 2014-05-24 11:00:40 +03:00
Ali Galip Çamlı
bf7e12b16d Create tr.lang.php in captcha plugin 2014-05-24 10:58:30 +03:00
Ali Galip Çamlı
418f89f64d Create tr.lang.php in blog plugin 2014-05-24 10:56:45 +03:00
Ali Galip Çamlı
b1455d63af Update tr.lang.php in box/information plugin 2014-05-24 10:52:14 +03:00
Ali Galip Çamlı
7089970cf6 Update tr.lang.php in box/menu plugin 2014-05-24 10:11:02 +03:00
Ali Galip Çamlı
91dec98620 Update tr.lang.php in box/pages plugin 2014-05-24 10:07:39 +03:00
Ali Galip Çamlı
6d682b3d7f Update tr.lang.php box/plugins plugin 2014-05-24 10:02:05 +03:00
Ali Galip Çamlı
91d769a1c4 Create tr.lang.php in box/sitemap plugin 2014-05-24 09:59:40 +03:00
Ali Galip Çamlı
3a58e39f5c Update tr.lang.php in box/snippets plugin 2014-05-24 09:57:22 +03:00
Ali Galip Çamlı
fc685e0514 Update tr.lang.php in box/themes plugin 2014-05-23 12:53:58 +03:00
Ali Galip Çamlı
f15766ee86 Update tr.lang.php in box/users plugin 2014-05-23 12:44:12 +03:00
Ali Galip Çamlı
e78cce729b Update tr.lang.php in box/filemanager plugin 2014-05-23 10:25:06 +03:00
Ali Galip Çamlı
fc0a4cf3b3 Create tr.lang.php in box/emails plugin 2014-05-23 10:23:19 +03:00
Ali Galip Çamlı
8a905b9481 Create tr.lang.php in box/editor plugin 2014-05-23 10:17:14 +03:00
Ali Galip Çamlı
fb5e278073 Create tr.lang.php in box/dashboard plugin 2014-05-23 10:14:05 +03:00
Ali Galip Çamlı
dc6a689013 Update tr.lang.php in box/blocks plugin 2014-05-23 10:10:54 +03:00
Ali Galip Çamlı
b91e746c09 Update tr.lang.php in box/backup plugin 2014-05-23 10:05:31 +03:00
Ali Galip Çamlı
6be93036ae Update tr.lang.php in system (box) plugin 2014-05-22 18:33:59 +03:00
Awilum
ac1a4b4a6c Translation Updates 2014-05-21 23:54:16 +04:00
Awilum
cbacd6db91 Translation Updates 2014-05-21 23:46:19 +04:00
Awilum
f5566ef2b4 Translation Updates 2014-05-21 23:43:37 +04:00
Awilum
a2596a13a8 Translation Updates 2014-05-21 23:43:36 +04:00
Sergey Romanenko
054cb8ec65 Merge pull request #298 from DmitriyMX/dev-fix295
#295 Backup plugin: fix notification
2014-05-17 08:29:48 +03:00
DmitriyMX
99a22cf36e #295 Backup plugin: fix notification 2014-05-17 01:05:32 +04:00
Awilum
daf306bcb3 #64 Admin Responsive - Next Round 2014-05-16 16:33:43 +04:00
Sergey Romanenko
b386055643 Merge pull request #297 from DmitriyMX/dev-fix296
Fixed #296
2014-05-14 08:04:46 +03:00
DmitriyMX
d7510e699e Fix #296 2014-05-13 22:46:06 +04:00
Awilum
b9fb53820e Translation Updates 2014-05-12 23:31:18 +04:00
Awilum
b6be58ba07 Monstra 2.4.0 Release Candidate 2014-05-11 23:27:07 +04:00
Awilum
947ebb4a3d #64 Admin Responsive - Next Round 2014-05-10 22:12:06 +04:00
Awilum
e816be56a4 #64 Admin Responsive - Next Round 2014-05-09 00:33:43 +04:00
Awilum
531e81b2ac #64 Admin Responsive - Next Round 2014-05-08 23:35:38 +04:00
Awilum
7357d1c26a #64 Admin Responsive - Next Round 2014-05-08 23:30:00 +04:00
Awilum
fd3a16d72f #64 Admin Responsive - Next Round 2014-05-08 23:20:14 +04:00
Awilum
b697274f86 #64 Admin Responsive - Next Round 2014-05-08 22:54:13 +04:00
Awilum
a01ef33951 #64 Admin Responsive - Next Round 2014-05-08 22:53:27 +04:00
Awilum
a17ee5f09c #64 Admin Responsive - Next Round 2014-05-08 22:52:08 +04:00
Awilum
635eb98c4e #64 Admin Responsive - Next Round 2014-05-08 22:46:14 +04:00
Awilum
ea574a1d40 #64 Admin Responsive - Next Round 2014-05-02 23:30:55 +04:00
Awilum
a115a51fd9 Users Plugin: fixes 2014-05-02 21:32:57 +04:00
Sergey Romanenko
23360d4c42 Merge pull request #294 from DmitriyMX/dev-translate
Plugins: fix translate
2014-04-30 14:03:30 +03:00
DmitriyMX
58bedf57e7 Plugins: fix translate 2014-04-30 10:48:46 +04:00
Awilum
b52ff6abb7 Admin: login page fixes 2014-04-28 23:46:52 +04:00
Awilum
745c06df7f Gelato: Minify CSS try to fix bug 2014-04-28 11:50:50 +04:00
Awilum
a62a1e7ef5 Fix Translates 2014-04-28 11:47:52 +04:00
Awilum
9741538fb2 Pages Plugins fixes 2014-04-27 14:07:31 +04:00
Awilum
48b7be3ecc Fix Translates 2014-04-27 14:00:20 +04:00
Awilum
fe4caf0802 Sandbox Plugin: small fixes 2014-04-27 09:21:18 +04:00
Awilum
30f5a5969f Blog Plugin as a part of Monstra CMS - Layout Updates #188 2014-04-27 08:26:43 +04:00
Awilum
47af0a0d4b Menu Manager: js is broken #293 2014-04-13 22:21:23 +04:00
Awilum
b39381990a Monstra 2.4.0 beta 2014-04-13 13:49:00 +04:00
Awilum
1a335cfaad google analytics hide for now 2014-04-13 10:58:41 +04:00
Awilum
ab647fdce5 google analytics hide for now 2014-04-13 10:57:24 +04:00
Awilum
a3c75d72fb UI Improvements - Default Theme - Updates #194 2014-04-13 10:41:48 +04:00
Awilum
c60cd592c4 UI Improvements - Default Theme - Updates #194 2014-04-13 10:36:36 +04:00
Awilum
a36b72f32f Email Templates Plugin - Updates #2 2014-04-11 09:36:42 +04:00
Awilum
4803e3285e UI Improvements - Admin Default Theme - Updates #194 2014-04-03 00:21:49 +04:00
Awilum
312d79c2c9 UI Improvements - Admin Default Theme - Updates #194 2014-04-03 00:20:59 +04:00
Sergey Romanenko
5bea8e2b72 Update CHANGELOG.md 2014-04-01 13:32:35 +03:00
Oleg Gatseluk
b5a9b3f49a Merge branch 'dev' of https://github.com/Awilum/monstra-cms into dev 2014-03-31 09:36:49 +03:00
Oleg Gatseluk
a9c720659d Uploading new plugins via the admin panel #215 2014-03-31 09:36:43 +03:00
Awilum
ae587082ac Turkish Language 2014-03-30 00:03:51 +04:00
Awilum
ee168a2aa0 Files Manager: File Info Popup #232 2014-03-30 00:03:51 +04:00
Awilum
144a3e7cc3 Plugins. README.MD #167 2014-03-30 00:03:50 +04:00
Sergey Romanenko
295e2cb873 Update CHANGELOG.md 2014-03-29 21:39:54 +02:00
Awilum
f2b9975eca Pages - Meta Title #165 2014-03-29 00:20:09 +04:00
Awilum
12d4be693b DB Update 2014-03-29 00:12:25 +04:00
Awilum
616e3a3608 Update CHANGELOG.md 2014-03-28 23:53:56 +04:00
Awilum
34cade84cf Turkish Language 2014-03-27 23:50:38 +04:00
Awilum
a898a84739 Turkish Language 2014-03-27 23:50:38 +04:00
Awilum
6a7c3a3462 Turkish Language 2014-03-27 23:50:37 +04:00
Awilum
eb5f918f5d Monstra automatically rename files Issue #231 2014-03-27 23:50:37 +04:00
Oleg Gatseluk
6c68b1023c merge 2014-03-25 17:37:52 +02:00
Oleg Gatseluk
9cdf1a3d71 Files Manager: File Info Popup #232 2014-03-25 17:29:21 +02:00
metal_gvc
cec57dc108 Sitemap Errors - ERROR 2 #175 2014-03-18 21:31:46 +02:00
Awilum
bd3df9598a Monstra Dashboard #204 2014-03-16 01:42:20 +04:00
Awilum
798c121e51 Chinese Language 2014-03-16 01:33:15 +04:00
Awilum
4f2fb1a319 Plugins Table Updates 2014-03-16 01:29:37 +04:00
Awilum
79e8c94468 General Updates 2014-03-16 01:28:47 +04:00
Awilum
de4b0eff15 Monstra Dashboard #204 2014-03-16 01:27:17 +04:00
Awilum
0fa5c3c91d Themes component of Box plugin not updated to support the new UI #203 2014-03-15 22:24:21 +04:00
Awilum
ab69a6128b Themes component of Box plugin not updated to support the new UI #203 2014-03-15 22:23:14 +04:00
Awilum
9981219800 Pages - Meta Title #165 2014-03-15 12:49:28 +04:00
Awilum
cd2b94c7cc Pages - Meta Title - DB update #165 2014-03-15 11:51:55 +04:00
Awilum
926b99b2fa Pages - Meta Title #165 2014-03-15 11:49:48 +04:00
Awilum
eeffcca348 Blog Plugin as a part of Monstra CMS #188 2014-03-15 01:13:20 +04:00
Awilum
1f3ed549d5 Chinese Language 2014-03-15 01:09:59 +04:00
Awilum
fea6350416 Chinese Language 2014-03-14 20:10:36 +04:00
Awilum
01cef7e8e9 Chinese Language 2014-03-14 20:09:22 +04:00
Awilum
efb026013e Chinese Language 2014-03-14 20:09:09 +04:00
Sergey Romanenko
56562942cd Merge pull request #236 from bernte/patch-3
Update header.chunk.php
2014-03-01 15:01:51 +02:00
Sergey Romanenko
8b63ae4c39 Merge pull request #286 from bernte/patch-52
Update index.view.php
2014-03-01 15:00:14 +02:00
Sergey Romanenko
a98ae9bbc2 Merge pull request #251 from bernte/patch-16
Update de.lang.php
2014-03-01 14:59:16 +02:00
Sergey Romanenko
431337e138 Merge pull request #249 from bernte/patch-14
Update de.lang.php
2014-03-01 14:58:24 +02:00
Sergey Romanenko
7a9aa577dd Merge pull request #248 from bernte/patch-13
Update de.lang.php
2014-03-01 14:56:30 +02:00
Sergey Romanenko
9ea7b09e15 Merge pull request #247 from bernte/patch-12
Update de.lang.php
2014-03-01 14:56:18 +02:00
Sergey Romanenko
c3a1a33c73 Merge pull request #246 from bernte/patch-11
Update de.lang.php
2014-03-01 14:55:00 +02:00
Sergey Romanenko
44e3f5f31c Merge pull request #245 from bernte/patch-10
Update de.lang.php
2014-03-01 14:54:47 +02:00
Sergey Romanenko
4e2f2b6528 Merge pull request #271 from bernte/patch-37
Update es.lang.php
2014-03-01 14:52:05 +02:00
Sergey Romanenko
9594f0d48b Merge pull request #272 from bernte/patch-38
Update fa.lang.php
2014-03-01 14:51:42 +02:00
Sergey Romanenko
8ea46eac2c Merge pull request #273 from bernte/patch-39
Update fr.lang.php
2014-03-01 14:51:28 +02:00
Sergey Romanenko
961f03a7a4 Merge pull request #274 from bernte/patch-40
Update hu.lang.php
2014-03-01 14:50:41 +02:00
Sergey Romanenko
a23885d619 Merge pull request #275 from bernte/patch-41
Update id.lang.php
2014-03-01 14:50:21 +02:00
Sergey Romanenko
71d0244a01 Merge pull request #277 from bernte/patch-43
Update ja.lang.php
2014-03-01 14:49:39 +02:00
Sergey Romanenko
90f8020d92 Merge pull request #276 from bernte/patch-42
Update it.lang.php
2014-03-01 14:49:09 +02:00
Sergey Romanenko
369eb76f09 Merge pull request #278 from bernte/patch-44
Update lt.lang.php
2014-03-01 14:48:58 +02:00
Sergey Romanenko
5e1a5f9150 Merge pull request #279 from bernte/patch-45
Update nl.lang.php
2014-03-01 14:48:44 +02:00
Sergey Romanenko
e4ed4a3e00 Merge pull request #280 from bernte/patch-46
Update pl.lang.php
2014-03-01 14:47:51 +02:00
Sergey Romanenko
8c20dd5155 Merge pull request #281 from bernte/patch-47
Update pt-br.lang.php
2014-03-01 14:47:35 +02:00
Sergey Romanenko
80ea7dbc3a Merge pull request #282 from bernte/patch-48
Update ru.lang.php
2014-03-01 14:47:22 +02:00
Sergey Romanenko
5f79f19542 Merge pull request #283 from bernte/patch-49
Update sk.lang.php
2014-03-01 14:46:53 +02:00
Sergey Romanenko
3624af6371 Merge pull request #284 from bernte/patch-50
Update sr-yu.lang.php
2014-03-01 14:21:35 +02:00
Sergey Romanenko
11eaf2702a Merge pull request #285 from bernte/patch-51
Update uk.lang.php
2014-03-01 14:20:40 +02:00
Sergey Romanenko
69b23097e1 Merge pull request #287 from bernte/patch-53
Update en.lang.php
2014-03-01 14:20:23 +02:00
Sergey Romanenko
66b331c8a6 Merge pull request #288 from bernte/patch-54
Update pl.lang.php
2014-03-01 14:19:59 +02:00
Sergey Romanenko
faad94b51f Merge pull request #240 from bernte/patch-5
Update de.lang.php
2014-03-01 14:19:14 +02:00
Sergey Romanenko
92afccf4f8 Merge pull request #241 from bernte/patch-7
Create de.lang.php
2014-03-01 14:18:57 +02:00
Sergey Romanenko
9d48963513 Merge pull request #289 from bernte/patch-55
Update ru.lang.php
2014-03-01 14:17:54 +02:00
Sergey Romanenko
43925eaf54 Merge pull request #253 from bernte/patch-18
Update en.lang.php
2014-03-01 14:01:57 +02:00
Sergey Romanenko
80fcdb20f9 Merge pull request #290 from bernte/patch-56
Update uk.lang.php
2014-03-01 14:01:41 +02:00
Sergey Romanenko
b71b0a422a Merge pull request #291 from bernte/patch-57
Create de.lang.php
2014-03-01 13:51:56 +02:00
bernte
2e51c5ecf9 Update de.lang.php 2014-03-01 11:56:57 +01:00
bernte
253cb63630 Update de.lang.php 2014-03-01 11:52:01 +01:00
bernte
2070d0ab32 Create de.lang.php 2014-03-01 11:36:40 +01:00
bernte
f84ce335c7 Update uk.lang.php 2014-03-01 11:34:34 +01:00
bernte
507142df0a Update ru.lang.php 2014-03-01 11:34:05 +01:00
bernte
fa7fdfce56 Update pl.lang.php 2014-03-01 11:33:35 +01:00
bernte
c462909f0d Update en.lang.php 2014-03-01 11:32:33 +01:00
bernte
de3ad26ece Update index.view.php
changed it to new language file!
2014-03-01 01:28:47 +01:00
bernte
84d1fffc71 Update uk.lang.php 2014-03-01 01:26:52 +01:00
bernte
6b55dd36e5 Update sr-yu.lang.php 2014-03-01 01:26:37 +01:00
bernte
d046e53ef9 Update sk.lang.php 2014-03-01 01:26:22 +01:00
bernte
2031d25253 Update ru.lang.php 2014-03-01 01:26:05 +01:00
bernte
57544b6740 Update pt-br.lang.php 2014-03-01 01:25:52 +01:00
bernte
c5b8ad8c3d Update pl.lang.php 2014-03-01 01:25:36 +01:00
bernte
059ad82591 Update nl.lang.php 2014-03-01 01:25:23 +01:00
bernte
febd1e7e71 Update lt.lang.php 2014-03-01 01:25:10 +01:00
bernte
616c8a18af Update ja.lang.php 2014-03-01 01:24:50 +01:00
bernte
e442d4debd Update it.lang.php 2014-03-01 01:24:34 +01:00
bernte
5a876fddb1 Update id.lang.php 2014-03-01 01:24:14 +01:00
bernte
6658500691 Update hu.lang.php 2014-03-01 01:24:01 +01:00
bernte
4756be2309 Update fr.lang.php 2014-03-01 01:23:43 +01:00
bernte
16dbbcdb16 Update fa.lang.php 2014-03-01 01:23:03 +01:00
bernte
5c1ea1f819 Update es.lang.php 2014-03-01 01:22:24 +01:00
bernte
b2ca81e9d6 Update en.lang.php 2014-02-28 23:51:55 +01:00
bernte
dfb4c01ffd Update de.lang.php 2014-02-28 23:11:35 +01:00
bernte
45cb0e69d8 Update de.lang.php 2014-02-28 22:58:57 +01:00
bernte
ca43003293 Update de.lang.php 2014-02-28 22:56:07 +01:00
bernte
4bddfae60f Update de.lang.php 2014-02-28 22:45:26 +01:00
bernte
314996be6b Update de.lang.php 2014-02-28 22:42:03 +01:00
bernte
32472a1a0e Update de.lang.php 2014-02-28 22:37:39 +01:00
bernte
ec6e4bba27 Create de.lang.php 2014-02-28 22:12:24 +01:00
bernte
438a81af8f Update de.lang.php 2014-02-28 22:06:05 +01:00
bernte
e51ed4c587 Update header.chunk.php
validation: removed ul
2014-02-28 19:44:02 +01:00
Sergey Romanenko
a8c163a535 Merge pull request #234 from mwidz/dev
Updated language files and adding translations.
2014-02-27 00:06:50 +02:00
Mirosław Widz
0102715cf3 Adding translation of the word 'Continue' in the file install.php and the related update language files 'en' and 'pl'. 2014-02-26 22:23:26 +01:00
Mirosław Widz
d68a4c5e28 Updated and added 'pl' language files
--HG--
rename : plugins/blog/languages/en.lang.php => plugins/blog/languages/pl.lang.php
rename : plugins/box/dashboard/languages/en.lang.php => plugins/box/dashboard/languages/pl.lang.php
rename : plugins/box/emails/languages/en.lang.php => plugins/box/emails/languages/pl.lang.php
2014-02-26 21:35:58 +01:00
Oleg Gatseluk
9c54a443d9 Uploading new plugins via the admin panel - active tab 'Install New' after plugin uploading #215 2014-02-26 17:43:04 +02:00
Oleg Gatseluk
2178b7d406 Uploading new plugins via the admin panel - active tab 'Install New' after plugin uploading #215 2014-02-26 17:22:13 +02:00
Oleg Gatseluk
34d4482911 Unzip Functionality - hide on Windows #229 2014-02-20 17:02:49 +02:00
Awilum
a0719eac94 UI Improvements - Admin Default Theme - Updates #194 2014-02-18 23:02:59 +02:00
Awilum
32e2890b37 UI Improvements - Admin Default Theme - Updates #194 2014-02-18 23:02:26 +02:00
Awilum
e449381555 UI Improvements - Admin Default Theme - Updates #194 2014-02-18 00:45:31 +02:00
Awilum
ac3c4e6ac8 Update CHANGELOG.md 2014-02-18 00:00:18 +02:00
Awilum
06981a768e UI Improvements - Default Theme - Updates #194 2014-02-17 23:54:50 +02:00
Awilum
e5af6b060a UI Improvements - Default Theme - Updates #194 2014-02-17 23:54:23 +02:00
Awilum
f0899e9358 Ink Framework #192 2014-02-17 21:58:31 +02:00
Awilum
e3bc818348 Ink Framework #192 2014-02-17 21:48:40 +02:00
Awilum
b32452a815 UI Improvements - Admin Default Theme - Updates #194 2014-02-17 20:44:20 +02:00
Awilum
a242cd8804 Pages Plugin: add tags field #4 2014-02-17 20:42:38 +02:00
Awilum
9fc9843639 Translation string missing in Themes plugin #137 2014-02-17 19:24:33 +02:00
Awilum
190bbe05b1 MarkItUp Color Pallete #141 2014-02-17 19:22:27 +02:00
Awilum
b0c19f7c81 Pages Plugins Select - get 'template' field 2014-02-17 19:09:04 +02:00
Awilum
cae9c77d0a Installer Flags Order #105 2014-02-17 18:50:50 +02:00
Sergey Romanenko
8b58e1536f Update CHANGELOG.md 2014-02-17 15:04:04 +02:00
Awilum
3339ad0ce5 Update datarangepicker to 1.3.2 2014-02-16 01:01:08 +02:00
Awilum
c003072a5d Update CHANGELOG.md 2014-02-16 00:51:28 +02:00
Awilum
710f86ffc6 Update jQuery to 2.1.0 2014-02-16 00:50:33 +02:00
Awilum
c1a20a5f6e Update Twitter Bootstrap to 3.1.1 2014-02-16 00:42:43 +02:00
Awilum
207a13904d Update CHANGELOG.md 2014-02-16 00:39:30 +02:00
Awilum
5942c29fe9 Plugins. README.MD #167 2014-02-16 00:22:48 +02:00
Awilum
2a3d9720d1 Monstra automatically rename files Issue #231 2014-02-15 22:56:10 +02:00
Awilum
163914b579 Monstra automatically rename files Issue #231 2014-02-15 22:55:51 +02:00
Awilum
41076ede4a UI Improvements - Admin Default Theme - Updates #194 2014-02-15 14:27:42 +02:00
Awilum
44451af610 UI Improvements - Admin Default Theme - Updates #194 2014-02-15 14:27:29 +02:00
Awilum
e3d0da1047 UI Improvements - Admin Default Theme - Updates #194 2014-02-14 21:35:56 +02:00
Awilum
e436317d7e UI Improvements - Admin Default Theme - Updates #194 2014-02-14 21:35:24 +02:00
Awilum
3b7288cbdb UI Improvements - Admin Default Theme - Updates #194 2014-02-14 19:54:19 +02:00
Awilum
9896ea7c31 UI Improvements - Default Theme - Updates #194 2014-02-14 19:41:20 +02:00
Awilum
5e2984e448 UI Improvements - Plugins Views without Headers #194 2014-02-14 19:41:19 +02:00
Awilum
82a516d431 UI Improvements - Default Theme - Updates #194 2014-02-14 19:41:19 +02:00
metal_gvc
f7bc03ef91 Merge branch 'dev' of https://github.com/Awilum/monstra-cms into dev 2014-02-14 17:21:28 +02:00
metal_gvc
7ca3946f8a Uploading new plugins via the admin panel - fileuploader refactoring: drag&drop uploader multiple instances support #215 2014-02-14 17:21:18 +02:00
Sergey Romanenko
80582f2c9f Update default.css 2014-02-14 10:24:16 +02:00
Awilum
3e4bd66e16 UI Improvements - Default Theme - Updates #194 2014-02-14 01:19:42 +02:00
Awilum
3bd33ab305 Restore Site from Backup - Updates #228 2014-02-13 23:52:40 +02:00
Awilum
608c987e6d Uploading new plugins via the admin panel #215 2014-02-13 23:29:14 +02:00
Awilum
582f49418e UI Improvements - Admin Default Theme - Updates #194 2014-02-13 23:12:19 +02:00
Awilum
1b77c928f4 UI Improvements - Admin Default Theme - Updates #194 2014-02-13 23:03:48 +02:00
Awilum
f2d0bd2745 UI Improvements - Default Theme - Updates #194 2014-02-13 22:28:20 +02:00
metal_gvc
1085953b3b Restore Site from Backup - Remove checkboxes #228 2014-02-13 21:31:05 +02:00
metal_gvc
8ac3b92248 Restore Site from Backup - backup all except plugins/box #228 2014-02-13 21:22:37 +02:00
Awilum
37ec41199d Blog Plugin as a part of Monstra CMS #188 2014-02-12 23:56:40 +02:00
Awilum
9ea4477bd8 Blog Plugin as a part of Monstra CMS #188 2014-02-12 23:53:31 +02:00
Awilum
81ffb867be Gelato: ErroHandler styles updates 2014-02-12 23:53:31 +02:00
Awilum
eea5606985 Gelato: ErroHandler styles updates 2014-02-12 23:53:30 +02:00
metal_gvc
c01e03e139 Restore Site from Backup - tmp directory fix #228 2014-02-12 21:35:04 +02:00
metal_gvc
071595fd61 Merge branch 'dev' of https://github.com/Awilum/monstra-cms into dev 2014-02-12 21:29:53 +02:00
metal_gvc
847af54c11 Restore Site from Backup - tmp directory fix #228 2014-02-12 21:13:35 +02:00
Awilum
308483f167 Admin Default Theme Updates 2014-02-12 00:55:54 +02:00
Awilum
1a5d05bfaa Plugins. README.MD #167 2014-02-12 00:33:08 +02:00
Awilum
e17bc2454d Plugins. README.MD #167 2014-02-12 00:32:53 +02:00
Awilum
e662a9937b Plugins. README.MD #167 2014-02-12 00:08:13 +02:00
Awilum
d8a9c746b4 Plugins. README.MD #167 2014-02-11 23:16:41 +02:00
Awilum
0a08b4131d Plugins. README.MD #167 2014-02-11 23:15:34 +02:00
Awilum
ba78201812 Update CHANGELOG.md 2014-02-11 23:14:59 +02:00
Awilum
36bb23db5b Plugins. README.MD #167 2014-02-11 23:12:28 +02:00
Awilum
6713282196 Blog Plugin as a part of Monstra CMS #188 2014-02-11 23:11:28 +02:00
Awilum
bcf3d58c14 Update CHANGELOG.md 2014-02-11 22:27:13 +02:00
Awilum
3f7e3e5b98 Markdown Plugin #230 2014-02-11 22:17:14 +02:00
Awilum
baefbef8ab Plugins. README.MD #167 2014-02-09 21:50:47 +02:00
Awilum
f5ff259344 UI Improvements - Admin Theme Updates #194 2014-02-09 21:50:46 +02:00
metal_gvc
8380ec5b7d Restore Site from Backup #228 2014-02-09 21:48:07 +02:00
metal_gvc
44c274cf8c Merge branch 'dev' of https://github.com/Awilum/monstra-cms into dev 2014-02-09 21:10:51 +02:00
metal_gvc
bcac217db3 Uploading new plugins via the admin panel #215 2014-02-09 21:09:40 +02:00
Awilum
a1c7aa1d46 Plugins. README.MD #167 2014-02-08 14:09:41 +02:00
Awilum
594d6fd51d Monstra Dashboard #204 2014-02-08 14:09:40 +02:00
metal_gvc
9a6329a6cd Merge branch 'dev' of https://github.com/Awilum/monstra-cms into dev 2014-02-08 13:27:19 +02:00
metal_gvc
1350491545 Unzip Functionality #229 2014-02-08 13:25:58 +02:00
Awilum
61317e99fe UI Improvements - Installer - updates #194 2014-02-01 20:57:38 +02:00
Awilum
46c2d5e93d UI Improvements - Admin - updates #194 2014-02-01 18:08:56 +02:00
Awilum
35029b1e24 New Flags Added 2014-02-01 17:43:03 +02:00
Awilum
8a107d190c UI Improvements - Admin - updates #194 2014-02-01 17:03:57 +02:00
Awilum
ff26fc105c UI Improvements - Admin - updates #194 2014-02-01 17:03:39 +02:00
Awilum
2e19f5c1a7 Files Manager Improvements - fixes #94 2014-02-01 14:47:08 +02:00
Awilum
0bbf9544da UI Improvements - Admin - Login page updates #194 2014-02-01 13:09:13 +02:00
Awilum
27cf070816 Update Changelog 2014-02-01 01:07:45 +02:00
Awilum
66eb4fd120 Idiorm Updated to 1.4.1 2014-02-01 01:07:27 +02:00
Awilum
3aad8db409 Update Changelog 2014-02-01 01:01:35 +02:00
Awilum
6d703b1286 Update Twitter Bootstrap to 3.1.0 2014-02-01 01:00:50 +02:00
Awilum
948bf57a1c Box Plugins: .htaccess added 2014-01-31 21:54:43 +02:00
Awilum
ef63bda6da DB Updates 2014-01-31 21:48:34 +02:00
Awilum
87135d00ae Email Templates Plugin - Updates #2 2014-01-31 21:28:33 +02:00
Awilum
350dd8ed8b Email Templates Plugin - Updates #2 2014-01-31 21:27:27 +02:00
Awilum
b8ebd53272 CodeMirror Plugin as a part of Monstra CMS #187 2014-01-31 21:23:34 +02:00
Awilum
358c7fdefe Update users.plugin.php 2014-01-31 20:42:47 +02:00
Awilum
062460895d Email Templates Plugin - Updates #2 2014-01-31 20:24:46 +02:00
Awilum
7113f09937 Restore Site from Backup #228 2014-01-31 20:24:07 +02:00
Awilum
918820da3e UI Improvements - Admin - Login page updates #194 2014-01-31 20:18:20 +02:00
Awilum
8f0e576f99 Files Manager Improvements - Bootstrap: fileinput.js v3.0.0-p7 #94 2014-01-31 19:02:44 +02:00
Awilum
eecf2e85a4 Files Manager Improvements - Bootstrap: fileinput.js v3.0.0-p7 #94 2014-01-31 19:02:44 +02:00
metal_gvc
933c1df4f6 Monstra Dashboard - GA - hide settings link on GA settings page #204 2014-01-29 21:31:51 +02:00
Awilum
28ec930671 Files Manager Improvements - Maximum upload file size message - added #94 2014-01-29 20:56:39 +02:00
Awilum
e74111fb7d Gelato: Number Class new method convertToBytes() added. 2014-01-29 20:56:39 +02:00
Awilum
551ce3be6b Gelato: Number Class new method convertToBytes() added. 2014-01-29 20:56:39 +02:00
Sergey Romanenko
ceb19b2e83 Update CHANGELOG.md 2014-01-29 15:36:33 +02:00
Sergey Romanenko
38efadd6bf Update CHANGELOG.md 2014-01-29 15:35:17 +02:00
Sergey Romanenko
97dc6a8f69 Plugin API - Filters - Closure support added. 2014-01-29 15:34:58 +02:00
Sergey Romanenko
1e3689204e Update CHANGELOG.md 2014-01-29 15:33:12 +02:00
Sergey Romanenko
fee8dc34e9 Update CHANGELOG.md 2014-01-29 15:30:53 +02:00
Sergey Romanenko
a5dbfaee85 Update install.php 2014-01-29 11:44:35 +02:00
Sergey Romanenko
e72dcc3a94 Merge pull request #227 from Awilum/master
Merge with master branch
2014-01-29 01:14:49 -08:00
Awilum
106c7b2c56 Files Manager Improvements - Updates #94 2014-01-29 00:13:48 +02:00
Awilum
6749608a17 Monstra Dashboard - Updates #204 2014-01-29 00:05:29 +02:00
Awilum
4b381efb10 Files Manager Improvements - Updates #94 2014-01-29 00:05:29 +02:00
metal_gvc
8d16632454 Prefetch DNS to reduce look up times #202 2014-01-28 20:12:16 +02:00
Awilum
67bf91a872 Files Manager Improvements - fixes #94 2014-01-25 13:17:28 +02:00
Awilum
482e865358 Files Manager Improvements - fixes #94 2014-01-25 11:12:01 +02:00
metal_gvc
fb906708b9 Merge branch 'dev' of https://github.com/Awilum/monstra-cms into dev 2014-01-25 00:24:26 +02:00
metal_gvc
76c71c8174 Monstra Dashboard - GA update #204 2014-01-25 00:24:02 +02:00
Awilum
6d20d97c86 Chocolat Fixes 2014-01-24 23:15:51 +02:00
metal_gvc
2ba945313f Files Manager Improvements - Ability to rename Files & Directories #94 2014-01-24 22:56:13 +02:00
Sergey Romanenko
52192f9dea Update style.css 2014-01-24 12:15:00 +02:00
Sergey Romanenko
054aa46635 Update I18n.php 2014-01-23 11:15:52 +02:00
Sergey Romanenko
cff06f5564 Merge pull request #223 from ANISSA90/master
language
2014-01-23 01:10:41 -08:00
Sergey Romanenko
14dfc59b9e Merge pull request #226 from gracix/master
Create japanese language files
2014-01-23 01:08:40 -08:00
metal_gvc
03045d03ae Files Manager Improvements - Drug'n'Drop uploader - error handler updates #94 2014-01-23 00:27:33 +02:00
Takefumi Ota
5d8a4abcb9 Add Japanese language files. 2014-01-22 10:59:38 +09:00
Takefumi Ota
3ad2cf7a56 Create Japanese language file 2014-01-22 09:56:23 +09:00
Sergey Romanenko
474fddd803 Email Templates Plugin - Updates #2 2014-01-21 15:06:57 +02:00
Sergey Romanenko
a1942f55dc Update codemirror.plugin.php 2014-01-21 15:05:55 +02:00
Sergey Romanenko
38e6961a91 Email Templates Plugin - Updates #2 2014-01-21 15:05:31 +02:00
Sergey Romanenko
73d78f0585 Email Templates Plugin - Updates #2 2014-01-21 15:04:58 +02:00
Sergey Romanenko
bd84514fce Email Templates Plugin - Updates #2 2014-01-21 15:04:08 +02:00
Sergey Romanenko
9d66c5ca32 Update users.plugin.php 2014-01-21 14:40:09 +02:00
Sergey Romanenko
54660eb5c1 Rename reset_password.email.php to reset-password.email.php 2014-01-21 14:39:12 +02:00
Sergey Romanenko
ea3f059a41 Rename new_user.email.php to new-user.email.php 2014-01-21 14:39:02 +02:00
Sergey Romanenko
1e2fe718c1 Rename new_password.email.php to new-password.email.php 2014-01-21 14:38:51 +02:00
Sergey Romanenko
aaba7cef27 Email Templates Plugin - Updates #2 2014-01-21 14:37:32 +02:00
Sergey Romanenko
2afaba814b Email Templates Plugin - Updates #2 2014-01-21 14:36:52 +02:00
Sergey Romanenko
2a465bab1b Email Templates Plugin - Updates #2 2014-01-21 14:36:01 +02:00
Sergey Romanenko
fff6890205 Update LICENSE.md 2014-01-21 13:38:18 +02:00
Sergey Romanenko
9a5f0a99ba Update LICENSE.md 2014-01-21 13:37:26 +02:00
Sergey Romanenko
2c4d1c36f9 Rename license.txt to LICENSE.md 2014-01-21 13:34:54 +02:00
Sergey Romanenko
7b397ddfaa Rename changelog.txt to CHANGELOG.md 2014-01-21 13:33:33 +02:00
Sergey Romanenko
0cecc2e9a6 Users Plugin - Email Templates - Updates #2 2014-01-21 13:01:04 +02:00
Awilum
a8b2725721 Email Templates Plugin - Email Templates - Updates #2 2014-01-21 00:11:12 +02:00
Awilum
274e9a1849 Files Manager Improvements - Drop Files section fixes #94 2014-01-20 22:14:07 +02:00
Awilum
a76207ae96 Files Manager Improvements - Drop Files section fixes #94 2014-01-20 21:44:15 +02:00
Sergey Romanenko
0bb9915708 Admin Default Theme Updates 2014-01-20 15:58:24 +02:00
Sergey Romanenko
f7a716cb76 Update changelog.txt 2014-01-20 15:19:42 +02:00
Awilum
dfb0b41467 iCheck for checkboxes #225 2014-01-20 01:07:42 +02:00
Awilum
ad5c1802d0 Blog Plugin as a part of Monstra CMS #188 2014-01-20 00:25:00 +02:00
Awilum
390c5a1354 iCheck for checkboxes #225 2014-01-19 18:03:45 +02:00
Awilum
3f4a04e03a iCheck for checkboxes #225 2014-01-19 18:02:48 +02:00
Sergey Romanenko
669289af32 Merge pull request #224 from DmitriyMX/dev
Fix: JSON.parse: unexpected character
2014-01-19 07:00:47 -08:00
DmitriyMX
d4f57e35d3 Fix: JSON.parse: unexpected character 2014-01-19 18:51:29 +04:00
ANISSA90
cc7d270bfb Create id.lang.php 2014-01-19 16:25:59 +07:00
ANISSA90
caecc6df07 Create id.lang.php 2014-01-19 16:17:33 +07:00
ANISSA90
0f357ec80b Create id.lang.php 2014-01-19 16:12:34 +07:00
ANISSA90
57c43319f7 Create id.lang.php 2014-01-19 15:32:53 +07:00
ANISSA90
00ac33e273 Create id.lang.php 2014-01-19 15:13:47 +07:00
ANISSA90
3947d3560d Create id.lang.php 2014-01-19 14:20:01 +07:00
ANISSA90
4907964484 Create id.lang.php 2014-01-19 13:58:13 +07:00
ANISSA90
38c8a3340c Create id.lang.php 2014-01-19 13:39:28 +07:00
Awilum
7532ad1127 Fixes for #94 and #204 2014-01-18 12:06:39 +02:00
Awilum
cc613247f3 UI Improvements - Admin Theme Fixes #194 2014-01-18 11:40:00 +02:00
Awilum
92064df622 Files Manager Improvements #94 2014-01-18 11:22:30 +02:00
Awilum
fb121a88d1 Merge branch 'dev' of https://github.com/metalgvc/monstra-cms into metalgvc-dev
Conflicts:
	plugins/box/filesmanager/views/backend/index.view.php
2014-01-18 11:14:21 +02:00
Awilum
abc04ee218 UI Improvements - Admin Theme Updates #194 2014-01-18 00:15:54 +02:00
Awilum
0faba762ba UI Improvements - Admin Theme Updates #194 2014-01-18 00:15:53 +02:00
Awilum
fed3aa5664 Files Manager Improvements - Drop Files section added #94 2014-01-18 00:15:53 +02:00
Sergey Romanenko
6e3a2a63e7 Merge pull request #221 from metalgvc/dev
Monstra Dashboard - Google Analytics #204
2014-01-17 14:13:34 -08:00
metal_gvc
c119c9f84a Monstra Dashboard #204 2014-01-17 23:50:14 +02:00
ANISSA90
3eae0d2114 Create id.lang.php 2014-01-18 00:15:45 +07:00
ANISSA90
955ba2a9ca Create id.lang.php 2014-01-18 00:07:21 +07:00
Sergey Romanenko
25bee212a8 Merge pull request #220 from metalgvc/dev
Dashboard google analytics #204
2014-01-17 01:26:46 -08:00
Sergey Romanenko
e5f319a961 Update changelog.txt 2014-01-17 10:26:51 +02:00
Oleg Gatseluk
251acd4949 google analytics dashboard init fix 2014-01-17 10:20:46 +02:00
Sergey Romanenko
bc429ac098 Update changelog.txt 2014-01-17 10:18:11 +02:00
Sergey Romanenko
a76590930f Update changelog.txt 2014-01-17 10:15:07 +02:00
Sergey Romanenko
2f873985a8 Update changelog.txt 2014-01-17 10:14:02 +02:00
metal_gvc
ffc0bf62c2 google analytics init 2014-01-17 09:11:03 +02:00
Sergey Romanenko
678573b91a Plugin API - Actions - Closure support added. 2014-01-16 12:17:07 +02:00
ANISSA90
83abaae0af Create id.lang.php 2014-01-16 07:29:31 +07:00
ANISSA90
bd310d6c7c Create id.lang.php 2014-01-16 07:15:30 +07:00
ANISSA90
9fabc679b4 Create id.lang.php 2014-01-16 07:05:14 +07:00
Awilum
5e06c10ef9 Users Plugin: Improvements 2014-01-15 00:39:00 +02:00
Awilum
fa00499d93 CodeMirror Plugin as a part of Monstra CMS #187 2014-01-15 00:18:15 +02:00
Awilum
ed323cfe7b Blog Plugin as a part of Monstra CMS #188 2014-01-14 23:56:52 +02:00
Awilum
5dc4c65f76 Blog Plugin as a part of Monstra CMS #188 2014-01-14 23:56:07 +02:00
Awilum
3dfef0e3a3 Gelato Html - W3 Fixes #189 2014-01-14 23:49:29 +02:00
Awilum
87a55ed5bb Users Plugin: Notifications Updates 2014-01-14 23:44:16 +02:00
Awilum
40afdaccc7 Email Templates Plugin and Ink Framework integration #2 #192 2014-01-14 20:15:34 +02:00
Awilum
290ab4bec2 Backup Plugin: Improvements 2014-01-14 20:11:42 +02:00
Awilum
14baa34888 Backup Plugin: Notifications added 2014-01-14 20:11:41 +02:00
Sergey Romanenko
5c03f0cfab Update filesmanager.admin.php 2014-01-13 12:22:43 +02:00
Awilum
f9ec0b9e18 Email Templates Plugin - Email Templates - Added #2 2014-01-12 20:39:25 +02:00
Awilum
d2ab853939 minify.[css|js] cached by the browser #212 2014-01-12 17:59:54 +02:00
Awilum
fae12cefda UI Improvements - Plugins - Layout fixes #194 2014-01-12 15:12:45 +02:00
Awilum
1dbd208832 UI Improvements - Plugins - Layout fixes #194 2014-01-11 23:05:33 +02:00
Awilum
2b1e28a0d5 minify.[css|js] cached by the browser #212 2014-01-11 11:31:30 +02:00
Awilum
2c268fc873 UI Improvements - Admin Theme - Styles fixes #194 2014-01-11 01:18:33 +02:00
Awilum
15535a460c UI Improvements - Admin Theme - Styles fixes #194 2014-01-11 01:18:17 +02:00
Awilum
c2a2dba621 Twitter Bootsrap 3 - Admin - Fixes #185 2014-01-11 00:56:21 +02:00
Awilum
f340fcd3a2 Files Manager Improvements - Breadcrumbs fixes #94 2014-01-11 00:52:52 +02:00
Awilum
7f71f3e3bc Blog Plugin as a part of Monstra CMS #188 2014-01-10 22:48:01 +02:00
Awilum
0170c3015e Localization fixes 2014-01-10 22:14:56 +02:00
Awilum
141df2033d Localization fixes 2014-01-10 22:12:54 +02:00
Awilum
a8c9f864e5 minify.[css|js] cached by the browser #212 2014-01-10 22:06:59 +02:00
Awilum
8b5bdd266f minify.[css|js] cached by the browser - Added abblity to increment js and css version #212 2014-01-10 22:06:58 +02:00
Sergey Romanenko
97a5dcf317 Merge pull request #218 from metalgvc/dev
Files Manager Improvements - create directory #94
2014-01-10 10:02:39 -08:00
metal_gvc
e78f59126a Files Manager Improvements - create directory #94 2014-01-10 20:00:21 +02:00
Awilum
81b070322e UI Improvements - Admin Theme - Styles fixes #194 2014-01-10 19:40:30 +02:00
Awilum
aabbb4461e Blog Plugin as a part of Monstra CMS - Layout Updates #188 2014-01-09 23:05:09 +02:00
Awilum
e08c17df4b Blog Plugin as a part of Monstra CMS - getPostAuthor() - added #188 2014-01-09 22:20:41 +02:00
Awilum
01be9f66e4 Blog Plugin as a part of Monstra CMS - Layout Updates #188 2014-01-09 22:19:33 +02:00
Awilum
4381179378 Blog Plugin as a part of Monstra CMS - getPostDate() - added #188 2014-01-09 20:53:28 +02:00
Awilum
015aff3cb3 Blog Plugin as a part of Monstra CMS - Layout Updates #188 2014-01-09 20:50:17 +02:00
Awilum
fb44416902 Blog Plugin as a part of Monstra CMS #188 2014-01-09 20:30:39 +02:00
Awilum
6721c7829f Blog Plugin as a part of Monstra CMS #188 2014-01-09 20:30:20 +02:00
Awilum
df745f597c Monstra Dashboard - Fixes #204 2014-01-09 19:21:37 +02:00
Awilum
95a791e871 Monstra Dashboard - Fixes #204 2014-01-09 19:19:24 +02:00
Sergey Romanenko
7196ac5067 Update Monstra.php 2014-01-09 12:27:51 +02:00
Sergey Romanenko
1db7253e63 Twitter Bootsrap 3 - Admin - Fixes #185 2014-01-09 12:22:05 +02:00
Sergey Romanenko
1998674217 Twitter Bootsrap 3 - Admin - Fixes #185 2014-01-09 12:19:31 +02:00
Sergey Romanenko
d6e269a7fa Update index.template.php 2014-01-09 12:16:30 +02:00
Sergey Romanenko
bd1b9d24d6 Merge pull request #213 from promo360/dev
Localization fixes
2014-01-08 23:42:57 -08:00
Евгений
1c42312010 Themes - boostrap 3 fixes 2014-01-09 07:46:15 +06:00
Евгений
31e0616a42 Localization fixes 2014-01-09 07:33:27 +06:00
Awilum
b3767f9f59 Email Templates Plugin - fixes #2 2014-01-09 01:45:39 +02:00
Awilum
c68ac3f03a Email Templates Plugin - Skeleton Added #2 2014-01-09 01:43:52 +02:00
Awilum
e8f79e99b5 Email Templates Plugin - DB Updates #2 2014-01-09 01:40:36 +02:00
Awilum
5433a17aa5 Information Plugin set menu priority 6 2014-01-09 01:36:52 +02:00
Awilum
0ab72c4208 UI Improvements - Admin Theme - .error-message class added #194 2014-01-09 00:59:27 +02:00
Awilum
e71bb980a5 UI Improvements - Menu Plugin - Fixes #194 2014-01-09 00:58:45 +02:00
Awilum
7c0a4d7a50 UI Improvements - Menu Plugin - Fixes #194 2014-01-09 00:52:37 +02:00
Awilum
ca65abd10c UI Improvements - Users Client Side - Fixes #194 2014-01-09 00:27:18 +02:00
Awilum
26f1abd717 UI Improvements - Admin - Cancel Button Added #194 2014-01-09 00:11:19 +02:00
Awilum
281894d08a Monstra Dashboard - localization - fixes #204 2014-01-08 22:31:51 +02:00
Awilum
b2f3d3d526 jQuery in head #211 2014-01-08 21:54:44 +02:00
Awilum
1bc19bc850 jQuery in head #211 2014-01-08 21:54:17 +02:00
Awilum
73b20836c8 Alert #208 2014-01-08 21:30:06 +02:00
Awilum
aef599de95 Alert #208 2014-01-08 21:22:18 +02:00
Sergey Romanenko
0fcae326cb UI Improvements - Admin Theme - Styles fixes #194 2014-01-08 16:43:21 +02:00
Sergey Romanenko
6d38fb9c39 Update changelog.txt 2014-01-08 09:22:52 +02:00
Awilum
64d13302d5 Monstra Dashboard #204 2014-01-08 01:17:33 +02:00
Awilum
cc9ce84648 Monstra Dashboard - Set as default Plugin for Admin Panel #204 2014-01-08 01:08:45 +02:00
Awilum
9d6d3dec95 Monstra Dashboard - DB Updates #204 2014-01-08 01:02:52 +02:00
Awilum
365dbafcc9 UI Improvements - Admin Login Page - Fixes #194 2014-01-08 01:00:49 +02:00
Sergey Romanenko
da4e3b60c0 Merge pull request #207 from promo360/dev
Modal. Bootstrap 3
2014-01-07 14:49:51 -08:00
Евгений
ed1edc32db Merge branch 'dev' of https://github.com/Awilum/monstra-cms into dev 2014-01-08 04:47:04 +06:00
Евгений
dbb3db8e6b Merge branch 'master' of https://github.com/Awilum/monstra-cms into dev 2014-01-08 04:46:27 +06:00
Awilum
27d55c2e51 Monstra Dashboard #204 2014-01-08 00:44:05 +02:00
Awilum
2bc94dbe6a Monstra Dashboard #204 2014-01-08 00:43:29 +02:00
Евгений
d3b00d894b Modal. Bootstrap 3 2014-01-08 04:39:53 +06:00
Awilum
5a142a2353 UI Improvements - Admin - Updates #194 2014-01-07 23:39:15 +02:00
Awilum
88b244a6df HubSpot Messaging Library #195 2014-01-07 20:39:06 +02:00
Awilum
1fd4892969 Core: Javascript may be broken if there is no break line - fixed 2014-01-07 20:35:58 +02:00
Awilum
a48a587fcd UI Improvements - Admin - Cleanup #194 2014-01-07 20:17:16 +02:00
Awilum
30f5aae0be UI Improvements - Admin - Updates #194 2014-01-07 20:10:09 +02:00
Awilum
14d7d93373 Monstra Dashboard - Plugin Skeleton #204 2014-01-07 20:10:08 +02:00
Sergey Romanenko
4f92cb32c2 Merge pull request #205 from EuanMead/dev
Numerous Improvements & Tweaks
2014-01-07 10:01:13 -08:00
Awilum
1e3e3ce8b3 Sandbox Plugin - cleanup 2014-01-07 19:56:56 +02:00
EuanMead
e3c80959f8 Lossless Compression of Images 2014-01-07 16:55:59 +00:00
EuanMead
b36a30c4c3 Lossless Compression of Images 2014-01-07 16:55:56 +00:00
EuanMead
7f8833286c Lossless Compression of Images 2014-01-07 16:55:47 +00:00
EuanMead
3bfee0107d Lossless Compression of Images 2014-01-07 16:55:42 +00:00
EuanMead
9d263cb2c9 Lossless Compression of Images 2014-01-07 16:55:37 +00:00
EuanMead
01a1b5d62d Lossless Compression of Images 2014-01-07 16:55:33 +00:00
EuanMead
1286de90ae Lossless Compression of Images 2014-01-07 16:55:18 +00:00
EuanMead
b6de5a3261 Lossless Compression of Images 2014-01-07 16:55:13 +00:00
EuanMead
5abc7c89db Lossless Compression of Images 2014-01-07 16:55:08 +00:00
EuanMead
32165e0b18 Lossless Compression of Images 2014-01-07 16:54:55 +00:00
EuanMead
bdb27de2f1 Lossless Compression of Images 2014-01-07 16:54:51 +00:00
EuanMead
70f3338470 Lossless Compression of Images 2014-01-07 16:54:42 +00:00
EuanMead
f82f677f79 Lossless Compression of Images 2014-01-07 16:53:26 +00:00
EuanMead
a8a425bec1 Lossless Compression of Images 2014-01-07 16:53:22 +00:00
EuanMead
4bb991ebe8 Lossless Compression of Images 2014-01-07 16:53:11 +00:00
EuanMead
2c87b85daa Lossless Compression of Images 2014-01-07 16:53:07 +00:00
EuanMead
fabf51c624 Lossless Compression of Images 2014-01-07 16:52:52 +00:00
EuanMead
5655dd70a8 Lossless Compression of Images 2014-01-07 16:52:43 +00:00
EuanMead
4d7383637a Use CDNJS For Hosting Scripts. 2014-01-07 16:33:43 +00:00
EuanMead
8ee7c234e1 Use CDNJS For Hosting Scripts. 2014-01-07 16:33:37 +00:00
EuanMead
b757c19778 Update to use Bootstrap V3
Minor changes to structure and changes to classes to provide UI
consistent with pages.
2014-01-07 16:15:45 +00:00
Awilum
2574431dd8 Admin Navbar Increase Gravatar size #193 2014-01-07 15:36:31 +02:00
Awilum
b43422f090 No Bootstrap.min.css - Fixed #200 2014-01-07 15:34:11 +02:00
Awilum
450a7f3c2f Site Url without trailing slashes #186 2014-01-07 01:26:13 +02:00
Awilum
79f0ef2701 UI Improvements - Admin - Navbar Updates #194 2014-01-07 01:23:02 +02:00
Awilum
ce14f9b241 Core: Store user_email in Session 2014-01-07 01:21:12 +02:00
Awilum
843b460614 Core: Store user_email in Session 2014-01-07 01:19:33 +02:00
Awilum
15b089f043 Users Plugin - Improve getGravatarURL() #193 2014-01-06 23:59:12 +02:00
Awilum
2baee12915 UI Improvements - Users Client Side - Fixes #194 2014-01-06 22:54:04 +02:00
Awilum
1d13ebe490 Gelato Form - W3 Fixes #189 2014-01-06 22:47:27 +02:00
Awilum
dee1b7ba75 UI Improvements - Users Client Side - Fixes #194 2014-01-06 22:44:10 +02:00
Awilum
469a015b8b DUI Improvements - Default Theme is Flat - Fixes #194 2014-01-06 22:43:16 +02:00
Awilum
44860b5cba UI Improvements - Users Client Side - Fixes #194 2014-01-06 22:36:24 +02:00
Awilum
dd2e241207 Changelog - updates 2014-01-06 22:24:47 +02:00
Sergey Romanenko
986353aa88 Merge pull request #197 from promo360/dev
Site Url without trailing slashes
2014-01-06 11:53:13 -08:00
Awilum
5b4a0c3bbf UI Improvements - Installer Fixes #194 2014-01-06 21:50:56 +02:00
Евгений
e60fb9921e Site Url without trailing slashes 2014-01-07 01:32:50 +06:00
Sergey Romanenko
5cb23c76c3 Merge pull request #196 from promo360/dev
Dev
2014-01-06 11:09:59 -08:00
Awilum
02fa169760 Files Manager Improvements #94 2014-01-06 21:05:12 +02:00
Евгений
3d83dc775f Site Url without trailing slashes 2014-01-07 01:02:23 +06:00
Евгений
432942abf8 W3 Fixes <br/> > <br> 2014-01-07 00:44:58 +06:00
Евгений
29d506a862 W3 2014-01-07 00:39:31 +06:00
Awilum
83f7be1c7d Site Url without trailing slashes #186 #188 2014-01-06 19:49:39 +02:00
Awilum
bbc74df954 #187 #188 - DataBase Updates 2014-01-06 19:43:47 +02:00
Евгений
fbb65d4568 Merge pull request #1 from Awilum/dev
Dev
2014-01-06 09:41:09 -08:00
Awilum
543b8ae883 Site Url without trailing slashes #186 2014-01-06 19:35:20 +02:00
Awilum
51e2cd0a45 Site Url without trailing slashes #186 2014-01-06 19:17:23 +02:00
Awilum
aa3d785b97 Site Url without trailing slashes 2014-01-04 23:52:28 +02:00
Awilum
cd40c09496 Site Url without trailing slashes 2014-01-04 23:21:56 +02:00
Awilum
7c0fcf42cf Site Url without trailing slashes 2014-01-04 01:14:54 +02:00
Awilum
a32056db45 Site Url without trailing slashes 2014-01-04 00:58:34 +02:00
Awilum
de0c1da61c Default Theme on Twitter Bootstrap 3 2014-01-03 23:46:12 +02:00
Awilum
8b0ba10a5a Site Url without trailing slashes 2014-01-03 23:45:28 +02:00
Awilum
8d681709d2 CodeMirror Plugin as a part of Monstra CMS 2014-01-03 20:56:46 +02:00
Awilum
7f0cdeba25 Frontend Improvements 2014-01-03 20:56:33 +02:00
Awilum
f4d9b9c53d CodeMirror Plugin as a part of Monstra CMS 2014-01-03 20:49:25 +02:00
Awilum
7b8949dc2b Site Url without trailing slashes 2014-01-03 20:38:29 +02:00
Awilum
108581e4ef Frontend Improvements 2014-01-03 20:38:11 +02:00
Awilum
83264e41f3 Blog Plugin as a part of Monstra CMS 2014-01-03 19:07:05 +02:00
Awilum
79f4abe6bd Site Url without trailing slashes 2014-01-03 19:04:03 +02:00
Awilum
9da99040e1 Site Url without trailing slashes 2014-01-03 18:39:03 +02:00
Awilum
c3fe4d16bc FilesManager Improvements 2014-01-03 02:56:01 +02:00
Awilum
c1a523acf6 jQuery v1.10.2 2014-01-03 02:55:43 +02:00
Awilum
03653831c8 FilesManager Improvements 2014-01-03 02:44:48 +02:00
Awilum
fb12bc8d85 Frontend Improvements 2014-01-03 02:43:22 +02:00
Awilum
6bbf1ffd51 bootstrap-confirm.js - Removed 2014-01-03 02:41:35 +02:00
Awilum
0c118fb984 bootstrap-confirm.js - Added 2014-01-03 02:17:53 +02:00
Awilum
b33b85860f FilesManager Improvements 2014-01-03 01:44:00 +02:00
Awilum
d1ef0e47f9 Chocolat Added 2014-01-03 01:43:32 +02:00
Awilum
5466099cae Project Assets - CleanUp 2014-01-03 00:06:38 +02:00
Awilum
2df64961e6 Monstra Logo 256px - Added 2014-01-03 00:05:37 +02:00
Awilum
d01a5e36fb Chocolat Added 2014-01-03 00:05:13 +02:00
Awilum
97b9982ba0 Frontend Improvements 2014-01-02 22:22:04 +02:00
Awilum
cac3aeb813 default.js - old js removed 2014-01-02 22:11:59 +02:00
Awilum
7b24e315b7 Frontend Improvements 2014-01-02 19:56:08 +02:00
Awilum
73abb00785 Frontend Improvements 2014-01-02 19:54:18 +02:00
Awilum
4d16d07b2c Frontend Improvements 2014-01-02 02:37:11 +02:00
Awilum
54be2aa7d0 Frontend Improvements 2014-01-02 02:37:00 +02:00
Awilum
42e807db22 Monstra Installer - Frontend Improvements 2014-01-02 02:29:14 +02:00
Awilum
76f216f516 Frontend Improvements - FlatUI & Foundation inspiration 2014-01-02 02:29:01 +02:00
Awilum
5def336ff9 Frontend Improvements 2014-01-02 02:16:33 +02:00
Awilum
b90f3ec00d Frontend Improvements 2014-01-02 02:12:49 +02:00
Awilum
e58399298f Admin Help Section - Added 2014-01-02 02:02:28 +02:00
Awilum
e31c081732 Frontend Improvements - FlatUI & Foundation inspiration 2014-01-02 01:44:40 +02:00
Awilum
588f67b2e9 Frontend Improvements - FlatUI & Foundation inspiration 2014-01-02 01:34:41 +02:00
Awilum
e3a623b31f Monstra Installer - Frontend Improvements 2014-01-02 00:59:56 +02:00
Awilum
8cacd03c40 Merge fixes 2014-01-01 21:35:04 +02:00
Awilum
5ea80e31e0 Merge branch 'origin/dev'
Conflicts:
	engine/Monstra.php
	public/assets/js/bootstrap.js
2014-01-01 21:32:20 +02:00
Awilum
83f80306d3 Frontend Improvements 2014-01-01 21:29:40 +02:00
Awilum
bfc41e03ea W3 Fixes 2014-01-01 21:21:26 +02:00
Awilum
7241410c2d Monstra 2.4.0 pre-alpha in progress 2014-01-01 21:15:35 +02:00
Awilum
8284902d57 Frontend Improvements 2014-01-01 21:06:06 +02:00
Awilum
791e73c1b6 Frontend Improvements 2014-01-01 19:46:52 +02:00
Awilum
80d1439471 Frontend Improvements 2014-01-01 19:46:23 +02:00
Awilum
197cd7afde Frontend Improvements 2013-12-30 23:38:45 +02:00
Sergey Romanenko
326a846be3 Merge pull request #184 from mwidz/master
Updated 'pl' language files
2013-12-27 04:37:08 -08:00
Mirosław Widz
97542ada1b Adding a newline 2013-12-25 21:56:50 +01:00
Mirosław Widz
db5e6b7868 Updated 'pl' language files 2013-12-25 21:50:44 +01:00
Awilum
81ff2288b9 Merge branch 'dev' 2013-12-25 00:32:50 +02:00
Awilum
cd0d8296a5 Monstra 2.3.1 2013-12-25 00:32:27 +02:00
Awilum
03e5fc320c Email Layout: footer fixes 2013-12-25 00:24:00 +02:00
Awilum
b29abf8da1 Gelato: Number Class - updated bytes format (JEDEC & IEC 60027) by mbarzda 2013-12-25 00:08:56 +02:00
Awilum
6f55f9238b Readme Updated 2013-12-25 00:04:14 +02:00
Awilum
ad870b2120 new favicon added #182 2013-12-24 23:58:57 +02:00
Awilum
d9ea1c3d7c Merge branch 'master' 2013-12-24 23:52:02 +02:00
Sergey Romanenko
6531d3ee87 Update Image.php 2013-12-24 21:01:55 +02:00
Sergey Romanenko
c7935e6636 Update README.md 2013-12-24 14:19:42 +02:00
Sergey Romanenko
a33d1a39d9 Update README.md 2013-12-24 10:24:04 +02:00
Sergey Romanenko
cbaa84f50e Update README.md 2013-12-24 10:22:14 +02:00
Sergey Romanenko
339413581d Update README.md 2013-12-24 10:21:45 +02:00
Sergey Romanenko
7696d90752 Installer: SERVER_PORT issue - fixed by KANekT 2013-12-23 16:44:08 +02:00
Sergey Romanenko
c83bb55df3 Merge pull request #179 from bernte/patch-1
Update login.template.php
2013-12-23 00:15:46 -08:00
Sergey Romanenko
e76cd74d5b Merge pull request #181 from bernte/patch-3
Update index.template.php
2013-12-23 00:13:31 -08:00
bernte
099b206e66 Update index.template.php 2013-12-23 03:47:11 +01:00
bernte
10a6b56b34 Update login.template.php
added year
2013-12-22 23:49:47 +01:00
Sergey Romanenko
8e83ca5bd1 Merge pull request #178 from bernte/patch-2
Update Javascript.php
2013-12-22 14:41:55 -08:00
bernte
524052b4bf Update Javascript.php
adding a linebreak for sourcecode after <script> ... </script>
2013-12-22 23:23:32 +01:00
Sergey Romanenko
f4eaded4f3 Merge pull request #177 from bernte/patch-1
Update actions.php
2013-12-22 14:20:40 -08:00
bernte
2efff484fc Update actions.php
adding a linebreak for sourcecode after
`
<meta name="generator" content="Powered by Monstra 2.3.0" />`
2013-12-22 23:16:49 +01:00
Awilum
b134abb96e Merge branch 'master' 2013-12-22 23:34:50 +02:00
Awilum
1a1bfabda0 Sitemap Errors #175 - fixes 2013-12-22 23:31:38 +02:00
Sergey Romanenko
a8ea2d4e02 Merge pull request #176 from bernte/patch-20
Update install.php
2013-12-22 11:43:44 -08:00
Sergey Romanenko
ce571b6ef3 Merge pull request #173 from bernte/patch-18
Update 2.page.txt
2013-12-22 11:41:39 -08:00
Sergey Romanenko
ac3eeb1508 Merge pull request #172 from bernte/patch-17
Update bootstrap.js
2013-12-22 11:38:59 -08:00
Sergey Romanenko
e9691d6b71 Merge pull request #174 from bernte/patch-19
Update footer.chunk.php
2013-12-22 11:38:08 -08:00
Sergey Romanenko
7734822789 Merge pull request #171 from bernte/patch-16
Update de.lang.php
2013-12-22 11:37:23 -08:00
Sergey Romanenko
75af5452bc Merge pull request #170 from bernte/patch-15
Update de.lang.php
2013-12-22 11:37:06 -08:00
Sergey Romanenko
c9019ca5fa Merge pull request #169 from bernte/patch-13
Update login.template.php
2013-12-22 10:39:08 -08:00
bernte
ee8e1abfd4 Update install.php
replaced invalid code
2013-12-22 19:27:03 +01:00
bernte
6b576be9a5 Update footer.chunk.php
made validation fixes for demo site
2013-12-22 15:13:06 +01:00
bernte
e823494ab5 Update 2.page.txt
made validation fixes for demo site
2013-12-22 15:07:39 +01:00
bernte
f7f3b91f46 Update bootstrap.js 2013-12-22 02:46:46 +01:00
bernte
0c90ab6bfe Update de.lang.php 2013-12-22 02:41:36 +01:00
bernte
35b75e9027 Update de.lang.php 2013-12-22 02:39:17 +01:00
bernte
2d5eb31569 Update login.template.php
added alt tag and backslash
2013-12-22 02:32:56 +01:00
Awilum
2c3d224e62 Frontend Improvements 2013-12-17 11:01:24 +02:00
Awilum
2fbb4c30c3 Frontend Improvements 2013-12-16 10:03:24 +02:00
Awilum
0dfc0e5951 Engine Alert: use Messenger Library 2013-12-15 16:36:19 +02:00
Awilum
fc4d4cde4f Frontend Improvements 2013-12-15 16:35:26 +02:00
Awilum
b23f2b9c5a Messenger Library - Admin integration 2013-12-15 16:34:40 +02:00
Awilum
4f35153ac2 Messenger Library - Added 2013-12-15 16:31:48 +02:00
Awilum
82f02a7ab5 Default Theme - use Twitter Bootstrap 3.x.x 2013-12-14 00:43:06 +02:00
Awilum
16975a3062 Update Twitter Bootstrap to 3.0.3 2013-12-14 00:42:43 +02:00
Awilum
9b4ff3e2e3 Frontend Improvements 2013-12-14 00:40:55 +02:00
Awilum
798f558558 Frontend Improvements 2013-12-14 00:38:58 +02:00
777 changed files with 71196 additions and 13010 deletions

View File

@@ -1,13 +1,15 @@
# #
# Monstra CMS :: php & apache settings # This file is part of the Monstra.
#
# (c) 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.
# #
# Set default charset utf-8 # Set default charset utf-8
AddDefaultCharset UTF-8 AddDefaultCharset UTF-8
# Don't show directory listings for URLs which map to a directory.
Options -Indexes
# PHP 5, Apache 1 and 2. # PHP 5, Apache 1 and 2.
<IfModule mod_php5.c> <IfModule mod_php5.c>
php_flag magic_quotes_gpc off php_flag magic_quotes_gpc off
@@ -15,20 +17,47 @@ Options -Indexes
php_flag register_globals off php_flag register_globals off
</IfModule> </IfModule>
# Setting rewrite rules.
<IfModule mod_rewrite.c> <IfModule mod_rewrite.c>
RewriteEngine on RewriteEngine on
# Update code bellow for SEO improvements ## Begin - Rewrite rules to block out some common exploits.
# RewriteCond %{HTTP_HOST} ^www.example.org [NC] # If you experience problems on your site block out the operations listed below
# RewriteRule ^(.*)$ http://example.org/$1 [R=301,L] # This attempts to block the most common type of exploit `attempts` to Monstra
#
# Block out any script trying to base64_encode data within the URL.
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
# Block out any script that includes a <script> tag in URL.
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL.
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL.
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Return 403 Forbidden header and show the content of the root homepage
RewriteRule .* index.php [F]
#
## End - Rewrite rules to block out some common exploits.
## Begin - Rewrite rules for Monstra
RewriteBase /%siteurlhere%/ RewriteBase /%siteurlhere%/
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L] RewriteRule ^(.*)$ index.php [QSA,L]
## End - Rewrite rules for Monstra
# Update code bellow for SEO improvements
# Redirect 301 /home http://example.org/ ## Begin - Rewrite rules for SEO improvements.
# RewriteCond %{HTTP_HOST} ^www.example.org [NC]
# RewriteRule ^(.*)$ http://example.org/$1 [R=301,L]
# Redirect 301 /index http://example.org/
## End - Rewrite rules for SEO improvements.
</IfModule> </IfModule>
# Prevent visitors from viewing files directly.
<FilesMatch "(^#.*#|\.(md|txt|html|tpl|yml|yaml)|~)$">
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>
# Don't show directory listings for URLs which map to a directory.
Options -Indexes

View File

@@ -1,3 +1,85 @@
Monstra 3.0.3, 2016-01-29
------------------------
- Improved Monstra Security
- Minimum PHP version for Monstra is 5.3.2
- Admin: Fixed 404 error when using certain server configurations
- Localization: Major Fixes for SR, KA-GE, and ES
- Install Script Fixes
Monstra 3.0.2, 2015-10-16
------------------------
- Added Monstra MIT LICENSE instead of GNU GENERAL PUBLIC LICENSE v3
- Code standards fixes.
- Localization: Major Fixes for ES and SR
Monstra 3.0.1, 2014-08-10
------------------------
- Minimum php is 5.3
- Themes Plugin: Imposible to create new CSS - fixed
- Themes Plugin: js and css counter does not recalculate - fixed
- Error in Monstra Notifications - fixed
- Updated plugins url from plugins.monstra.org to monstra.org/download/plugins
Monstra 3.0.0, 2014-08-01
------------------------
- Mobile Ready! Monstra fully responsive for mobile devices, tablets, and normal computer screens.
- Twitter Bootstrap updated to 3.1.1
- Idiorm updated to 1.4.1
- jQuery updated to 2.1.0
- Admin: New Modern User Interface
- Site: New default theme
- Layout fixes according to World Wide Web Consortium (W3C) Standards
- Prefetch DNS to reduce look up times
- Files Manager: added ability to create & rename directories.
- Files Manager: Maximum upload file size message - added.
- Files Manager: Bootstrap fileinput.js updated to 3.0.0
- Files Manager: File Info Popup
- Backup: Restore Site from Backup added
- Plugins Manager: Uploading new plugins via the admin panel added
- Plugins Manager: Read plugin help(README.MD) ability added.
- Responsive Chocolat Lightbox instead of TB Lightbox
- Blog Plugin as a part of Monstra CMS
- CodeMirror Plugin as a part of Monstra CMS
- Markdown Plugin as a part of Monstra CMS
- MarkItUp Color Pallete fixes
- Site Url without trailing slashes
- Admin Help Section - added.
- Pages Plugin: tags field added.
- Pages Plugin: Meta Title added.
- Sitemap Errors Fixes.
- Monstra automatically renames files - fixed
- Monstra Dashboard created and set as default Plugin for Admin Panel
- Ink Framework for Monstra Email Templates
- iCheck plugin for checkboxes added.
- Emails Manager Plugin added.
- HubSpot Messaging Library added for notifications
- Gelato: Unzip Functionality added.
- Gelato: Number Class new method convertToBytes() added.
- Gelato: ErroHandler styles updates
- Users Plugin getGravatarURL() improve
- Plugin API - Actions - Closure support added.
- Plugin API - Filters - Closure support added.
- Core: Better statuses notification (error,success,warning)
- Core: Store user_email in Session
- Core: Javascript may be broken if there is no break line - fixed
- Core: Added ability to avoid caching JS/CSS by the browser.
- Core: Monstra automatically rename files Issue - fixed
- Sandbox Plugin cleanup
- New Flags: Japanese(JA), Indonesian(ID), Chinese(ZH-CN), Turkish(TR) added.
- Localization: Japanese(JA), Indonesian(ID), Chinese(ZH-CN), Turkish(TR) translations added.
- Localization: Major Fixes
Monstra 2.3.1, 2013-12-25
------------------------
- Localization: Major Fixes
- Gelato: Image.php Major Fixes
- Sitemap: Errors #175 - fixes
- New favicon added #182 - by bernte
- Layouts: General Fixes - by bernte
- Installer: SERVER_PORT issue - fixed by KANekT
- Gelato: Number Class - updated bytes format (JEDEC & IEC 60027) by mbarzda
- Email Layout: footer fixes
Monstra 2.3.0, 2013-12-19 Monstra 2.3.0, 2013-12-19
------------------------ ------------------------
- Update Twitter Bootstrap to 2.3.2 - Update Twitter Bootstrap to 2.3.2
@@ -10,7 +92,7 @@ Monstra 2.3.0, 2013-12-19
- Gelato: Number.php: Undefined offset fix - Gelato: Number.php: Undefined offset fix
- XMLDB: error select for empty table fix - XMLDB: error select for empty table fix
- Plugin API: Stylesheet.php updates - sourcecode misses a linebreak after minified css - Plugin API: Stylesheet.php updates - sourcecode misses a linebreak after minified css
- Files Manager: jasny bootstrap-fileupload - added #89 - Files Manager: jasny bootstrap-fileupload - added #89
- Users Plugin: login page fixes - Users Plugin: login page fixes
- Users Plugin: Deleting users - fixed by Oleg Gatseluk #158 - Users Plugin: Deleting users - fixed by Oleg Gatseluk #158
- Pages Plugin: General method getPages() created #123 - Pages Plugin: General method getPages() created #123
@@ -67,7 +149,7 @@ Monstra 2.1.3, 2012-12-09
- Pages Plugin: add ability to get content for specific page. - Pages Plugin: add ability to get content for specific page.
- XMLDB: New method factory() added. - XMLDB: New method factory() added.
- Twitter Bootstrap updated to Version 2.2.2 - Twitter Bootstrap updated to Version 2.2.2
- Sitemap Plugin: _blank removed. - Sitemap Plugin: `_blank` removed.
- Filesmanager Plugin: fixes. - Filesmanager Plugin: fixes.
- Backup Plugin: fixes. - Backup Plugin: fixes.
@@ -162,7 +244,7 @@ Monstra 2.0.0, 2012-10-09
- Users Plugin: Admin - New User Registration Validation - Fixed - Users Plugin: Admin - New User Registration Validation - Fixed
- Users Plugin: Added ability to set "about me" information. - Users Plugin: Added ability to set "about me" information.
- Improved Password Reset Logic. - Improved Password Reset Logic.
- Information Plugin: Added new tab "Server" with common server information. - Information Plugin: Added new tab "Server" with common server information.
- Box Plugins: CSRF vulnerability resolved. - Box Plugins: CSRF vulnerability resolved.
- Sitemap Plugin: Basic search engine optimization. - Sitemap Plugin: Basic search engine optimization.
- Improved Menu Plugin. Added ability to manage items categories. - Improved Menu Plugin. Added ability to manage items categories.
@@ -172,12 +254,12 @@ Monstra 2.0.0, 2012-10-09
- Dir Helper: Fixed size() method. - Dir Helper: Fixed size() method.
- New Default Theme: built with best frontend optimization practice. - New Default Theme: built with best frontend optimization practice.
- Options API: Updated get() method. Return empty string if option value doesnt exists. - Options API: Updated get() method. Return empty string if option value doesnt exists.
- CSS variables: Added - @theme_site_url @theme_admin_url - CSS variables: Added - @theme_site_url @theme_admin_url
- CSS variables: Deleted - @theme_url - CSS variables: Deleted - @theme_url
- Themes Plugin: Added ability to create/edit/clone JavaScripts. Added ability to change admin theme in one click. - Themes Plugin: Added ability to create/edit/clone JavaScripts. Added ability to change admin theme in one click.
- Apply filter 'content' to Blocks. - Apply filter 'content' to Blocks.
- Array Helper: get() method improved. New methods keyExists() isAssoc() set() delete() random() added. - Array Helper: get() method improved. New methods keyExists() isAssoc() set() delete() random() added.
- Plugin API: Fixed Javascript and Stylesheet class. - Plugin API: Fixed Javascript and Stylesheet class.
- Plugin API: Added ability to set view file from current theme folder. - Plugin API: Added ability to set view file from current theme folder.
- New options theme_admin_name, theme_site_name, users_frontend_registration added. - New options theme_admin_name, theme_site_name, users_frontend_registration added.
- Form Helper: Custom Macros - added - Form Helper: Custom Macros - added
@@ -197,10 +279,10 @@ Monstra 1.3.0, 2012-09-01
- Improve Default Monstra theme. - Improve Default Monstra theme.
- Security: Fix Script Insertion Vulnerability. - Security: Fix Script Insertion Vulnerability.
- Blocks and Snippets plugins code fix. Issue #35, Issue #34 - Blocks and Snippets plugins code fix. Issue #35, Issue #34
- XMLDB: new method updateField() - XMLDB: new method updateField()
- Plugin API: path updates. - Plugin API: path updates.
- Dir Helper: new method size() - Dir Helper: new method size()
- Filesmanager: shows directory size. - Filesmanager: shows directory size.
- Security Helper: update safeName() method. - Security Helper: update safeName() method.
- Pages Plugin: new method children() Get children pages for a specific parent page. - Pages Plugin: new method children() Get children pages for a specific parent page.
- Update translates. - Update translates.
@@ -208,11 +290,11 @@ Monstra 1.3.0, 2012-09-01
Monstra 1.2.1, 2012-08-09 Monstra 1.2.1, 2012-08-09
------------------------ ------------------------
- Admin styles: add .error class - Admin styles: add .error class
- Fix translates - Fix translates
- Security: fix Cross Site Request Forgery - Security: fix Cross Site Request Forgery
- Site Module: fix template() function - Site Module: fix template() function
- Html Helper: fix nbsp() function - Html Helper: fix nbsp() function
- Site Module: fix template() function - Site Module: fix template() function
Monstra 1.2.0, 2012-07-03 Monstra 1.2.0, 2012-07-03
@@ -238,7 +320,7 @@ Monstra 1.1.4, 2012-06-09
------------------------ ------------------------
- Improve Monstra Error Handler - Improve Monstra Error Handler
Monstra 1.1.3, 2012-06-06 Monstra 1.1.3, 2012-06-06
------------------------ ------------------------
- Improve Monstra Error Handler - Improve Monstra Error Handler

21
LICENSE.md Normal file
View File

@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2012 - 2016 Monstra Content Management
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,12 +1,12 @@
# Monstra CMS # Monstra
Fast and small content management system written in PHP! Monstra is a modern and lightweight Content Management System.
[![Join the chat at https://gitter.im/monstra-cms/monstra](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/monstra-cms/monstra?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
## System Requirements ## System Requirements
- UNIX/Linux host Operation system: Unix, Linux, Windows, Mac OS
- PHP 5.2.3 or higher Middleware: PHP 5.3.2 or higher with PHP's [SimpleXML module](http://php.net/simplexml) and [Multibyte String module](http://php.net/mbstring)
- SimpleXML Module 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)
- Apache Mod Rewrite
- Multibyte String
## Steps to Install ## Steps to Install
1. [Download the latest version.](http://monstra.org/download) 1. [Download the latest version.](http://monstra.org/download)
@@ -21,13 +21,14 @@ Fast and small content management system written in PHP!
2. Donate to keep Monstra free. We will add you to Monstra [Sponsors Page.](http://monstra.org/contribute/sponsors) 2. Donate to keep Monstra free. We will add you to Monstra [Sponsors Page.](http://monstra.org/contribute/sponsors)
3. Develop a new plugin. 3. Develop a new plugin.
4. Create a new theme. 4. Create a new theme.
5. Find and [report issues.](https://github.com/Awilum/monstra-cms/issues) 5. Find and [report issues.](https://github.com/monstra-cms/monstra/issues)
6. Link back to [Monstra](http://monstra.org). 6. Link back to [Monstra](http://monstra.org).
## Links ## Links
- [Site](http://monstra.org) - [Site](http://monstra.org)
- [Forum](http://forum.monstra.org) - [Forum](http://forum.monstra.org)
- [Documentation](http://monstra.org/documentation) - [Documentation](http://monstra.org/documentation)
- [Github Repository](https://github.com/Awilum/monstra-cms) - [Github Repository](https://github.com/monstra-cms/monstra)
Copyright (C) 2012-2014 Romanenko Sergey / Awilum [awilum@msn.com] ## License
See [LICENSE](https://github.com/monstra-cms/monstra/blob/master/LICENSE.md)

View File

@@ -1,20 +1,17 @@
<?php <?php
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
// Main engine defines // Main engine defines
define('DS', DIRECTORY_SEPARATOR); define('DS', DIRECTORY_SEPARATOR);
define('ROOT', rtrim(str_replace(array('admin'), array(''), dirname(__FILE__)), '\\/')); define('ROOT', rtrim(str_replace(array('admin'), array(''), dirname(__FILE__)), '\\/'));
@@ -32,13 +29,9 @@ $users = new Table('users');
// Admin login // Admin login
if (Request::post('login_submit')) { if (Request::post('login_submit')) {
if (Cookie::get('login_attempts') && Cookie::get('login_attempts') >= 5) { if (Cookie::get('login_attempts') && Cookie::get('login_attempts') >= 5) {
$login_error = __('You are banned for 10 minutes. Try again later', 'users'); $login_error = __('You are banned for 10 minutes. Try again later', 'users');
} else { } else {
$user = $users->select("[login='" . trim(Request::post('login')) . "']", null); $user = $users->select("[login='" . trim(Request::post('login')) . "']", null);
if (count($user) !== 0) { if (count($user) !== 0) {
if ($user['login'] == Request::post('login')) { if ($user['login'] == Request::post('login')) {
@@ -48,6 +41,7 @@ if (Request::post('login_submit')) {
Session::set('user_id', (int) $user['id']); Session::set('user_id', (int) $user['id']);
Session::set('user_login', (string) $user['login']); Session::set('user_login', (string) $user['login']);
Session::set('user_role', (string) $user['role']); Session::set('user_role', (string) $user['role']);
Session::set('user_email', (string) $user['email']);
Request::redirect('index.php'); Request::redirect('index.php');
} }
} else { } else {
@@ -63,7 +57,6 @@ if (Request::post('login_submit')) {
} else { } else {
Cookie::set('login_attempts', 1, 600); Cookie::set('login_attempts', 1, 600);
} }
} }
} }
} else { } else {
@@ -81,6 +74,8 @@ if (Request::post('login_submit')) {
} }
} }
} }
Notification::setNow('error', $login_error);
} }
// Errors // Errors
@@ -93,10 +88,15 @@ $user_login = trim(Request::post('login'));
// Reset Password Form Submit // Reset Password Form Submit
if (Request::post('reset_password_submit')) { if (Request::post('reset_password_submit')) {
if (Option::get('captcha_installed') == 'true' && ! CryptCaptcha::check(Request::post('answer'))) {
if (Option::get('captcha_installed') == 'true' && ! CryptCaptcha::check(Request::post('answer'))) $errors['users_captcha_wrong'] = __('Captcha code is wrong', 'users'); $errors['users_captcha_wrong'] = __('Captcha code is wrong', 'users');
if ($user_login == '') $errors['users_empty_field'] = __('Required field', 'users'); }
if ($user_login != '' && ! $users->select("[login='".$user_login."']")) $errors['users_user_doesnt_exists'] = __('This user doesnt exist', 'users'); if ($user_login == '') {
$errors['users_empty_field'] = __('Required field', 'users');
}
if ($user_login != '' && ! $users->select("[login='".$user_login."']")) {
$errors['users_user_doesnt_exists'] = __('This user doesnt exist', 'users');
}
if (count($errors) == 0) { if (count($errors) == 0) {
@@ -116,13 +116,13 @@ if (Request::post('reset_password_submit')) {
$mail->AddReplyTo(Option::get('system_email')); $mail->AddReplyTo(Option::get('system_email'));
$mail->AddAddress($user['email'], $user['login']); $mail->AddAddress($user['email'], $user['login']);
$mail->Subject = __('Your login details for :site_name', 'users', array(':site_name' => $site_name)); $mail->Subject = __('Your login details for :site_name', 'users', array(':site_name' => $site_name));
$mail->MsgHTML(View::factory('box/users/views/emails/layout_email') $mail->MsgHTML(View::factory('box/emails/views/emails/email_layout')
->assign('site_url', $site_url) ->assign('site_url', $site_url)
->assign('site_name', $site_name) ->assign('site_name', $site_name)
->assign('user_id', $user['id']) ->assign('user_id', $user['id'])
->assign('user_login', $user['login']) ->assign('user_login', $user['login'])
->assign('new_hash', $new_hash) ->assign('new_hash', $new_hash)
->assign('view', 'reset_password_email') ->assign('email_template', 'reset-password')
->render()); ->render());
$mail->Send(); $mail->Send();
@@ -131,8 +131,7 @@ if (Request::post('reset_password_submit')) {
Notification::set('reset_password', 'reset_password'); Notification::set('reset_password', 'reset_password');
// Redirect to password-reset page // Redirect to password-reset page
Request::redirect(Site::url().'admin'); Request::redirect(Site::url().'/admin');
} }
Notification::setNow('reset_password', 'reset_password'); Notification::setNow('reset_password', 'reset_password');
@@ -157,7 +156,7 @@ if ($is_admin) {
if (Request::get('id')) { if (Request::get('id')) {
$area = Request::get('id'); $area = Request::get('id');
} else { } else {
Request::redirect('index.php?id=pages'); Request::redirect(Site::url().'/admin/index.php?id=dashboard');
} }
$plugins_registered = Plugin::$plugins; $plugins_registered = Plugin::$plugins;
@@ -180,12 +179,10 @@ if ($is_admin) {
// Backend post render // Backend post render
Action::run('admin_post_render'); Action::run('admin_post_render');
} else { } else {
// Display login template // Display login template
require 'themes'. DS . Option::get('theme_admin_name') . DS . 'login.template.php'; require 'themes'. DS . Option::get('theme_admin_name') . DS . 'login.template.php';
} }
// Flush (send) the output buffer and turn off output buffering // Flush (send) the output buffer and turn off output buffering

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -2,135 +2,163 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"> <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> <title>Monstra :: <?php echo __('Administration', 'system'); ?></title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Monstra admin area" /> <meta name="description" content="Monstra Admin Area" />
<link rel="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" /> <link rel="shortcut icon" href="<?php echo Option::get('siteurl'); ?>/favicon.ico" type="image/x-icon" />
<!-- Styles --> <!-- Styles -->
<?php Stylesheet::add('public/assets/css/bootstrap.css', 'backend', 1); ?> <link rel="stylesheet" href="<?php echo Site::url(); ?>/public/assets/css/bootstrap.css" type="text/css" />
<?php Stylesheet::add('public/assets/css/bootstrap-lightbox.css', 'backend', 2); ?> <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/bootstrap-fileupload.css', 'backend', 3); ?>
<?php Stylesheet::add('public/assets/css/bootstrap-responsive.css', 'backend', 4); ?> <?php Stylesheet::add('public/assets/css/icheck-blue.css', 'backend', 4); ?>
<?php Stylesheet::add('admin/themes/default/css/default.css', 'backend', 5); ?> <?php Stylesheet::add('admin/themes/default/css/default.css', 'backend', 5); ?>
<?php Stylesheet::load(); ?> <?php Stylesheet::load(); ?>
<!-- JavaScripts --> <!-- JavaScripts -->
<?php Javascript::add('public/assets/js/jquery.js', 'backend', 1); ?> <script src="<?php echo Site::url(); ?>/public/assets/js/jquery.min.js"></script>
<?php Javascript::add('public/assets/js/bootstrap.js', 'backend', 2); ?> <script src="<?php echo Site::url(); ?>/public/assets/js/bootstrap.min.js"></script>
<?php Javascript::add('public/assets/js/bootstrap-lightbox.js', 'backend', 3); ?> <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('public/assets/js/bootstrap-fileupload.js', 'backend', 4); ?>
<?php Javascript::add('admin/themes/default/js/default.js', 'backend', 5); ?> <?php Javascript::add('admin/themes/default/js/default.js', 'backend', 5); ?>
<?php Javascript::load(); ?> <?php Javascript::load(); ?>
<?php Action::run('admin_header'); ?> <?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]> <!--[if lt IE 9]>
<link rel="stylesheet" href="css/ie.css" type="text/css" media="screen" /> <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7/html5shiv.js"></script>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.js"></script>
<![endif]--> <![endif]-->
</head>
</head> <body class="page-<?php echo Request::get('id'); ?>">
<body>
<!-- Block_topbar --> <nav class="navbar navbar-default navbar-inverse" role="navigation">
<div class="monstra-header"> <div class="container">
<div class="monstra-header-inner"> <div class="navbar-header">
<div class="container-fluid"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<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> <span class="sr-only">Toggle navigation</span>
<p class="pull-right"> <span class="icon-bar"></span>
<?php Navigation::draw('top', Navigation::TOP); ?> <span class="icon-bar"></span>
</p> <span class="icon-bar"></span>
</div> </button>
</div> <a class="navbar-brand" href="<?php echo Site::url(); ?>/admin/index.php?id=dashboard">MONSTRA</a>
</div> </div>
<!-- /Block_topbar -->
<!-- Block_container --> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<div class="container-fluid"> <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>
<div class="row-fluid"> <li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo __('Content', 'pages'); ?> <b class="caret"></b></a>
<!-- Block_sidebar --> <ul class="dropdown-menu">
<?php Navigation::draw('content'); ?>
<div class="span2 monstra-menu-sidebar"> </ul>
</li>
<div class="hidden-desktop"> <?php if (Session::exists('user_role') && in_array(Session::get('user_role'), array('admin'))) { ?>
<select class="input-block-level" name="sections" id="sections"> <li class="dropdown">
<?php <a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo __('Extends', 'system'); ?> <b class="caret"></b></a>
Navigation::getDropdown('content'); <ul class="dropdown-menu">
Navigation::getDropdown('extends'); <?php Navigation::draw('extends'); ?>
Navigation::getDropdown('system'); </ul>
?> </li>
</select> <?php } ?>
</div> <li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo __('System', 'system'); ?> <b class="caret"></b></a>
<div class="hidden-phone hidden-tablet"> <ul class="dropdown-menu">
<?php Navigation::draw('system'); ?>
<h3><?php echo __('Content', 'pages'); ?></h3> </ul>
<ul> </li>
<?php Navigation::draw('content'); ?> <li class="dropdown">
</ul> <a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo __('Help', 'system'); ?> <b class="caret"></b></a>
<div class="monstra-menu-category-separator"></div> <ul class="dropdown-menu">
<?php if (Session::exists('user_role') && in_array(Session::get('user_role'), array('admin'))) { ?> <li><a href="http://monstra.org/documentation" target="_blank"><?php echo __('Documentation', 'system'); ?></a></li>
<h3><?php echo __('Extends', 'system'); ?></h3> <?php if (Option::get('language') == 'ru') { ?>
<ul> <li><a href="http://ru.forum.monstra.org" target="_blank"><?php echo __('Official Support Forum', 'system'); ?></a></li>
<?php Navigation::draw('extends'); ?> <?php } else { ?>
</ul> <li><a href="http://forum.monstra.org" target="_blank"><?php echo __('Official Support Forum', 'system'); ?></a></li>
<div class="monstra-menu-category-separator"></div>
<?php } ?> <?php } ?>
<h3><?php echo __('System', 'system'); ?></h3> </ul>
<ul> </li>
<?php Navigation::draw('system'); ?> </ul>
</ul> <ul class="nav navbar-nav navbar-right">
<li><a href="<?php echo Site::url(); ?>" target="_blank"><?php echo __('View Site', 'system'); ?></a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo Session::get('user_login'); ?> <img src="<?php echo Users::getGravatarURL(Session::get('user_email'), 28); ?>" alt=""> <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="<?php echo Site::url(); ?>/admin/index.php?id=users&action=edit&user_id=<?php echo Session::get('user_id'); ?>"><?php echo __('Profile', 'users')?></a></li>
<li><a href="<?php echo Site::url(); ?>/admin/?logout=do"><?php echo __('Log Out', 'users'); ?></a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
</div> <div class="container">
</div> <?php
<!-- /Block_sidebar --> // Monstra Notifications
Notification::get('success') AND Alert::success(Notification::get('success'));
<!-- Block_content --> Notification::get('warning') AND Alert::warning(Notification::get('warning'));
<div class="span10 monstra-content"> 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>
<div><?php Action::run('admin_post_template'); ?></div>
</div>
<!-- /Block_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>
<div><?php Action::run('admin_post_template'); ?></div>
<!-- Block_footer --> </div>
<footer> <div class="margin-top-1 margin-bottom-1 hidden-md"></div>
<p class="pull-right"> <footer class="container visible-md visible-lg">
<span style="border-top:1px solid #E0E0E0; padding-top:10px;"> <p class="pull-right">
<span class="hidden-phone"> <span>
<a href="http://forum.monstra.org" target="_blank"><?php echo __('Official Support Forum', 'system'); ?></a> / <a href="http://monstra.org" target="_blank">Monstra</a> was made by <a href="http://awilum.github.io" target="_blank" class="highlight">Sergey Romanenko</a> and is maintained by <a href="https://github.com/monstra-cms/monstra/network/members" target="_blank" class="highlight">Monstra Community</a> / © 2012 - 2016 <a href="http://monstra.org/about/license" target="_blank">Monstra</a> <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?>
<a href="http://monstra.org/documentation" target="_blank"><?php echo __('Documentation', 'system'); ?></a> / </span>
</span> </p>
© 2012 - 2014 <a href="http://monstra.org" target="_blank">Monstra</a> <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?> </footer>
</span>
</p>
</footer>
<!-- /Block_footer -->
</div>
<!-- /Block_container -->
</body> </body>
</html> </html>

View File

@@ -1,26 +1,23 @@
/** /**
* Monstra JS module * Monstra JS module
* @package Monstra *
* @author Romanenko Sergey / Awilum * This source file is part of the Monstra Engine. More information,
* @copyright 2012 Romanenko Sergey / Awilum * documentation and tutorials can be found at http://monstra.org
* @version $Id$ *
* @since 1.0.0 * @package Monstra
* @license http://opensource.org/licenses/gpl-license.php GNU Public License *
* Monstra is free software. This version may have been modified pursuant * @author Romanenko Sergey / Awilum <awilum@msn.com>
* to the GNU General Public License, and as distributed it includes or * @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* is derivative of works licensed under the GNU General Public License or *
* other free or open source software licenses. * For the full copyright and license information, please view the LICENSE
* See COPYING.txt for copyright notices and details. * file that was distributed with this source code.
* @filesource
*/ */
/* Confirm delete */ /* Confirm delete */
function confirmDelete(msg){var data=confirm(msg+" ?"); return data;} function confirmDelete(msg){var data=confirm(msg+" ?"); return data;}
$(document).ready(function() { /* Messanger */
/* DropDown Menu for Mobile Devices */ Messenger.options = {
$("#sections").change(function(){ extraClasses: 'messenger-fixed messenger-on-bottom messenger-on-right',
window.location = $('#sections option:selected').attr('rel'); theme: 'flat'
}); }
});

View File

@@ -5,22 +5,28 @@
<title>Monstra :: <?php echo __('Administration', 'system'); ?></title> <title>Monstra :: <?php echo __('Administration', 'system'); ?></title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Monstra Admin Area"> <meta name="description" content="Monstra Admin Area">
<link rel="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" /> <link rel="shortcut icon" href="<?php echo Option::get('siteurl'); ?>/favicon.ico" type="image/x-icon" />
<!-- Styles --> <!-- Styles -->
<?php Stylesheet::add('public/assets/css/bootstrap.css', 'backend', 1); ?> <link rel="stylesheet" href="<?php echo Site::url(); ?>/public/assets/css/bootstrap.css" type="text/css" />
<link rel="stylesheet" href="<?php echo Site::url(); ?>/public/assets/css/messenger.css" type="text/css" />
<link rel="stylesheet" href="<?php echo Site::url(); ?>/public/assets/css/messenger-theme-flat.css" type="text/css" />
<?php Stylesheet::add('public/assets/css/bootstrap-lightbox.css', 'backend', 2); ?> <?php Stylesheet::add('public/assets/css/bootstrap-lightbox.css', 'backend', 2); ?>
<?php Stylesheet::add('public/assets/css/bootstrap-responsive.css', 'backend', 3); ?> <?php Stylesheet::add('public/assets/css/bootstrap-fileupload.css', 'backend', 3); ?>
<?php Stylesheet::add('admin/themes/default/css/default.css', 'backend', 4); ?> <?php Stylesheet::add('admin/themes/default/css/default.css', 'backend', 5); ?>
<?php Stylesheet::load(); ?> <?php Stylesheet::load(); ?>
<!-- JavaScripts --> <!-- JavaScripts -->
<?php Javascript::add('public/assets/js/jquery.js', 'backend', 1); ?> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<?php Javascript::add('public/assets/js/bootstrap.js', 'backend', 2); ?> <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-lightbox.js', 'backend', 3); ?>
<?php Javascript::add('admin/themes/default/js/default.js', 'backend', 4); ?> <?php Javascript::add('public/assets/js/bootstrap-fileupload.js', 'backend', 4); ?>
<?php Javascript::add('admin/themes/default/js/default.js', 'backend', 5); ?>
<?php Javascript::load(); ?> <?php Javascript::load(); ?>
<script type="text/javascript"> <script type="text/javascript">
$().ready(function () { $().ready(function () {
<?php if (Notification::get('reset_password') == 'reset_password') { ?> <?php if (Notification::get('reset_password') == 'reset_password') { ?>
@@ -45,47 +51,56 @@
<?php Action::run('admin_header'); ?> <?php Action::run('admin_header'); ?>
<!--[if lt IE 9]> <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<link rel="stylesheet" href="css/ie.css" type="text/css" media="screen" /> <!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7/html5shiv.js"></script>
<![endif]--> <script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.js"></script>
<![endif]-->
</head> </head>
<body class="login-body"> <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 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="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"> <div class="administration-area well">
<hr>
<div> <div>
<h2 style="text-align:center;"><?php echo __('Administration', 'system'); ?></h2><br />
<form method="post"> <form method="post">
<label><?php echo __('Username', 'users'); ?></label> <div class="form-group">
<input class="input-xlarge" name="login" type="text" /> <label><?php echo __('Username', 'users'); ?></label>
<input class="form-control" name="login" type="text" />
<label><?php echo __('Password', 'users'); ?></label> </div>
<input class="input-xlarge" name="password" type="password" /> <div class="form-group">
<br /> <label><?php echo __('Password', 'users'); ?></label>
<?php if (isset($login_error) && $login_error !== '') { ?><div class="alert alert-error"><?php echo $login_error; ?></div><?php } ?> <input class="form-control" name="password" type="password" />
<input type="submit" name="login_submit" class="btn" value="<?php echo __('Log In', 'users'); ?>" /> </div>
<div class="form-group">
<input type="submit" name="login_submit" class="btn btn-primary" value="<?php echo __('Log In', 'users'); ?>" />
</div>
</form> </form>
</div> </div>
</div> </div>
<div class="reset-password-area"> <div class="reset-password-area well">
<hr>
<div> <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"> <form method="post">
<div class="form-group">
<label><?php echo __('Username', 'users'); ?></label> <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') { ?> <?php if (Option::get('captcha_installed') == 'true') { ?>
<div class="form-group">
<label><?php echo __('Captcha', 'users'); ?></label> <label><?php echo __('Captcha', 'users'); ?></label>
<input type="text" name="answer" class="input-xlarge"> <input type="text" name="answer" class="form-control">
<br>
<?php CryptCaptcha::draw(); ?> <?php CryptCaptcha::draw(); ?>
</div>
<?php } ?> <?php } ?>
<br> <br>
<?php <?php
@@ -95,24 +110,26 @@
} }
} }
?> ?>
<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> </form>
</div> </div>
</div> </div>
<hr> </div>
<div>
<div style="text-align:center;"> <div class="login-footer">
<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> <div class="text-center">
<a class="small-grey-text administration-btn" href="javascript:;"><?php echo __('Administration >', 'system');?></a> <a href="<?php echo Option::get('siteurl'); ?>"><?php echo __('Back to Website', 'system');?></a> -
</div> <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">
© 2012 - 2016 <a href="http://monstra.org/about/license" target="_blank">Monstra</a> <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?>
</div> </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>
</body> </body>
</html> </html>

View File

@@ -1,7 +1,7 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra CMS Defines * Monstra Defines
*/ */
/** /**
@@ -91,3 +91,4 @@ define('MONSTRA_GZIP', false);
//define('MONSTRA_DB_DSN', 'mysql:dbname=monstra;host=localhost;port=3306'); //define('MONSTRA_DB_DSN', 'mysql:dbname=monstra;host=localhost;port=3306');
//define('MONSTRA_DB_USER', 'root'); //define('MONSTRA_DB_USER', 'root');
//define('MONSTRA_DB_PASSWORD', 'password'); //define('MONSTRA_DB_PASSWORD', 'password');

View File

@@ -1,20 +1,17 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
class Alert class Alert
{ {
/** /**
@@ -35,16 +32,21 @@ class Alert
* </code> * </code>
* *
* @param string $message Message * @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 // Redefine vars
$message = (string) $message; $message = (string) $message;
$time = (int) $time; $seconds = (int) $seconds;
echo '<div class="alert alert-info">'.$message.'</div> echo '<script type="text/javascript">
<script type="text/javascript">setTimeout(\'$(".alert").slideUp("slow")\', '.$time.'); </script>'; Messenger().post({
type: "success",
message : "'.$message.'",
hideAfter: '.$seconds.'
});
</script>';
} }
/** /**
@@ -55,16 +57,21 @@ class Alert
* </code> * </code>
* *
* @param string $message Message * @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 // Redefine vars
$message = (string) $message; $message = (string) $message;
$time = (int) $time; $seconds = (int) $seconds;
echo '<div class="alert alert-warning">'.$message.'</div> echo '<script type="text/javascript">
<script type="text/javascript">setTimeout(\'$(".alert").slideUp("slow")\', '.$time.'); </script>'; Messenger().post({
type: "info",
message : "'.$message.'",
hideAfter: '.$seconds.'
});
</script>';
} }
/** /**
@@ -75,16 +82,20 @@ class Alert
* </code> * </code>
* *
* @param string $message Message * @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 // Redefine vars
$message = (string) $message; $message = (string) $message;
$time = (int) $time; $seconds = (int) $seconds;
echo '<div class="alert alert-error">'.$message.'</div> echo '<script type="text/javascript">
<script type="text/javascript">setTimeout(\'$(".alert").slideUp("slow")\', '.$time.'); </script>'; Messenger().post({
type: "error",
message : "'.$message.'",
hideAfter: '.$seconds.'
});
</script>';
} }
} }

View File

@@ -1,19 +1,11 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* Monstra - Content Management System. * @package Monstra
* Site: www.mostra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* Copyright (C) 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com> * @link http://monstra.org
*
* 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
@@ -39,7 +31,8 @@ class Monstra
/** /**
* The version of Monstra * The version of Monstra
*/ */
const VERSION = '2.3.0'; const VERSION = '3.0.3';
/** /**
* Monstra environment * Monstra environment
@@ -84,7 +77,9 @@ class Monstra
* Compress HTML with gzip * Compress HTML with gzip
*/ */
if (MONSTRA_GZIP) { if (MONSTRA_GZIP) {
if ( ! ob_start("ob_gzhandler")) ob_start(); if (! ob_start("ob_gzhandler")) {
ob_start();
}
} else { } else {
ob_start(); ob_start();
} }
@@ -93,16 +88,19 @@ class Monstra
* Send default header and set internal encoding * Send default header and set internal encoding
*/ */
header('Content-Type: text/html; charset=UTF-8'); header('Content-Type: text/html; charset=UTF-8');
function_exists('mb_language') AND mb_language('uni'); function_exists('mb_language') and mb_language('uni');
function_exists('mb_regex_encoding') AND mb_regex_encoding('UTF-8'); function_exists('mb_regex_encoding') and mb_regex_encoding('UTF-8');
function_exists('mb_internal_encoding') AND mb_internal_encoding('UTF-8'); function_exists('mb_internal_encoding') and mb_internal_encoding('UTF-8');
/** /**
* Gets the current configuration setting of magic_quotes_gpc * Gets the current configuration setting of magic_quotes_gpc
* and kill magic quotes * and kill magic quotes
*/ */
if (get_magic_quotes_gpc()) { if (get_magic_quotes_gpc()) {
function stripslashesGPC(&$value) { $value = stripslashes($value); } function stripslashesGPC(&$value)
{
$value = stripslashes($value);
}
array_walk_recursive($_GET, 'stripslashesGPC'); array_walk_recursive($_GET, 'stripslashesGPC');
array_walk_recursive($_POST, 'stripslashesGPC'); array_walk_recursive($_POST, 'stripslashesGPC');
array_walk_recursive($_COOKIE, 'stripslashesGPC'); array_walk_recursive($_COOKIE, 'stripslashesGPC');
@@ -119,7 +117,7 @@ class Monstra
/** /**
* Define Monstra Folder for Gelato Logs * Define Monstra Folder for Gelato Logs
*/ */
define ('GELATO_LOGS_PATH', LOGS); define('GELATO_LOGS_PATH', LOGS);
/** /**
* Include Gelato Library * Include Gelato Library
@@ -188,7 +186,7 @@ class Monstra
} }
/** /**
* Auto cleanup if MONSTRA_DEBUG is TRUE * Auto cleanup if DEVELOPMENT environment
*/ */
if (Monstra::$environment == Monstra::DEVELOPMENT) { if (Monstra::$environment == Monstra::DEVELOPMENT) {
Monstra::cleanTmp(); Monstra::cleanTmp();
@@ -208,7 +206,11 @@ class Monstra
* Set default timezone * Set default timezone
*/ */
@ini_set('date.timezone', Option::get('timezone')); @ini_set('date.timezone', Option::get('timezone'));
if (function_exists('date_default_timezone_set')) date_default_timezone_set(Option::get('timezone')); else putenv('TZ='.Option::get('timezone')); if (function_exists('date_default_timezone_set')) {
date_default_timezone_set(Option::get('timezone'));
} else {
putenv('TZ='.Option::get('timezone'));
}
/** /**
* Sanitize URL to prevent XSS - Cross-site scripting * Sanitize URL to prevent XSS - Cross-site scripting
@@ -238,7 +240,9 @@ class Monstra
/** /**
* Init site module * Init site module
*/ */
if ( ! BACKEND) Site::init(); if (! BACKEND) {
Site::init();
}
} }
/** /**
@@ -299,7 +303,6 @@ class Monstra
} else { } else {
throw new RuntimeException("The pluggable shortcodes.php file does not exist."); throw new RuntimeException("The pluggable shortcodes.php file does not exist.");
} }
} }
/** /**
@@ -308,10 +311,18 @@ class Monstra
public static function cleanTmp() public static function cleanTmp()
{ {
// Cleanup minify // Cleanup minify
if (count($files = File::scan(MINIFY, array('css', 'js', 'php'))) > 0) foreach ($files as $file) File::delete(MINIFY . DS . $file); if (count($files = File::scan(MINIFY, array('css', 'js', 'php'))) > 0) {
foreach ($files as $file) {
File::delete(MINIFY . DS . $file);
}
}
// Cleanup cache // Cleanup cache
if (count($namespaces = Dir::scan(CACHE)) > 0) foreach ($namespaces as $namespace) Dir::delete(CACHE . DS . $namespace); if (count($namespaces = Dir::scan(CACHE)) > 0) {
foreach ($namespaces as $namespace) {
Dir::delete(CACHE . DS . $namespace);
}
}
} }
/** /**
@@ -321,8 +332,9 @@ class Monstra
*/ */
public static function init() public static function init()
{ {
if ( ! isset(self::$instance)) self::$instance = new Monstra(); if (! isset(self::$instance)) {
self::$instance = new Monstra();
}
return self::$instance; return self::$instance;
} }
} }

View File

@@ -1,20 +1,17 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
class Option class Option
{ {
/** /**
@@ -38,7 +35,9 @@ class Option
*/ */
public static function init() public static function init()
{ {
if ( ! isset(self::$instance)) self::$instance = new Option(); if (! isset(self::$instance)) {
self::$instance = new Option();
}
return self::$instance; return self::$instance;
} }
@@ -176,5 +175,4 @@ class Option
// Check if option exists // Check if option exists
return (count(Option::$options->select('[name="'.$option.'"]', null)) > 0) ? true : false; return (count(Option::$options->select('[name="'.$option.'"]', null)) > 0) ? true : false;
} }
} }

View File

@@ -1,20 +1,17 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
class Action class Action
{ {
/** /**
@@ -47,7 +44,7 @@ class Action
* </code> * </code>
* *
* @param string $action_name Action name * @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 integer $priority Priority. Default is 10
* @param array $args Arguments * @param array $args Arguments
*/ */
@@ -56,7 +53,7 @@ class Action
// Hooks a function on to a specific action. // Hooks a function on to a specific action.
Action::$actions[] = array( Action::$actions[] = array(
'action_name' => (string) $action_name, 'action_name' => (string) $action_name,
'function' => (string) $added_function, 'function' => $added_function,
'priority' => (int) $priority, 'priority' => (int) $priority,
'args' => $args 'args' => $args
); );
@@ -102,23 +99,15 @@ class Action
} else { } else {
call_user_func_array($action['function'], $args); call_user_func_array($action['function'], $args);
} }
} else { } else {
if ($return) { if ($return) {
return call_user_func_array($action['function'], $action['args']); return call_user_func_array($action['function'], $action['args']);
} else { } else {
call_user_func_array($action['function'], $action['args']); call_user_func_array($action['function'], $action['args']);
} }
} }
} }
} }
} }
} }
} }

View File

@@ -1,15 +1,11 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
@@ -17,5 +13,7 @@
class Backend class Backend
{ {
public static function main() { } public static function main()
{
}
} }

View File

@@ -1,20 +1,17 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
class Filter class Filter
{ {
/** /**
@@ -52,12 +49,12 @@ class Filter
$args = array_slice(func_get_args(), 2); $args = array_slice(func_get_args(), 2);
if ( ! isset(Filter::$filters[$filter_name])) { if (! isset(Filter::$filters[$filter_name])) {
return $value; return $value;
} }
foreach (Filter::$filters[$filter_name] as $priority => $functions) { foreach (Filter::$filters[$filter_name] as $priority => $functions) {
if ( ! is_null($functions)) { if (! is_null($functions)) {
foreach ($functions as $function) { foreach ($functions as $function) {
$all_args = array_merge(array($value), $args); $all_args = array_merge(array($value), $args);
$function_name = $function['function']; $function_name = $function['function'];
@@ -91,7 +88,7 @@ class Filter
* </code> * </code>
* *
* @param string $filter_name The name of the filter to hook the $function_to_add to. * @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 $priority Function to add priority - default is 10.
* @param integer $accepted_args The number of arguments the function accept default is 1. * @param integer $accepted_args The number of arguments the function accept default is 1.
* @return boolean * @return boolean
@@ -100,7 +97,7 @@ class Filter
{ {
// Redefine arguments // Redefine arguments
$filter_name = (string) $filter_name; $filter_name = (string) $filter_name;
$function_to_add = (string) $function_to_add; $function_to_add = $function_to_add;
$priority = (int) $priority; $priority = (int) $priority;
$accepted_args = (int) $accepted_args; $accepted_args = (int) $accepted_args;
@@ -120,5 +117,4 @@ class Filter
return true; return true;
} }
} }

View File

@@ -1,27 +1,40 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
class Frontend class Frontend
{ {
public static function main() { } public static function main()
public static function title() { return ''; } {
public static function description() { return ''; } }
public static function keywords() { return ''; } public static function title()
public static function template() { return 'index'; } {
public static function content() { return ''; } return '';
}
public static function description()
{
return '';
}
public static function keywords()
{
return '';
}
public static function template()
{
return 'index';
}
public static function content()
{
return '';
}
} }

View File

@@ -1,20 +1,17 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
class I18n class I18n
{ {
/** /**
@@ -36,8 +33,10 @@ class I18n
'fi' => 'Suomi', 'fi' => 'Suomi',
'fr' => 'Français', 'fr' => 'Français',
'gl' => 'Galego', 'gl' => 'Galego',
'ka-ge' => 'Georgian',
'hu' => 'Magyar', 'hu' => 'Magyar',
'it' => 'Italiano', 'it' => 'Italiano',
'id' => 'Bahasa Indonesia',
'ja' => '日本語', 'ja' => '日本語',
'lt' => 'Lietuvių', 'lt' => 'Lietuvių',
'nl' => 'Nederlands', 'nl' => 'Nederlands',
@@ -49,10 +48,10 @@ class I18n
'sk' => 'Slovenčina', 'sk' => 'Slovenčina',
'sl' => 'Slovenščina', 'sl' => 'Slovenščina',
'sv' => 'Svenska', 'sv' => 'Svenska',
'sr-yu' => 'Serbian', 'sr' => 'Srpski',
'tr' => 'Türkçe', 'tr' => 'Türkçe',
'uk' => 'Українська', 'uk' => 'Українська',
'zh' => '中文', 'zh-cn' => '简体中文',
); );
/** /**
@@ -76,7 +75,9 @@ class I18n
*/ */
public static function init($locale) public static function init($locale)
{ {
if ( ! isset(self::$instance)) self::$instance = new I18n($locale); if (! isset(self::$instance)) {
self::$instance = new I18n($locale);
}
return self::$instance; return self::$instance;
} }
@@ -115,7 +116,6 @@ class I18n
// Loop through each installed plugin // Loop through each installed plugin
foreach ($records as $record) { foreach ($records as $record) {
if (is_dir(ROOT . DS . dirname($record['location']) . DS . 'languages')) { if (is_dir(ROOT . DS . dirname($record['location']) . DS . 'languages')) {
// Init var // Init var
@@ -126,7 +126,6 @@ class I18n
// Merge the language strings into the sub table // Merge the language strings into the sub table
$t = array_merge($t, include ROOT . DS . dirname($record['location']) . DS . 'languages' . DS . $locale . '.lang.php'); $t = array_merge($t, include ROOT . DS . dirname($record['location']) . DS . 'languages' . DS . $locale . '.lang.php');
} }
// Append the sub table, preventing less specific language files from overloading more specific files // Append the sub table, preventing less specific language files from overloading more specific files
@@ -163,9 +162,12 @@ class I18n
$string = (string) $string; $string = (string) $string;
// Return string // Return string
if (isset(I18n::$dictionary[$namespace][$string])) return I18n::$dictionary[$namespace][$string]; else return $string; if (isset(I18n::$dictionary[$namespace][$string])) {
return I18n::$dictionary[$namespace][$string];
} else {
return $string;
}
} }
} }
/** /**

View File

@@ -1,20 +1,17 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
class Javascript class Javascript
{ {
/** /**
@@ -66,7 +63,6 @@ class Javascript
// Load javascripts // Load javascripts
if (count(Javascript::$javascripts) > 0) { if (count(Javascript::$javascripts) > 0) {
$backend_buffer = ''; $backend_buffer = '';
$backend_regenerate = false; $backend_regenerate = false;
@@ -80,8 +76,8 @@ class Javascript
// Build backend site javascript // Build backend site javascript
foreach ($javascripts as $javascript) { foreach ($javascripts as $javascript) {
if ((file_exists(ROOT . DS . $javascript['file'])) and (($javascript['load'] == 'backend') or ($javascript['load'] == 'both')) ) { if ((file_exists(ROOT . DS . $javascript['file'])) and (($javascript['load'] == 'backend') or ($javascript['load'] == 'both'))) {
if ( ! file_exists($backend_site_js_path) or filemtime(ROOT . DS . $javascript['file']) > filemtime($backend_site_js_path)) { if (! file_exists($backend_site_js_path) or filemtime(ROOT . DS . $javascript['file']) > filemtime($backend_site_js_path)) {
$backend_regenerate = true; $backend_regenerate = true;
break; break;
} }
@@ -91,20 +87,19 @@ class Javascript
// Regenerate site javascript // Regenerate site javascript
if ($backend_regenerate) { if ($backend_regenerate) {
foreach ($javascripts as $javascript) { foreach ($javascripts as $javascript) {
if ((file_exists(ROOT . DS . $javascript['file'])) and (($javascript['load'] == 'backend') or ($javascript['load'] == 'both')) ) { 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); file_put_contents($backend_site_js_path, $backend_buffer);
$backend_regenerate = false; $backend_regenerate = false;
} }
} else { } else {
// Build frontend site javascript // Build frontend site javascript
foreach ($javascripts as $javascript) { foreach ($javascripts as $javascript) {
if ((file_exists(ROOT . DS . $javascript['file'])) and (($javascript['load'] == 'frontend') or ($javascript['load'] == 'both')) ) { if ((file_exists(ROOT . DS . $javascript['file'])) and (($javascript['load'] == 'frontend') or ($javascript['load'] == 'both'))) {
if ( ! file_exists($frontend_site_js_path) or filemtime(ROOT . DS . $javascript['file']) > filemtime($frontend_site_js_path)) { if (! file_exists($frontend_site_js_path) or filemtime(ROOT . DS . $javascript['file']) > filemtime($frontend_site_js_path)) {
$frontend_regenerate = true; $frontend_regenerate = true;
break; break;
} }
@@ -114,23 +109,29 @@ class Javascript
// Regenerate site javascript // Regenerate site javascript
if ($frontend_regenerate) { if ($frontend_regenerate) {
foreach ($javascripts as $javascript) { foreach ($javascripts as $javascript) {
if ((file_exists(ROOT . DS . $javascript['file'])) and (($javascript['load'] == 'frontend') or ($javascript['load'] == 'both')) ) { 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); file_put_contents($frontend_site_js_path, $frontend_buffer);
$frontend_regenerate = false; $frontend_regenerate = false;
} }
} }
// Render // Render
if (BACKEND) { 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 { } 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);
}
} }

View File

@@ -1,20 +1,17 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
class Navigation class Navigation
{ {
/** /**
@@ -83,7 +80,11 @@ class Navigation
foreach ($items as $item) { foreach ($items as $item) {
// If current plugin id == selected item id then set class to current // 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 (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 current category == item category and navigation type is left them draw this item
if ($item['category'] == $category && $item['type'] == Navigation::LEFT) { if ($item['category'] == $category && $item['type'] == Navigation::LEFT) {
@@ -133,7 +134,11 @@ class Navigation
foreach ($items as $item) { foreach ($items as $item) {
// If current plugin id == selected item id then set class to current // 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 (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 current category == item category and navigation type is left them draw this item
if ($item['category'] == $category && $item['type'] == Navigation::LEFT) { if ($item['category'] == $category && $item['type'] == Navigation::LEFT) {
@@ -158,7 +163,6 @@ class Navigation
} }
} }
} }
} }
/** /**
@@ -179,7 +183,11 @@ class Navigation
foreach ($items as $item) { foreach ($items as $item) {
// If current plugin id == selected item id then set class to current // 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 (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 current category == item category and navigation type is left them draw this item
if ($item['category'] == $category && $item['type'] == Navigation::LEFT) { if ($item['category'] == $category && $item['type'] == Navigation::LEFT) {
@@ -191,5 +199,4 @@ class Navigation
} }
} }
} }
} }

View File

@@ -1,20 +1,17 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
class Plugin class Plugin
{ {
/** /**
@@ -45,7 +42,9 @@ class Plugin
*/ */
public static function init() public static function init()
{ {
if ( ! isset(self::$instance)) self::$instance = new Plugin(); if (! isset(self::$instance)) {
self::$instance = new Plugin();
}
return self::$instance; return self::$instance;
} }
@@ -102,7 +101,7 @@ class Plugin
if (BACKEND) { if (BACKEND) {
// Plugin admin folder // Plugin admin folder
if ( ! empty($alt_folder)) { if (! empty($alt_folder)) {
$folder = $alt_folder . DS . strtolower($plug); $folder = $alt_folder . DS . strtolower($plug);
} else { } else {
$folder = strtolower($plug); $folder = strtolower($plug);
@@ -157,7 +156,11 @@ class Plugin
$id = strtolower(basename($file, '.plugin.php')); $id = strtolower(basename($file, '.plugin.php'));
// Set plugin privilege 'box' if $box is true // Set plugin privilege 'box' if $box is true
if ($box) $privilege = 'box'; else $privilege = ''; if ($box) {
$privilege = 'box';
} else {
$privilege = '';
}
// Register plugin in global plugins array. // Register plugin in global plugins array.
Plugin::$plugins[$id] = array( Plugin::$plugins[$id] = array(
@@ -175,9 +178,8 @@ class Plugin
// Example: // Example:
// www.example.org/guestbook // www.example.org/guestbook
// www.example.org/news // www.example.org/news
if ( ! empty($component)) { if (! empty($component)) {
Plugin::$components[] = $component; Plugin::$components[] = $component;
} }
} }
} }

View File

@@ -1,20 +1,17 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
class Stylesheet class Stylesheet
{ {
/** /**
@@ -66,7 +63,6 @@ class Stylesheet
// Load stylesheets // Load stylesheets
if (count(Stylesheet::$stylesheets) > 0) { if (count(Stylesheet::$stylesheets) > 0) {
$backend_buffer = ''; $backend_buffer = '';
$backend_regenerate = false; $backend_regenerate = false;
@@ -80,8 +76,8 @@ class Stylesheet
// Build backend site stylesheets // Build backend site stylesheets
foreach ($stylesheets as $stylesheet) { foreach ($stylesheets as $stylesheet) {
if ((file_exists(ROOT . DS . $stylesheet['file'])) and (($stylesheet['load'] == 'backend') or ($stylesheet['load'] == 'both')) ) { if ((file_exists(ROOT . DS . $stylesheet['file'])) and (($stylesheet['load'] == 'backend') or ($stylesheet['load'] == 'both'))) {
if ( ! file_exists($backend_site_css_path) or filemtime(ROOT . DS . $stylesheet['file']) > filemtime($backend_site_css_path)) { if (! file_exists($backend_site_css_path) or filemtime(ROOT . DS . $stylesheet['file']) > filemtime($backend_site_css_path)) {
$backend_regenerate = true; $backend_regenerate = true;
break; break;
} }
@@ -91,7 +87,7 @@ class Stylesheet
// Regenerate site stylesheet // Regenerate site stylesheet
if ($backend_regenerate) { if ($backend_regenerate) {
foreach ($stylesheets as $stylesheet) { foreach ($stylesheets as $stylesheet) {
if ((file_exists(ROOT . DS . $stylesheet['file'])) and (($stylesheet['load'] == 'backend') or ($stylesheet['load'] == 'both')) ) { if ((file_exists(ROOT . DS . $stylesheet['file'])) and (($stylesheet['load'] == 'backend') or ($stylesheet['load'] == 'both'))) {
$backend_buffer .= file_get_contents(ROOT . DS . $stylesheet['file']); $backend_buffer .= file_get_contents(ROOT . DS . $stylesheet['file']);
} }
} }
@@ -99,13 +95,12 @@ class Stylesheet
file_put_contents($backend_site_css_path, MinifyCSS::process($backend_buffer)); file_put_contents($backend_site_css_path, MinifyCSS::process($backend_buffer));
$backend_regenerate = false; $backend_regenerate = false;
} }
} else { } else {
// Build frontend site stylesheets // Build frontend site stylesheets
foreach ($stylesheets as $stylesheet) { foreach ($stylesheets as $stylesheet) {
if ((file_exists(ROOT . DS . $stylesheet['file'])) and (($stylesheet['load'] == 'frontend') or ($stylesheet['load'] == 'both')) ) { if ((file_exists(ROOT . DS . $stylesheet['file'])) and (($stylesheet['load'] == 'frontend') or ($stylesheet['load'] == 'both'))) {
if ( ! file_exists($frontend_site_css_path) or filemtime(ROOT . DS . $stylesheet['file']) > filemtime($frontend_site_css_path)) { if (! file_exists($frontend_site_css_path) or filemtime(ROOT . DS . $stylesheet['file']) > filemtime($frontend_site_css_path)) {
$frontend_regenerate = true; $frontend_regenerate = true;
break; break;
} }
@@ -115,7 +110,7 @@ class Stylesheet
// Regenerate site stylesheet // Regenerate site stylesheet
if ($frontend_regenerate) { if ($frontend_regenerate) {
foreach ($stylesheets as $stylesheet) { foreach ($stylesheets as $stylesheet) {
if ((file_exists(ROOT . DS . $stylesheet['file'])) and (($stylesheet['load'] == 'frontend') or ($stylesheet['load'] == 'both')) ) { if ((file_exists(ROOT . DS . $stylesheet['file'])) and (($stylesheet['load'] == 'frontend') or ($stylesheet['load'] == 'both'))) {
$frontend_buffer .= file_get_contents(ROOT . DS . $stylesheet['file']); $frontend_buffer .= file_get_contents(ROOT . DS . $stylesheet['file']);
} }
} }
@@ -123,14 +118,13 @@ class Stylesheet
file_put_contents($frontend_site_css_path, MinifyCSS::process($frontend_buffer)); file_put_contents($frontend_site_css_path, MinifyCSS::process($frontend_buffer));
$frontend_regenerate = false; $frontend_regenerate = false;
} }
} }
// Render // Render
if (BACKEND) { 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 { } else {
echo '<link rel="stylesheet" href="'.Option::get('siteurl').'tmp/minify/frontend_site.minify.css'.'" type="text/css" />'."\n"; echo '<link rel="stylesheet" href="'.Option::get('siteurl').'/tmp/minify/frontend_site.minify.css?'.Option::get('styles_version').'" type="text/css" />'."\n";
} }
} }
} }
@@ -144,9 +138,16 @@ class Stylesheet
'@theme_site_url', '@theme_site_url',
'@theme_admin_url'), '@theme_admin_url'),
array(Option::get('siteurl'), array(Option::get('siteurl'),
Option::get('siteurl').'public/themes/'.Option::get('theme_site_name'), Option::get('siteurl').'/public/themes/'.Option::get('theme_site_name'),
Option::get('siteurl').'admin/themes/'.Option::get('theme_admin_name')), Option::get('siteurl').'/admin/themes/'.Option::get('theme_admin_name')),
$frontend_buffer); $frontend_buffer);
} }
/**
* stylesVersionIncrement
*/
public static function stylesVersionIncrement()
{
Option::update('styles_version', (int) Option::get('styles_version') + 1);
}
} }

View File

@@ -1,20 +1,17 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
class View class View
{ {
/** /**

View File

@@ -1,20 +1,17 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
class Security class Security
{ {
/** /**
@@ -100,7 +97,7 @@ class Security
*/ */
public static function encryptPassword($password) public static function encryptPassword($password)
{ {
return md5(md5(trim($password) . MONSTRA_PASSWORD_SALT)); return md5(md5(trim($password) . MONSTRA_PASSWORD_SALT));
} }
/** /**
@@ -111,7 +108,7 @@ class Security
* </code> * </code>
* *
* @param string $str String * @param string $str String
* @param string $delimiter String delimiter * @param mixed $delimiter String delimiter
* @param boolean $lowercase String Lowercase * @param boolean $lowercase String Lowercase
* @return string * @return string
*/ */
@@ -119,9 +116,9 @@ class Security
{ {
// Redefine vars // Redefine vars
$str = (string) $str; $str = (string) $str;
$delimiter = (string) $delimiter; $delimiter = $delimiter;
$lowercase = (bool) $lowercase; $lowercase = (bool) $lowercase;
$delimiter = (string) $delimiter; $delimiter = $delimiter;
// Remove tags // Remove tags
$str = filter_var($str, FILTER_SANITIZE_STRING); $str = filter_var($str, FILTER_SANITIZE_STRING);
@@ -149,16 +146,20 @@ class Security
$str = iconv('UTF-8', 'ASCII//TRANSLIT', $str); $str = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
// Remove characters // Remove characters
$str = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $str ); $str = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $str);
$str = preg_replace("/[\/_|+ -]+/", $delimiter, $str ); if ($delimiter != null) {
$str = trim($str, $delimiter); $str = preg_replace("/[\/_|+ -]+/", $delimiter, $str);
$str = trim($str, $delimiter);
}
// Lowercase // Lowercase
if ($lowercase === true) $str = Text::lowercase($str); if ($lowercase === true) {
$str = Text::lowercase($str);
}
// Return safe name // Return safe name
return $str; return $str;
} }
/** /**
* Create safe url. * Create safe url.
@@ -174,9 +175,9 @@ class Security
{ {
$url = trim($url); $url = trim($url);
$url = rawurldecode($url); $url = rawurldecode($url);
$url = str_replace(array('--','&quot;','!','@','#','$','%','^','*','(',')','+','{','}','|',':','"','<','>', $url = str_replace(array('--', '&quot;', '!', '@', '#', '$', '%', '^', '*', '(', ')', '+', '{', '}', '|', ':', '"', '<', '>',
'[',']','\\',';',"'",',','*','+','~','`','laquo','raquo',']>','&#8216;','&#8217;','&#8220;','&#8221;','&#8211;','&#8212;'), '[', ']', '\\', ';', "'", ',', '*', '+', '~', '`', 'laquo', 'raquo', ']>', '&#8216;', '&#8217;', '&#8220;', '&#8221;', '&#8211;', '&#8212;'),
array('-','-','','','','','','','','','','','','','','','','','','','','','','','','','','',''), array('-', '-', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''),
$url); $url);
$url = str_replace('--', '-', $url); $url = str_replace('--', '-', $url);
$url = rtrim($url, "-"); $url = rtrim($url, "-");
@@ -187,7 +188,7 @@ class Security
$url = preg_replace('/^\./', '', $url); $url = preg_replace('/^\./', '', $url);
return $url; return $url;
} }
/** /**
* Sanitize URL to prevent XSS - Cross-site scripting * Sanitize URL to prevent XSS - Cross-site scripting
@@ -235,5 +236,4 @@ class Security
// Return safe string // Return safe string
return $str; return $str;
} }
} }

View File

@@ -1,20 +1,17 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
class Shortcode class Shortcode
{ {
/** /**
@@ -55,7 +52,9 @@ class Shortcode
$shortcode = (string) $shortcode; $shortcode = (string) $shortcode;
// Add new shortcode // Add new shortcode
if (is_callable($callback_function)) Shortcode::$shortcode_tags[$shortcode] = $callback_function; if (is_callable($callback_function)) {
Shortcode::$shortcode_tags[$shortcode] = $callback_function;
}
} }
/** /**
@@ -73,7 +72,9 @@ class Shortcode
$shortcode = (string) $shortcode; $shortcode = (string) $shortcode;
// Delete shortcode // Delete shortcode
if (Shortcode::exists($shortcode)) unset(Shortcode::$shortcode_tags[$shortcode]); if (Shortcode::exists($shortcode)) {
unset(Shortcode::$shortcode_tags[$shortcode]);
}
} }
/** /**
@@ -121,7 +122,9 @@ class Shortcode
*/ */
public static function parse($content) public static function parse($content)
{ {
if ( ! Shortcode::$shortcode_tags) return $content; if (! Shortcode::$shortcode_tags) {
return $content;
}
$shortcodes = implode('|', array_map('preg_quote', array_keys(Shortcode::$shortcode_tags))); $shortcodes = implode('|', array_map('preg_quote', array_keys(Shortcode::$shortcode_tags)));
$pattern = "/(.?)\{([$shortcodes]+)(.*?)(\/)?\}(?(4)|(?:(.+?)\{\/\s*\\2\s*\}))?(.?)/s"; $pattern = "/(.?)\{([$shortcodes]+)(.*?)(\/)?\}(?(4)|(?:(.+?)\{\/\s*\\2\s*\}))?(.?)/s";
@@ -147,9 +150,9 @@ class Shortcode
if (preg_match_all('/(\w+) *= *(?:([\'"])(.*?)\\2|([^ "\'>]+))/', $matches[3], $match, PREG_SET_ORDER)) { if (preg_match_all('/(\w+) *= *(?:([\'"])(.*?)\\2|([^ "\'>]+))/', $matches[3], $match, PREG_SET_ORDER)) {
foreach ($match as $attribute) { foreach ($match as $attribute) {
if ( ! empty($attribute[4])) { if (! empty($attribute[4])) {
$attributes[strtolower($attribute[1])] = $attribute[4]; $attributes[strtolower($attribute[1])] = $attribute[4];
} elseif ( ! empty($attribute[3])) { } elseif (! empty($attribute[3])) {
$attributes[strtolower($attribute[1])] = $attribute[3]; $attributes[strtolower($attribute[1])] = $attribute[3];
} }
} }
@@ -158,5 +161,4 @@ class Shortcode
// Check if this shortcode realy exists then call user function else return empty string // Check if this shortcode realy exists then call user function else return empty string
return (isset(Shortcode::$shortcode_tags[$shortcode])) ? $prefix . call_user_func(Shortcode::$shortcode_tags[$shortcode], $attributes, $matches[5], $shortcode) . $suffix : ''; return (isset(Shortcode::$shortcode_tags[$shortcode])) ? $prefix . call_user_func(Shortcode::$shortcode_tags[$shortcode], $attributes, $matches[5], $shortcode) . $suffix : '';
} }
} }

View File

@@ -1,20 +1,17 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
class Site class Site
{ {
/** /**
@@ -31,7 +28,9 @@ class Site
*/ */
public static function init() public static function init()
{ {
if ( ! isset(self::$instance)) self::$instance = new Site(); if (! isset(self::$instance)) {
self::$instance = new Site();
}
return self::$instance; return self::$instance;
} }
@@ -173,20 +172,20 @@ class Site
// else return default template: index // else return default template: index
// also compress template file :) // also compress template file :)
if (File::exists(THEMES_SITE . DS . $current_theme . DS . $template . '.template.php')) { if (File::exists(THEMES_SITE . DS . $current_theme . DS . $template . '.template.php')) {
if ( ! file_exists(MINIFY . DS . 'theme.' . $current_theme . '.minify.' . $template . '.template.php') or 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')) { 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 = file_get_contents(THEMES_SITE. DS . $current_theme . DS . $template .'.template.php');
$buffer = MinifyHTML::process($buffer); $buffer = MinifyHTML::process($buffer);
file_put_contents(MINIFY . DS . 'theme.' . $current_theme . '.minify.' . $template . '.template.php', $buffer); file_put_contents(MINIFY . DS . 'theme.' . $current_theme . '.minify.' . $template . '.template.php', $buffer);
} }
return 'minify.'.$template; return 'minify.'.$template;
} else { } else {
if ( ! File::exists(MINIFY . DS . 'theme.' . $current_theme . '.' . 'minify.index.template.php') or 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')) { 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 = file_get_contents(THEMES_SITE . DS . $current_theme . DS . 'index.template.php');
$buffer = MinifyHTML::process($buffer); $buffer = MinifyHTML::process($buffer);
file_put_contents(MINIFY . DS . 'theme.' . $current_theme . '.' . 'minify.index.template.php', $buffer); file_put_contents(MINIFY . DS . 'theme.' . $current_theme . '.' . 'minify.index.template.php', $buffer);
} }
return 'minify.index'; return 'minify.index';
@@ -220,5 +219,4 @@ class Site
{ {
return __('Powered by', 'system').' <a href="http://monstra.org" target="_blank">Monstra</a> ' . Monstra::VERSION; return __('Powered by', 'system').' <a href="http://monstra.org" target="_blank">Monstra</a> ' . Monstra::VERSION;
} }
} }

View File

@@ -1,20 +1,17 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
class Uri class Uri
{ {
/** /**
@@ -61,7 +58,14 @@ class Uri
// Ability to pass parameters // Ability to pass parameters
foreach ($uri as $i => $u) { foreach ($uri as $i => $u) {
if (isset($uri[$i])) { $pos = strrpos($uri[$i], "?"); if ($pos === false) { $uri[$i] = Security::sanitizeURL($uri[$i]); } else { $uri[$i] = Security::sanitizeURL(substr($uri[$i], 0, $pos)); } } if (isset($uri[$i])) {
$pos = strrpos($uri[$i], "?");
if ($pos === false) {
$uri[$i] = Security::sanitizeURL($uri[$i]);
} else {
$uri[$i] = Security::sanitizeURL(substr($uri[$i], 0, $pos));
}
}
} }
// Return uri segments // Return uri segments
@@ -99,10 +103,10 @@ class Uri
// Get uri segments // Get uri segments
$uri = Uri::segments(); $uri = Uri::segments();
if ( ! isset($uri[0])) { if (! isset($uri[0])) {
$uri[0] = Uri::$default_component; $uri[0] = Uri::$default_component;
} else { } else {
if ( ! in_array($uri[0], Plugin::$components) ) { if (! in_array($uri[0], Plugin::$components)) {
$uri[0] = Uri::$default_component; $uri[0] = Uri::$default_component;
} else { } else {
$uri[0] = $uri[0]; $uri[0] = $uri[0];
@@ -130,18 +134,16 @@ class Uri
$uri = Uri::segments(); $uri = Uri::segments();
// http://site.com/ and http://site.com/index.php same main home pages // http://site.com/ and http://site.com/index.php same main home pages
if ( ! isset($uri[0])) { if (! isset($uri[0])) {
$uri[0] = ''; $uri[0] = '';
} }
// param1/param2 // param1/param2
if ($uri[0] !== Uri::$default_component) { if ($uri[0] !== Uri::$default_component) {
if (isset($uri[1])) { if (isset($uri[1])) {
foreach ($uri as $part) { foreach ($uri as $part) {
$data[] = $part; $data[] = $part;
} }
} else { // default } else { // default
$data[0] = $uri[0]; $data[0] = $uri[0];
} }
@@ -158,5 +160,4 @@ class Uri
return $data; return $data;
} }
} }

View File

@@ -1,20 +1,17 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
class DB class DB
{ {
/** /**
@@ -42,7 +39,9 @@ class DB
*/ */
public static function configure($setting, $value) public static function configure($setting, $value)
{ {
if (property_exists("db", $setting)) DB::$$setting = $value; if (property_exists("db", $setting)) {
DB::$$setting = $value;
}
} }
/** /**
@@ -58,7 +57,9 @@ class DB
$db_name = (string) $db_name; $db_name = (string) $db_name;
// Create // Create
if (is_dir(DB::$db_dir . '/' . $db_name)) return false; if (is_dir(DB::$db_dir . '/' . $db_name)) {
return false;
}
return mkdir(DB::$db_dir . '/' . $db_name, $chmod); return mkdir(DB::$db_dir . '/' . $db_name, $chmod);
} }
@@ -74,8 +75,18 @@ class DB
$db_name = (string) $db_name; $db_name = (string) $db_name;
// Drop // Drop
if (is_dir(DB::$db_dir . '/' . $db_name)){$ob=scandir(DB::$db_dir . '/' . $db_name); foreach ($ob as $o) {if ($o!='.'&&$o!='..') {if(filetype(DB::$db_dir . '/' . $db_name.'/'.$o)=='dir')DB::drop(DB::$db_dir . '/' . $db_name.'/'.$o); else unlink(DB::$db_dir . '/' . $db_name.'/'.$o);}}} if (is_dir(DB::$db_dir . '/' . $db_name)) {
reset($ob); rmdir(DB::$db_dir . '/' . $db_name); $ob=scandir(DB::$db_dir . '/' . $db_name); foreach ($ob as $o) {
if ($o!='.'&&$o!='..') {
if (filetype(DB::$db_dir . '/' . $db_name.'/'.$o)=='dir') {
DB::drop(DB::$db_dir . '/' . $db_name.'/'.$o);
} else {
unlink(DB::$db_dir . '/' . $db_name.'/'.$o);
}
}
}
}
reset($ob);
rmdir(DB::$db_dir . '/' . $db_name);
} }
} }

View File

@@ -1,20 +1,17 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
class Table class Table
{ {
/** /**
@@ -46,7 +43,9 @@ class Table
*/ */
public static function configure($setting, $value) public static function configure($setting, $value)
{ {
if (property_exists("table", $setting)) Table::$$setting = $value; if (property_exists("table", $setting)) {
Table::$$setting = $value;
}
} }
/** /**
@@ -113,7 +112,7 @@ class Table
// Redefine vars // Redefine vars
$table_name = (string) $table_name; $table_name = (string) $table_name;
if ( ! file_exists(Table::$tables_dir . '/' . $table_name . '.table.xml') && if (! file_exists(Table::$tables_dir . '/' . $table_name . '.table.xml') &&
is_dir(dirname(Table::$tables_dir)) && is_dir(dirname(Table::$tables_dir)) &&
is_writable(dirname(Table::$tables_dir)) && is_writable(dirname(Table::$tables_dir)) &&
isset($fields) && isset($fields) &&
@@ -121,12 +120,13 @@ class Table
// Create table fields // Create table fields
$_fields = '<fields>'; $_fields = '<fields>';
foreach ($fields as $field) $_fields .= "<$field/>"; foreach ($fields as $field) {
$_fields .= "<$field/>";
}
$_fields .= '</fields>'; $_fields .= '</fields>';
// Create new table // Create new table
return file_put_contents(Table::$tables_dir . '/' . $table_name . '.table.xml','<?xml version="1.0" encoding="UTF-8"?><root><options><autoincrement>0</autoincrement></options>'.$_fields.'</root>', LOCK_EX); return file_put_contents(Table::$tables_dir . '/' . $table_name . '.table.xml', '<?xml version="1.0" encoding="UTF-8"?><root><options><autoincrement>0</autoincrement></options>'.$_fields.'</root>', LOCK_EX);
} else { } else {
// Something wrong... return false // Something wrong... return false
@@ -150,7 +150,7 @@ class Table
$table_name = (string) $table_name; $table_name = (string) $table_name;
// Drop // Drop
if ( ! is_dir(Table::$tables_dir . '/' . $table_name . '.table.xml')) { if (! is_dir(Table::$tables_dir . '/' . $table_name . '.table.xml')) {
return unlink(Table::$tables_dir . '/' . $table_name . '.table.xml'); return unlink(Table::$tables_dir . '/' . $table_name . '.table.xml');
} }
@@ -260,12 +260,9 @@ class Table
// Save table // Save table
return Table::_save($table); return Table::_save($table);
} else { } else {
return false; return false;
} }
} }
/** /**
@@ -297,10 +294,8 @@ class Table
// Save table // Save table
return Table::_save($table); return Table::_save($table);
} else { } else {
return false; return false;
} }
} }
@@ -408,7 +403,6 @@ class Table
// If exists fields to insert then insert them // If exists fields to insert then insert them
if (count($fields) !== 0) { if (count($fields) !== 0) {
$table_fields = array_diff_key($field_names, $fields); $table_fields = array_diff_key($field_names, $fields);
// Defined fields // Defined fields
@@ -424,10 +418,8 @@ class Table
// Save table // Save table
return Table::_save($this->table); return Table::_save($this->table);
} else { } else {
return false; return false;
} }
} }
@@ -474,12 +466,10 @@ class Table
// If row count is null then select only one record // If row count is null then select only one record
// eg: $users->select('[login="admin"]', null); // eg: $users->select('[login="admin"]', null);
if ($row_count == null) { if ($row_count == null) {
if (isset($tmp[0])) { if (isset($tmp[0])) {
$_records = $tmp[0]; $_records = $tmp[0];
$one_record = true; $one_record = true;
} }
} else { } else {
// If row count is 'all' then select all records // If row count is 'all' then select all records
@@ -496,12 +486,9 @@ class Table
// If array of fields is exits then get records with this fields only // If array of fields is exits then get records with this fields only
if (count($fields) > 0) { if (count($fields) > 0) {
if (count($_records) > 0) { if (count($_records) > 0) {
$count = 0; $count = 0;
foreach ($_records as $key => $record) { foreach ($_records as $key => $record) {
foreach ($fields as $field) { foreach ($fields as $field) {
$record_array[$count][$field] = (string) $record->$field; $record_array[$count][$field] = (string) $record->$field;
} }
@@ -515,7 +502,6 @@ class Table
} }
$count++; $count++;
} }
// Sort records // Sort records
@@ -527,9 +513,7 @@ class Table
} elseif ($offset !== null && is_int($row_count)) { } elseif ($offset !== null && is_int($row_count)) {
$records = array_slice($records, $offset, $row_count); $records = array_slice($records, $offset, $row_count);
} }
} }
} else { } else {
// Convert from XML object to array // Convert from XML object to array
@@ -537,7 +521,6 @@ class Table
if (! $one_record) { if (! $one_record) {
$count = 0; $count = 0;
foreach ($_records as $xml_objects) { foreach ($_records as $xml_objects) {
$vars = get_object_vars($xml_objects); $vars = get_object_vars($xml_objects);
foreach ($vars as $key => $value) { foreach ($vars as $key => $value) {
@@ -562,7 +545,6 @@ class Table
} elseif ($offset !== null && is_int($row_count)) { } elseif ($offset !== null && is_int($row_count)) {
$records = array_slice($records, $offset, $row_count); $records = array_slice($records, $offset, $row_count);
} }
} else { } else {
// Single record // Single record
@@ -575,7 +557,6 @@ class Table
// Return records // Return records
return $records; return $records;
} }
/** /**
@@ -601,7 +582,6 @@ class Table
// Delete // Delete
unset($xml_arr[0]); unset($xml_arr[0]);
} }
// Save table // Save table
@@ -631,7 +611,6 @@ class Table
// Delete // Delete
unset($xml_arr[0]); unset($xml_arr[0]);
} }
// Save table // Save table
@@ -690,10 +669,8 @@ class Table
// Save table // Save table
return Table::_save($this->table); return Table::_save($this->table);
} else { } else {
return false; return false;
} }
} }
@@ -747,16 +724,13 @@ class Table
// And add new one // And add new one
$xml_arr->addChild($key, XML::safe($value, false)); $xml_arr->addChild($key, XML::safe($value, false));
} }
} }
// Save table // Save table
return Table::_save($this->table); return Table::_save($this->table);
} else { } else {
return false; return false;
} }
} }
@@ -801,9 +775,17 @@ class Table
protected static function subvalSort($a, $subkey, $order = null) protected static function subvalSort($a, $subkey, $order = null)
{ {
if (count($a) != 0 || (!empty($a))) { if (count($a) != 0 || (!empty($a))) {
foreach ($a as $k=>$v) $b[$k] = function_exists('mb_strtolower') ? mb_strtolower($v[$subkey]) : strtolower($v[$subkey]); foreach ($a as $k=>$v) {
if ($order==null || $order== 'ASC') asort($b); else if ($order == 'DESC') arsort($b); $b[$k] = function_exists('mb_strtolower') ? mb_strtolower($v[$subkey]) : strtolower($v[$subkey]);
foreach ($b as $key=>$val) $c[] = $a[$key]; }
if ($order==null || $order== 'ASC') {
asort($b);
} elseif ($order == 'DESC') {
arsort($b);
}
foreach ($b as $key=>$val) {
$c[] = $a[$key];
}
return $c; return $c;
} }
@@ -872,5 +854,4 @@ class Table
// report about errors... // report about errors...
} }
} }
} }

View File

@@ -1,20 +1,17 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
class XML class XML
{ {
/** /**
@@ -52,7 +49,9 @@ class XML
} while ($cleaned != $str); } while ($cleaned != $str);
// htmlspecialchars // htmlspecialchars
if ($flag) $str = htmlspecialchars($str, ENT_QUOTES, 'utf-8'); if ($flag) {
$str = htmlspecialchars($str, ENT_QUOTES, 'utf-8');
}
// Return safe string // Return safe string
return $str; return $str;
@@ -92,5 +91,4 @@ class XML
} }
} }
} }
} }

View File

@@ -1,10 +1,10 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra requires PHP 5.2.3 or greater * Monstra requires PHP 5.3.2 or greater
*/ */
if (version_compare(PHP_VERSION, "5.2.3", "<")) { if (version_compare(PHP_VERSION, "5.3.2", "<")) {
exit("Monstra requires PHP 5.2.3 or greater."); exit("Monstra requires PHP 5.3.2 or greater.");
} }
/** /**
@@ -27,7 +27,7 @@ Monstra::$environment = Monstra::PRODUCTION;
* Report Errors * Report Errors
*/ */
if (Monstra::$environment == Monstra::PRODUCTION) { if (Monstra::$environment == Monstra::PRODUCTION) {
error_reporting(0); error_reporting(0);
} else { } else {
error_reporting(-1); error_reporting(-1);
} }

View File

@@ -4,4 +4,7 @@
* Set meta generator * Set meta generator
*/ */
Action::add('theme_meta', 'setMetaGenerator'); 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";
}

View File

@@ -1,7 +1,7 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.'); <?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/** /**
* Monstra CMS Defines * Monstra Defines
*/ */
/** /**
@@ -91,3 +91,4 @@ define('MONSTRA_GZIP', false);
//define('MONSTRA_DB_DSN', 'mysql:dbname=monstra;host=localhost;port=3306'); //define('MONSTRA_DB_DSN', 'mysql:dbname=monstra;host=localhost;port=3306');
//define('MONSTRA_DB_USER', 'root'); //define('MONSTRA_DB_USER', 'root');
//define('MONSTRA_DB_PASSWORD', 'password'); //define('MONSTRA_DB_PASSWORD', 'password');

View File

@@ -3,7 +3,9 @@
/** /**
* Evaluate a string as PHP code * Evaluate a string as PHP code
*/ */
if (MONSTRA_EVAL_PHP) Filter::add('content', 'evalPHP'); if (MONSTRA_EVAL_PHP) {
Filter::add('content', 'evalPHP');
}
function obEval($mathes) function obEval($mathes)
{ {
ob_start(); ob_start();
@@ -13,7 +15,10 @@ function obEval($mathes)
return $mathes; return $mathes;
} }
function evalPHP($str) { return preg_replace_callback('/\[php\](.*?)\[\/php\]/ms','obEval', $str); } function evalPHP($str)
{
return preg_replace_callback('/\[php\](.*?)\[\/php\]/ms', 'obEval', $str);
}
/** /**
* Add shortcode parser filter * Add shortcode parser filter

View File

@@ -4,4 +4,7 @@
* Add new shortcode {siteurl} * Add new shortcode {siteurl}
*/ */
Shortcode::add('siteurl', 'returnSiteUrl'); Shortcode::add('siteurl', 'returnSiteUrl');
function returnSiteUrl() { return Option::get('siteurl'); } function returnSiteUrl()
{
return Option::get('siteurl');
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,20 +1,17 @@
<?php <?php
/** /**
* Monstra Engine * Monstra
* *
* This source file is part of the Monstra Engine. More information, * @package Monstra
* documentation and tutorials can be found at http://monstra.org * @author Romanenko Sergey / Awilum <awilum@msn.com>
* * @link 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 * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
// Main engine defines // Main engine defines
define('DS', DIRECTORY_SEPARATOR); define('DS', DIRECTORY_SEPARATOR);
define('ROOT', rtrim(dirname(__FILE__), '\\/')); define('ROOT', rtrim(dirname(__FILE__), '\\/'));
@@ -48,7 +45,7 @@ if (file_exists('install.php')) {
header('HTTP/1.1 503 Service Temporarily Unavailable'); header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable'); header('Status: 503 Service Temporarily Unavailable');
header('Retry-After: 600'); header('Retry-After: 600');
die (Text::toHtml(Option::get('maintenance_message'))); die(Text::toHtml(Option::get('maintenance_message')));
} }
} }

696
install.php Normal file → Executable file
View File

@@ -5,10 +5,18 @@
*/ */
// Main engine defines // Main engine defines
if ( ! defined('DS')) define('DS', DIRECTORY_SEPARATOR); if (! defined('DS')) {
if ( ! defined('ROOT')) define('ROOT', rtrim(dirname(__FILE__), '\\/')); define('DS', DIRECTORY_SEPARATOR);
if ( ! defined('BACKEND')) define('BACKEND', false); }
if ( ! defined('MONSTRA_ACCESS')) define('MONSTRA_ACCESS', true); if (! defined('ROOT')) {
define('ROOT', rtrim(dirname(__FILE__), '\\/'));
}
if (! defined('BACKEND')) {
define('BACKEND', false);
}
if (! defined('MONSTRA_ACCESS')) {
define('MONSTRA_ACCESS', true);
}
// Load bootstrap file // Load bootstrap file
require_once(ROOT . DS . 'engine' . DS . '_init.php'); require_once(ROOT . DS . 'engine' . DS . '_init.php');
@@ -16,8 +24,18 @@
// Get array with the names of all modules compiled and loaded // Get array with the names of all modules compiled and loaded
$php_modules = get_loaded_extensions(); $php_modules = get_loaded_extensions();
// Get server port
if ($_SERVER["SERVER_PORT"] == "80") {
$port = "";
} else {
$port = ':'.$_SERVER["SERVER_PORT"];
}
// Get site URL // 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
$rewrite_base = str_replace(array("index.php", "install.php"), "", $_SERVER['PHP_SELF']); $rewrite_base = str_replace(array("index.php", "install.php"), "", $_SERVER['PHP_SELF']);
@@ -29,38 +47,74 @@
$dir_array = array('public', 'storage', 'backups', 'tmp'); $dir_array = array('public', 'storage', 'backups', 'tmp');
// Languages array // Languages array
$languages_array = array('en', 'fr', 'de', 'it', 'es', 'lt', 'pl', 'pt-br', 'ru', 'uk', 'hu', 'fa' , 'sk', 'nl', 'sr-yu'); $languages_array = array('en', 'ru', 'fr', 'de', 'it', 'es', 'lt', 'pl', 'pt-br', 'hu', 'fa' , 'sk', 'uk', 'nl', 'sr', 'id', 'ja', 'zh-cn', 'tr');
// Select Monstra language // Select Monstra language
if (Request::get('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 (in_array(Request::get('language'), $languages_array)) {
if (Option::update('language', Request::get('language'))) { if (Option::update('language', Request::get('language'))) {
Request::redirect($site_url); Request::redirect($site_url.$action);
} }
} else { } else {
Request::redirect($site_url); Request::redirect($site_url.$action);
} }
} }
// If pressed <Install> button then try to install // If pressed <Install> button then try to install
if (Request::post('install_submit')) { if (Request::post('install_submit')) {
if (Request::post('sitename') == '') {
if (Request::post('sitename') == '') $errors['sitename'] = __('Field "Site name" is empty', 'system'); $errors['sitename'] = __('Field "Site name" is empty', 'system');
if (Request::post('siteurl') == '') $errors['siteurl'] = __('Field "Site url" is empty', 'system'); }
if (Request::post('login') == '') $errors['login'] = __('Field "Username" is empty', 'system'); if (Request::post('siteurl') == '') {
if (Request::post('password') == '') $errors['password'] = __('Field "Password" is empty', 'system'); $errors['siteurl'] = __('Field "Site url" is empty', 'system');
if (Request::post('email') == '') $errors['email'] = __('Field "Email" is empty', 'system'); }
if ( ! Valid::email(Request::post('email'))) $errors['email_valid'] = __('Email not valid', 'system'); if (Request::post('login') == '') {
if (trim(Request::post('php') !== '')) $errors['php'] = true; $errors['login'] = __('Field "Username" is empty', 'system');
if (trim(Request::post('simplexml') !== '')) $errors['simplexml'] = true; }
if (trim(Request::post('mod_rewrite') !== '')) $errors['mod_rewrite'] = true; if (Request::post('password') == '') {
if (trim(Request::post('htaccess') !== '')) $errors['htaccess'] = true; $errors['password'] = __('Field "Password" is empty', 'system');
if (trim(Request::post('sitemap') !== '')) $errors['sitemap'] = true; }
if (trim(Request::post('install') !== '')) $errors['install'] = true; if (Request::post('email') == '') {
if (trim(Request::post('public') !== '')) $errors['public'] = true; $errors['email'] = __('Field "Email" is empty', 'system');
if (trim(Request::post('storage') !== '')) $errors['storage'] = true; }
if (trim(Request::post('backups') !== '')) $errors['backups'] = true; if (! Valid::email(Request::post('email'))) {
if (trim(Request::post('tmp') !== '')) $errors['tmp'] = true; $errors['email_valid'] = __('Email not valid', 'system');
}
if (trim(Request::post('php') !== '')) {
$errors['php'] = true;
}
if (trim(Request::post('simplexml') !== '')) {
$errors['simplexml'] = true;
}
if (trim(Request::post('mod_rewrite') !== '')) {
$errors['mod_rewrite'] = true;
}
if (trim(Request::post('htaccess') !== '')) {
$errors['htaccess'] = true;
}
if (trim(Request::post('sitemap') !== '')) {
$errors['sitemap'] = true;
}
if (trim(Request::post('install') !== '')) {
$errors['install'] = true;
}
if (trim(Request::post('public') !== '')) {
$errors['public'] = true;
}
if (trim(Request::post('storage') !== '')) {
$errors['storage'] = true;
}
if (trim(Request::post('backups') !== '')) {
$errors['backups'] = true;
}
if (trim(Request::post('tmp') !== '')) {
$errors['tmp'] = true;
}
// If errors is 0 then install cms // If errors is 0 then install cms
if (count($errors) == 0) { if (count($errors) == 0) {
@@ -93,12 +147,14 @@
$htaccess = file_get_contents('.htaccess'); $htaccess = file_get_contents('.htaccess');
$save_htaccess_content = str_replace("/%siteurlhere%/", $rewrite_base, $htaccess); $save_htaccess_content = str_replace("/%siteurlhere%/", $rewrite_base, $htaccess);
$handle = fopen ('.htaccess', "w"); $handle = fopen('.htaccess', "w");
fwrite($handle, $save_htaccess_content); fwrite($handle, $save_htaccess_content);
fclose($handle); fclose($handle);
// Installation done :) // Installation done :)
header("location: index.php?install=done"); header("location: index.php?install=done");
} else {
Notification::setNow('errors', $errors);
} }
} }
?> ?>
@@ -109,60 +165,75 @@
<title>Monstra :: Install</title> <title>Monstra :: Install</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Monstra Install Area"> <meta name="description" content="Monstra Install Area">
<link rel="icon" href="<?php echo $site_url; ?>favicon.ico" type="image/x-icon" /> <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="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.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="stylesheet" href="<?php echo $site_url; ?>admin/themes/default/css/default.css" media="all" type="text/css" />
<style> <style>
.input-xlarge { .install-body {
width: 285px; margin-top: 40px;
background: #FAFAFA;
} }
.install-languages { .install-languages {
margin: 0 auto 15px; margin: 20px auto 20px;
text-align: center; text-align: center;
width: 390px; width: 600px;
} }
.install-block { .install-block,
.monstra-dialog,
.install-block-footer {
margin: 0 auto; margin: 0 auto;
float: none!important; width: 600px;
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;
} }
.install-block-footer { .install-block-footer {
margin: 0 auto; margin-top: 20px;
float: none!important; margin-bottom: 20px;
margin-top:10px;
margin-bottom:10px;
max-width: 300px;
} }
.install-body { .well {
background-color: #FBFBFB; border: none;
padding-top:40px; 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 { .error {
color:#8E0505; color:#8E0505;
padding-top: 5px;
padding-bottom: 5px;
padding-top: 5px;
padding-bottom: 5px;
margin-bottom: 5px;
} }
.ok { .ok {
color:#00853F; color:#00853F;
padding-top: 5px;
padding-bottom: 5px;
margin-bottom: 5px;
} }
.warn { .warn {
color: #F74C18; color: #F74C18;
padding-top: 5px;
padding-bottom: 5px;
} }
.install-languages a { .install-languages a {
@@ -173,12 +244,12 @@
.language-link img { .language-link img {
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
filter: alpha(opacity=30); filter: alpha(opacity=30);
-moz-opacity:0.3;
-khtml-opacity: 0.3; -khtml-opacity: 0.3;
opacity: 0.3; -moz-opacity:0.3;
opacity: 0.3;
} }
.language-link-current img{ .language-link-current img {
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
filter: alpha(opacity=100); filter: alpha(opacity=100);
-moz-opacity:1.0; -moz-opacity:1.0;
@@ -194,49 +265,38 @@
opacity: 1.0; opacity: 1.0;
} }
@media (max-width: 480px) { .continue {
width: 100%;
.input-xlarge {
width: 100%;
}
.install-languages {
text-align: left;
}
.install-languages a {
padding: 0;
}
} }
</style> </style>
<script type="text/javascript" src="<?php echo $site_url; ?>public/assets/js/jquery.js"></script> <script src="<?php echo $site_url; ?>/public/assets/js/jquery.min.js"></script>
<script type="text/javascript" src="<?php echo $site_url; ?>public/assets/js/bootstrap.js"></script> <script src="<?php echo $site_url; ?>/public/assets/js/bootstrap.min.js"></script>
</head> </head>
<body class="install-body"> <body class="install-body">
<?php <?php
if (version_compare(PHP_VERSION, "5.2.0", "<")) { if (version_compare(PHP_VERSION, "5.3.2", "<")) {
$errors['php'] = 'error'; $errors['php'] = 'error';
} else { } else {
$errors['php'] = ''; $errors['php'] = '';
} }
if (in_array('SimpleXML', $php_modules)) { if (in_array('SimpleXML', $php_modules)) {
$errors['simplexml'] = ''; $errors['simplexml'] = '';
} else { } else {
$errors['simplexml'] = 'error'; $errors['simplexml'] = 'error';
} }
if (function_exists('apache_get_modules')) { if (function_exists('apache_get_modules')) {
if ( ! in_array('mod_rewrite', apache_get_modules())) { if (! in_array('mod_rewrite', apache_get_modules())) {
$errors['mod_rewrite'] = 'error'; $errors['mod_rewrite'] = 'error';
} else { } else {
$errors['mod_rewrite'] = ''; $errors['mod_rewrite'] = '';
} }
} else { } else {
$errors['mod_rewrite'] = ''; $errors['mod_rewrite'] = '';
} }
if (is_writable(__FILE__)) { if (is_writable(__FILE__)) {
@@ -265,215 +325,297 @@
$errors[$dir] = 'error'; $errors[$dir] = 'error';
} }
} }
?> ?>
<div class="install-languages"> <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>
<?php foreach ($languages_array as $lang_code) { ?>
<a data-placement="top" class="language-link<?php if (Option::get('language') == $lang_code) echo ' language-link-current';?>" title="<?php echo I18n::$locales[$lang_code]; ?>" href="<?php echo $site_url.'?language=' . $lang_code; ?>"><img src="<?php echo $site_url; ?>public/assets/img/flags/<?php echo $lang_code?>.png" alt="<?php echo $lang_code?>"></a>
<?php } ?>
</div>
<div class="install-block">
<div style="text-align:center;"><a class="brand" href="<?php echo Html::toText($site_url); ?>"><img src="<?php echo $site_url; ?>public/assets/img/monstra-logo.png" height="27" width="171" alt="Monstra"></a></div>
<hr>
<div>
<form action="install.php" method="post">
<input type="hidden" name="php" value="<?php echo $errors['php']; ?>" />
<input type="hidden" name="simplexml" value="<?php echo $errors['simplexml']; ?>" />
<input type="hidden" name="mod_rewrite" value="<?php echo $errors['mod_rewrite']; ?>" />
<input type="hidden" name="install" value="<?php echo $errors['install']; ?>" />
<input type="hidden" name="sitemap" value="<?php echo $errors['sitemap']; ?>" />
<input type="hidden" name="htaccess" value="<?php echo $errors['htaccess']; ?>" />
<input type="hidden" name="public" value="<?php echo $errors['public']; ?>" />
<input type="hidden" name="storage" value="<?php echo $errors['storage']; ?>" />
<input type="hidden" name="backups" value="<?php echo $errors['backups']; ?>" />
<input type="hidden" name="tmp" value="<?php echo $errors['tmp']; ?>" />
<label><?php echo __('Site Name', 'system'); ?></label> <div class="install-languages">
<input class="input-xlarge" name="sitename" type="text" value="<?php if (Request::post('sitename')) echo Html::toText(Request::post('sitename')); ?>" /> <?php
<br /> if (Request::get('action') && Request::get('action') == 'install') {
<label><?php echo __('Site Url', 'system'); ?></label> $action = '&action=install';
<input class="input-xlarge" name="siteurl" type="text" value="<?php echo Html::toText($site_url); ?>" /> } else {
<br /> $action = '';
<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 /> <?php foreach ($languages_array as $lang_code) {
<label><?php echo __('Password', 'users'); ?></label> ?>
<input class="input-xlarge" name="password" type="password" /> <a data-placement="top" data-toggle="tooltip" class="language-link<?php if (Option::get('language') == $lang_code) {
<br /> echo ' language-link-current';
<label><?php echo __('Time zone', 'system'); ?></label> }
<select class="input-xlarge" name="timezone"> ?>" title="<?php echo I18n::$locales[$lang_code];
<option value="Kwajalein">(GMT-12:00) International Date Line West</option> ?>" href="<?php echo $site_url.'/?language=' . $lang_code.$action;
<option value="Pacific/Samoa">(GMT-11:00) Midway Island, Samoa</option> ?>"><img src="<?php echo $site_url;
<option value="Pacific/Honolulu">(GMT-10:00) Hawaii</option> ?>/public/assets/img/flags/<?php echo $lang_code?>.png" alt="<?php echo $lang_code?>"></a>
<option value="America/Anchorage">(GMT-09:00) Alaska</option> <?php
<option value="America/Los_Angeles">(GMT-08:00) Pacific Time (US &amp; Canada)</option>
<option value="America/Tijuana">(GMT-08:00) Tijuana, Baja California</option>
<option value="America/Denver">(GMT-07:00) Mountain Time (US &amp; 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 &amp; 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 &amp; 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>
<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" /> </div>
<br /><br />
<input type="submit" class="btn" name="install_submit" value="<?php echo __('Install', 'system'); ?>" /> <div class="install-block <?php if (Request::get('action') && Request::get('action') == 'install') {
</form> ?><?php
} else {
?> hide <?php
} ?>">
<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> </div>
<hr>
<p align="center"><strong><?php echo __('...Monstra says...', 'system'); ?></strong></p>
<div>
<ul>
<?php
if (version_compare(PHP_VERSION, "5.2.0", "<")) { <div class="form-group">
echo '<span class="error"><li>'.__('PHP 5.2 or greater is required', 'system').'</li></span>'; <label><?php echo __('Site Url', 'system'); ?></label>
} else { <input class="form-control" name="siteurl" type="text" value="<?php echo Html::toText($site_url); ?>" />
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> </div>
</div>
<div class="install-block-footer"> <div class="form-group">
<div style="text-align:center;"> <label><?php echo __('Username', 'users'); ?></label>
<span class="small-grey-text">© 2012 - 2014 <a href="http://monstra.org" class="small-grey-text" target="_blank">Monstra</a> <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?></span> <input class="form-control login" name="login" value="<?php if (Request::post('login')) {
echo Html::toText(Request::post('login'));
} ?>" type="text" />
</div> </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 &amp; Canada)</option>
<option value="America/Tijuana">(GMT-08:00) Tijuana, Baja California</option>
<option value="America/Denver">(GMT-07:00) Mountain Time (US &amp; 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 &amp; 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 &amp; 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>
<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.3.2", "<")) {
echo '<li class="error alert alert-danger">'.__('PHP 5.3.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 - 2016 <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"> <script type="text/javascript">
$('.language-link').tooltip(); $('.language-link').tooltip();
$(document).ready(function() {
$('.continue').click(function() {
$('.monstra-dialog').addClass('hide');
$('.install-block').removeClass('hide');
});
});
</script> </script>
</body> </body>
</html> </html>

View File

@@ -71,6 +71,12 @@ class Agent
'infoseek', 'infoseek',
'lycos', 'lycos',
'ia_archiver', 'ia_archiver',
'yandex',
'mail.ru',
'ask.com',
'Copyscape.com',
'bing.com',
); );
/** /**

View File

@@ -4,23 +4,17 @@
<meta charset="utf-8"> <meta charset="utf-8">
<title>Error</title> <title>Error</title>
<style type="text/css"> <style type="text/css">
body {
background: #F5F5F5;
padding: 0;
margin: 0;
}
#gelato-error { #gelato-error {
background:#eee; background:#F5F5F5;
color:0; color:0;
width:95%; width:100%;
font-size:14px; font-size:14px;
font-family:Verdana, Arial, Helvetica, "Nimbus Sans", FreeSans, Malayalam, sans-serif; font-family:Verdana, Arial, Helvetica, "Nimbus Sans", FreeSans, Malayalam, sans-serif;
margin:20px auto;
-webkit-box-shadow: 1px 1px 18px rgba(50, 50, 50, 0.75);
-moz-box-shadow: 1px 1px 18px rgba(50, 50, 50, 0.75);
box-shadow: 1px 1px 18px rgba(50, 50, 50, 0.75);
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
} }
#gelato-error pre { #gelato-error pre {
@@ -31,23 +25,17 @@
} }
#gelato-error a { #gelato-error a {
color:#cc0a0a; color:#DC143C;
text-decoration:none; text-decoration:none;
} }
#gelato-error .error { #gelato-error .error {
background:#cc0a0a; background:#DC143C;
color:#fff; color:#fff;
font-size:24px; font-size:24px;
font-weight:700; font-weight:700;
padding:10px; padding:10px;
-moz-border-radius-topleft: 5px;
-webkit-border-top-left-radius: 5px;
border-top-left-radius: 5px;
-moz-border-radius-topright: 5px;
-webkit-border-top-right-radius: 5px;
border-top-right-radius: 5px;
} }
#gelato-error .body { #gelato-error .body {
@@ -288,7 +276,10 @@
<?php endforeach; ?> <?php endforeach; ?>
</table> </table>
</div> </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> </div>
<script type="text/javascript"> <script type="text/javascript">

View File

@@ -203,4 +203,26 @@ class Dir
return $total_size; 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);
}
} }

View File

@@ -141,7 +141,7 @@ class Form
$attributes['type'] = 'text'; $attributes['type'] = 'text';
} }
return '<input'.Html::attributes($attributes).' />'; return '<input'.Html::attributes($attributes).'>';
} }
/** /**

View File

@@ -51,7 +51,7 @@ class Html
* *
* <code> * <code>
* *
* // Registering a Htmlk macro * // Registering a Html macro
* Html::macro('my_element', function() { * Html::macro('my_element', function() {
* return '<element id="monstra">'; * return '<element id="monstra">';
* }); * });
@@ -61,7 +61,7 @@ class Html
* *
* *
* // Registering a Html macro with parameters * // Registering a Html macro with parameters
* Html::macro('my_element', function(id = '') { * Html::macro('my_element', function($id = '') {
* return '<element id="'.$id.'">'; * return '<element id="'.$id.'">';
* }); * });
* *
@@ -157,7 +157,7 @@ class Html
*/ */
public static function br($num = 1) public static function br($num = 1)
{ {
return str_repeat("<br />",(int) $num); return str_repeat("<br>",(int) $num);
} }
/** /**
@@ -285,7 +285,7 @@ class Html
$attributes['src'] = $file; $attributes['src'] = $file;
$attributes['alt'] = (isset($attributes['alt'])) ? $attributes['alt'] : pathinfo($file, PATHINFO_FILENAME); $attributes['alt'] = (isset($attributes['alt'])) ? $attributes['alt'] : pathinfo($file, PATHINFO_FILENAME);
return '<img'.Html::attributes($attributes).' />'; return '<img'.Html::attributes($attributes).'>';
} }
/** /**

View File

@@ -659,4 +659,3 @@ class Image
} }
} }
code

View File

@@ -109,23 +109,9 @@ class MinifyCSS
(\\b|[#\'"-]) # 3 = first character of a value (\\b|[#\'"-]) # 3 = first character of a value
/x', '$1$2:$3', $css); /x', '$1$2:$3', $css);
// remove ws in selectors
$css = preg_replace_callback('/
(?: # non-capture
\\s*
[^~>+,\\s]+ # selector part
\\s*
[,>+~] # combinators
)+
\\s*
[^~>+,\\s]+ # selector part
{ # open declaration block
/x'
,array($this, '_selectorsCB'), $css);
// minimize hex colors // minimize hex colors
$css = preg_replace('/([^=])#([a-f\\d])\\2([a-f\\d])\\3([a-f\\d])\\4([\\s;\\}])/i' /*$css = preg_replace('/([^=])#([a-f\\d])\\2([a-f\\d])\\3([a-f\\d])\\4([\\s;\\}])/i'
, '$1#$2$3$4$5', $css); , '$1#$2$3$4$5', $css);*/
// remove spaces between font families // remove spaces between font families
$css = preg_replace_callback('/font-family:([^;}]+)([;}])/' $css = preg_replace_callback('/font-family:([^;}]+)([;}])/'

View File

@@ -28,7 +28,7 @@ class Number
} }
/** /**
* Convert bytes in 'kb','mb','gb','tb','pb' * Convert bytes in 'KB','MB','GB','TiB','PiB'
* *
* <code> * <code>
* echo Number::byteFormat(10000); * echo Number::byteFormat(10000);
@@ -42,11 +42,33 @@ class Number
// Redefine vars // Redefine vars
$size = (int) $size; $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 < 0 ? 0 : $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;
}
/** /**
* Converts a number into a more readable human-type number. * Converts a number into a more readable human-type number.
* *

View File

@@ -24,6 +24,12 @@ class Zip
public $offset = 0; public $offset = 0;
public $now; 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 * Constructor
*/ */
@@ -264,7 +270,7 @@ class Zip
* @param string $root_path Root path * @param string $root_path Root path
* @return mixed * @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)) { if ( ! $fp = @opendir($path)) {
return false; return false;
@@ -277,12 +283,12 @@ class Zip
while (false !== ($file = readdir($fp))) { while (false !== ($file = readdir($fp))) {
if (substr($file, 0, 1) == '.') { if (substr($file, 0, 1) == '.' || in_array($path.$file, $exclude_files)) {
continue; continue;
} }
if (@is_dir($path.$file)) { if (@is_dir($path.$file)) {
$this->readDir($path.$file."/", $preserve_filepath, $root_path); $this->readDir($path.$file."/", $preserve_filepath, $root_path, $exclude_files);
} else { } else {
if (false !== ($data = file_get_contents($path.$file))) { if (false !== ($data = file_get_contents($path.$file))) {
$name = str_replace("\\", "/", $path); $name = str_replace("\\", "/", $path);
@@ -372,4 +378,302 @@ class Zip
$this->offset = 0; $this->offset = 0;
} }
public function extract($zip_file, $target_dir = null)
{
$chmod = 0777;
$this->_archive_info = array();
$files = $this->_read_archive($zip_file);
if (!$files) {
return false;
}
$file_locations = array();
foreach ($files as $file => $trash) {
$dirname = pathinfo($file, PATHINFO_DIRNAME);
$folders = explode('/', $dirname);
$out_dn = $target_dir . '/' . $dirname;
if ( !is_dir($out_dn)) {
$str = '';
foreach ($folders as $folder) {
$str = $str ? $str . '/' . $folder : $folder;
if ( !is_dir($target_dir . '/' . $str)) {
if ( ! @mkdir($target_dir . '/' . $str)) {
return false;
}
chmod($target_dir . '/' . $str, $chmod);
}
}
}
if (substr($file, -1, 1) == '/') {
continue;
}
$file_locations[] = $file_location = $target_dir . '/' . $file;
$this->_extract_file($file, $file_location);
}
$this->_archive_info = array();
return $file_locations;
}
private function _read_archive($zip_file)
{
if (sizeof($this->_archive_info)) {
return $this->_archive_info;
}
$fh = fopen($zip_file, 'r');
$this->farc = &$fh;
if ( !$fh) {
return false;
}
if ( !$this->_read_file_list_by_eof($fh)) {
if ( !$this->_read_files_by_signatures($fh)) {
return false;
}
}
return $this->_archive_info;
}
private function _read_file_list_by_eof(&$fh)
{
for ($x = 0; $x < 1024; $x++) {
fseek($fh, -22 - $x, SEEK_END);
$signature = fread($fh, 4);
if ($signature == $this->_central_signature_end) {
$eodir['disk_number_this'] = unpack("v", fread($fh, 2));
$eodir['disk_number'] = unpack("v", fread($fh, 2));
$eodir['total_entries_this'] = unpack("v", fread($fh, 2));
$eodir['total_entries'] = unpack("v", fread($fh, 2));
$eodir['size_of_cd'] = unpack("V", fread($fh, 4));
$eodir['offset_start_cd'] = unpack("V", fread($fh, 4));
$zip_comment_lenght = unpack("v", fread($fh, 2));
$eodir['zipfile_comment'] = $zip_comment_lenght[1] ? fread($fh, $zip_comment_lenght[1]) : '';
fseek($fh, $eodir['offset_start_cd'][1]);
$signature = fread($fh, 4);
while ($signature == $this->_dir_signature) {
$dir['version_madeby'] = unpack("v", fread($fh, 2));
$dir['version_needed'] = unpack("v", fread($fh, 2));
$dir['general_bit_flag'] = unpack("v", fread($fh, 2));
$dir['compression_method'] = unpack("v", fread($fh, 2));
$dir['lastmod_time'] = unpack("v", fread($fh, 2));
$dir['lastmod_date'] = unpack("v", fread($fh, 2));
$dir['crc-32'] = fread($fh, 4);
$dir['compressed_size'] = unpack("V", fread($fh, 4));
$dir['uncompressed_size'] = unpack("V", fread($fh, 4));
$zip_file_length = unpack("v", fread($fh, 2));
$extra_field_length = unpack("v", fread($fh, 2));
$fileCommentLength = unpack("v", fread($fh, 2));
$dir['disk_number_start'] = unpack("v", fread($fh, 2));
$dir['internal_attributes'] = unpack("v", fread($fh, 2));
$dir['external_attributes1'] = unpack("v", fread($fh, 2));
$dir['external_attributes2'] = unpack("v", fread($fh, 2));
$dir['relative_offset'] = unpack("V", fread($fh, 4));
$dir['file_name'] = fread($fh, $zip_file_length[1]);
$dir['extra_field'] = $extra_field_length[1] ? fread($fh, $extra_field_length[1]) : '';
$dir['file_comment'] = $fileCommentLength[1] ? fread($fh, $fileCommentLength[1]) : '';
$binary_mod_date = str_pad(decbin($dir['lastmod_date'][1]), 16, '0', STR_PAD_LEFT);
$binary_mod_time = str_pad(decbin($dir['lastmod_time'][1]), 16, '0', STR_PAD_LEFT);
$last_mod_year = bindec(substr($binary_mod_date, 0, 7)) + 1980;
$last_mod_month = bindec(substr($binary_mod_date, 7, 4));
$last_mod_day = bindec(substr($binary_mod_date, 11, 5));
$last_mod_hour = bindec(substr($binary_mod_time, 0, 5));
$last_mod_minute = bindec(substr($binary_mod_time, 5, 6));
$last_mod_second = bindec(substr($binary_mod_time, 11, 5));
$central_dir_list[$dir['file_name']] = array(
'version_madeby' => $dir['version_madeby'][1],
'version_needed' => $dir['version_needed'][1],
'general_bit_flag' => str_pad(decbin($dir['general_bit_flag'][1]), 8, '0', STR_PAD_LEFT),
'compression_method' => $dir['compression_method'][1],
'lastmod_datetime' => mktime($last_mod_hour, $last_mod_minute, $last_mod_second, $last_mod_month, $last_mod_day, $last_mod_year),
'crc-32' => str_pad(dechex(ord($dir['crc-32'][3])), 2, '0', STR_PAD_LEFT) .
str_pad(dechex(ord($dir['crc-32'][2])), 2, '0', STR_PAD_LEFT) .
str_pad(dechex(ord($dir['crc-32'][1])), 2, '0', STR_PAD_LEFT) .
str_pad(dechex(ord($dir['crc-32'][0])), 2, '0', STR_PAD_LEFT),
'compressed_size' => $dir['compressed_size'][1],
'uncompressed_size' => $dir['uncompressed_size'][1],
'disk_number_start' => $dir['disk_number_start'][1],
'internal_attributes' => $dir['internal_attributes'][1],
'external_attributes1' => $dir['external_attributes1'][1],
'external_attributes2' => $dir['external_attributes2'][1],
'relative_offset' => $dir['relative_offset'][1],
'file_name' => $dir['file_name'],
'extra_field' => $dir['extra_field'],
'file_comment' => $dir['file_comment'],
);
$signature = fread($fh, 4);
}
if (isset($central_dir_list)) {
foreach ($central_dir_list as $filename => $details) {
$i = $this->_get_file_header($fh, $details['relative_offset']);
$this->_archive_info[$filename]['file_name'] = $filename;
$this->_archive_info[$filename]['compression_method'] = $details['compression_method'];
$this->_archive_info[$filename]['version_needed'] = $details['version_needed'];
$this->_archive_info[$filename]['lastmod_datetime'] = $details['lastmod_datetime'];
$this->_archive_info[$filename]['crc-32'] = $details['crc-32'];
$this->_archive_info[$filename]['compressed_size'] = $details['compressed_size'];
$this->_archive_info[$filename]['uncompressed_size'] = $details['uncompressed_size'];
$this->_archive_info[$filename]['lastmod_datetime'] = $details['lastmod_datetime'];
$this->_archive_info[$filename]['extra_field'] = $i['extra_field'];
$this->_archive_info[$filename]['contents_start_offset'] = $i['contents_start_offset'];
}
}
return true;
}
}
return true;
}
private function _read_files_by_signatures(&$fh)
{
fseek($fh, 0);
$return = false;
for (;;) {
$details = $this->_get_file_header($fh);
if ( !$details) {
fseek($fh, 12 - 4, SEEK_CUR);
$details = $this->_get_file_header($fh);
}
if ( !$details) {
break;
}
$filename = $details['file_name'];
$this->_archive_info[$filename] = $details;
$return = true;
}
return $return;
}
private function _get_file_header(&$fh, $start_offset = FALSE)
{
if ($start_offset !== false) {
fseek($fh, $start_offset);
}
$signature = fread($fh, 4);
if ($signature == $this->_zip_signature) {
$file['version_needed'] = unpack("v", fread($fh, 2));
$file['general_bit_flag'] = unpack("v", fread($fh, 2));
$file['compression_method'] = unpack("v", fread($fh, 2));
$file['lastmod_time'] = unpack("v", fread($fh, 2));
$file['lastmod_date'] = unpack("v", fread($fh, 2));
$file['crc-32'] = fread($fh, 4);
$file['compressed_size'] = unpack("V", fread($fh, 4));
$file['uncompressed_size'] = unpack("V", fread($fh, 4));
$zip_file_length = unpack("v", fread($fh, 2));
$extra_field_length = unpack("v", fread($fh, 2));
$file['file_name'] = fread($fh, $zip_file_length[1]);
$file['extra_field'] = $extra_field_length[1] ? fread($fh, $extra_field_length[1]) : '';
$file['contents_start_offset'] = ftell($fh);
fseek($fh, $file['compressed_size'][1], SEEK_CUR);
$binary_mod_date = str_pad(decbin($file['lastmod_date'][1]), 16, '0', STR_PAD_LEFT);
$binary_mod_time = str_pad(decbin($file['lastmod_time'][1]), 16, '0', STR_PAD_LEFT);
$last_mod_year = bindec(substr($binary_mod_date, 0, 7)) + 1980;
$last_mod_month = bindec(substr($binary_mod_date, 7, 4));
$last_mod_day = bindec(substr($binary_mod_date, 11, 5));
$last_mod_hour = bindec(substr($binary_mod_time, 0, 5));
$last_mod_minute = bindec(substr($binary_mod_time, 5, 6));
$last_mod_second = bindec(substr($binary_mod_time, 11, 5));
return array(
'file_name' => $file['file_name'],
'compression_method' => $file['compression_method'][1],
'version_needed' => $file['version_needed'][1],
'lastmod_datetime' => mktime($last_mod_hour, $last_mod_minute, $last_mod_second, $last_mod_month, $last_mod_day, $last_mod_year),
'crc-32' => str_pad(dechex(ord($file['crc-32'][3])), 2, '0', STR_PAD_LEFT) .
str_pad(dechex(ord($file['crc-32'][2])), 2, '0', STR_PAD_LEFT) .
str_pad(dechex(ord($file['crc-32'][1])), 2, '0', STR_PAD_LEFT) .
str_pad(dechex(ord($file['crc-32'][0])), 2, '0', STR_PAD_LEFT),
'compressed_size' => $file['compressed_size'][1],
'uncompressed_size' => $file['uncompressed_size'][1],
'extra_field' => $file['extra_field'],
'general_bit_flag' => str_pad(decbin($file['general_bit_flag'][1]), 8, '0', STR_PAD_LEFT),
'contents_start_offset' => $file['contents_start_offset']
);
}
return false;
}
private function _extract_file($compressed_file_name, $target_file_name = false)
{
if ( !sizeof($this->_archive_info)) {
return false;
}
$fdetails = &$this->_archive_info[$compressed_file_name];
if ( ! isset($this->_archive_info[$compressed_file_name])) {
return false;
}
if (substr($compressed_file_name, -1) == '/') {
return false;
}
if ( !$fdetails['uncompressed_size']) {
return $target_file_name ? file_put_contents($target_file_name, '') : '';
}
fseek($this->farc, $fdetails['contents_start_offset']);
$ret = $this->_uncompress(
fread($this->farc, $fdetails['compressed_size']),
$fdetails['compression_method'],
$fdetails['uncompressed_size'],
$target_file_name
);
if ($target_file_name) {
chmod($target_file_name, 0644);
}
return $ret;
}
private function _uncompress($content, $mode, $uncompressed_size, $target_file_name = false)
{
switch ($mode) {
case 0:
return $target_file_name ? file_put_contents($target_file_name, $content) : $content;
case 8:
return $target_file_name
? file_put_contents($target_file_name, gzinflate($content, $uncompressed_size))
: gzinflate($content, $uncompressed_size);
case 12:
return $target_file_name
? file_put_contents($target_file_name, bzdecompress($content)) : bzdecompress($content);
default:
return false;
}
}
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,221 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for software and other kinds of works.
The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and modification follow.
TERMS AND CONDITIONS
0. Definitions.
<EFBFBD>This License<73> refers to version 3 of the GNU General Public License.
<EFBFBD>Copyright<EFBFBD> also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
<EFBFBD>The Program<61> refers to any copyrightable work licensed under this License. Each licensee is addressed as <20>you<6F>. <20>Licensees<65> and <20>recipients<74> may be individuals or organizations.
To <20>modify<66> a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a <20>modified version<6F> of the earlier work or a work <20>based on<6F> the earlier work.
A <20>covered work<72> means either the unmodified Program or a work based on the Program.
To <20>propagate<74> a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
To <20>convey<65> a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays <20>Appropriate Legal Notices<65> to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
1. Source Code.
The <20>source code<64> for a work means the preferred form of the work for making modifications to it. <20>Object code<64> means any non-source form of a work.
A <20>Standard Interface<63> means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
The <20>System Libraries<65> of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A <20>Major Component<6E>, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
The <20>Corresponding Source<63> for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to <20>keep intact all notices<65>.
c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an <20>aggregate<74> if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
A <20>User Product<63> is either (1) a <20>consumer product<63>, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, <20>normally used<65> refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
<EFBFBD>Installation Information<6F> for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
7. Additional Terms.
<EFBFBD>Additional permissions<6E> are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
All other non-permissive additional terms are considered <20>further restrictions<6E> within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
An <20>entity transaction<6F> is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
11. Patents.
A <20>contributor<6F> is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's <20>contributor version<6F>.
A contributor's <20>essential patent claims<6D> are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, <20>control<6F> includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
In the following three paragraphs, a <20>patent license<73> is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To <20>grant<6E> such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. <20>Knowingly relying<6E> means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
A patent license is <20>discriminatory<72> if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License <20>or any later version<6F> applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM <20>AS IS<49> WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the <20>copyright<68> line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an <20>about box<6F>.
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>.

40
plugins/blog/README.md Normal file
View 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>

View 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();
}
}
}

View 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>

View 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',
)
);

View 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',
)
);

View File

@@ -0,0 +1,13 @@
<?php
return array(
'blog' => array(
'Blog' => 'Блог',
'Blog plugin for Monstra' => 'Плагин блога для Monstra',
'begin' => 'начало',
'end' => 'конец',
'prev' => 'назад',
'next' => 'вперед',
'Related posts' => 'Статьи по теме',
)
);

View File

@@ -0,0 +1,11 @@
<?php
return array(
'blog' => array(
'Blog' => 'Blog',
'Blog plugin for Monstra' => 'Blog, dodatak za Monstra',
'begin' => 'početak',
'end' => 'kraj',
'prev' => 'predhodna',
'next' => 'sledeća',
)
);

View 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
View 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); ?>

View 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 } ?>

View 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>&nbsp;<span>&rarr;</span>&nbsp;<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 } ?>

View 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 } ?>

View 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> ';
}
?>

View 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>

View 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 } ?>

View File

@@ -15,8 +15,6 @@ class BackupAdmin extends Backend
{ {
$backups_path = ROOT . DS . 'backups'; $backups_path = ROOT . DS . 'backups';
$backups_list = array();
// Create backup // Create backup
// ------------------------------------- // -------------------------------------
if (Request::post('create_backup')) { if (Request::post('create_backup')) {
@@ -32,12 +30,18 @@ class BackupAdmin extends Backend
$zip->readDir(STORAGE . DS, false); $zip->readDir(STORAGE . DS, false);
// Add public folder // 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 // 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.'); } } 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'))) { if (Security::check(Request::get('token'))) {
File::delete($backups_path . DS . Request::get('delete_file')); if (File::delete($backups_path . DS . Request::get('delete_file'))) {
Request::redirect(Option::get('siteurl').'admin/index.php?id=backup'); 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.'); } } 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.'); } } else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
} }
// Get backup list // Restore backup
$backups_list = File::scan($backups_path, '.zip'); // -------------------------------------
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 // Display view
View::factory('box/backup/views/backend/index') View::factory('box/backup/views/backend/index')
->assign('backups_list', $backups_list) ->assign('backups_list', File::scan($backups_path, '.zip'))
->display(); ->display();
} }
} }

View File

@@ -3,8 +3,10 @@
return array( return array(
'backup' => array( 'backup' => array(
'Backups' => 'Backups', 'Backups' => 'Backups',
'Backup' => 'Backup',
'Backup Date' => 'Backup Date', 'Backup Date' => 'Backup Date',
'Create Backup' => 'Create Backup', 'Create Backup' => 'Create Backup',
'Restore' => 'Restore',
'Delete' => 'Delete', 'Delete' => 'Delete',
'storage' => 'storage', 'storage' => 'storage',
'public' => 'public', 'public' => 'public',
@@ -13,5 +15,12 @@
'Actions' => 'Actions', 'Actions' => 'Actions',
'Delete backup: :backup' => 'Delete backup: :backup', 'Delete backup: :backup' => 'Delete backup: :backup',
'Creating...' => 'Creating...', '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',
) )
); );

View File

@@ -1,17 +1,26 @@
<?php <?php
return array( return array(
'backup' => array( 'backup' => array(
'Backups' => 'Backup', 'Backups' => 'Backups',
'Backup date' => 'Backup dia', 'Backup' => 'Backup',
'Create Backup' => 'Crear Backup', 'Backup Date' => 'Fecha del backup',
'Delete' => 'Borrar', 'Create Backup' => 'Crear backup',
'storage' => 'Almacen', 'Restore' => 'Restaurar',
'public' => 'publico', 'Delete' => 'Eliminar',
'storage' => 'Almacenamiento',
'public' => 'público',
'plugins' => 'plugins', 'plugins' => 'plugins',
'Size' => 'Tamaño', 'Size' => 'Tamaño',
'Actions' => 'Acciones', 'Actions' => 'Acciones',
'Delete backup: :backup' => 'Borrar Backup: :backup', 'Delete backup: :backup' => 'Eliminar backup: :backup',
'Creating...' => 'Creando...', 'Creating...' => 'Creando...',
'Backup was created' => 'El backup fue creado',
'Backup was not created' => 'El backup no fue creado',
'Backup was deleted' => 'El backup fue eliminado',
'Backup was not deleted' => 'El backup no fue eliminado',
'Backup was restored' => 'El backup fue restaurado',
'Unzip error' => 'Error de descompresión',
'Backup was not restored' => 'El backup no fue restaurado',
) )
); );

View 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...',
)
);

View 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...' => '作成中...',
)
);

View File

@@ -13,5 +13,9 @@
'Actions' => 'Действия', 'Actions' => 'Действия',
'Delete backup: :backup' => 'Удалить бекап: :backup', 'Delete backup: :backup' => 'Удалить бекап: :backup',
'Creating...' => 'Создание...', 'Creating...' => 'Создание...',
'Backup was deleted' => 'Бекап не был создан',
'Backup was created' => 'Бекап был создан',
'Backup was not restored' => 'Бекап не был восстановлен',
'Backup was restored' => 'Бекап был восстановлен',
) )
); );

View File

@@ -3,7 +3,7 @@
return array( return array(
'backup' => array( 'backup' => array(
'Backups' => 'Bekapovi', 'Backups' => 'Bekapovi',
'Backup' => 'Backup', 'Backup' => 'Backap',
'Create Backup' => 'Kreiraj Bekap', 'Create Backup' => 'Kreiraj Bekap',
'Delete' => 'Obriši', 'Delete' => 'Obriši',
'storage' => 'lokacija arhive', 'storage' => 'lokacija arhive',

View File

@@ -0,0 +1,26 @@
<?php
return array(
'backup' => array(
'Backups' => 'Yedekler',
'Backup' => 'Yedek',
'Backup Date' => 'Yedekleme Tarihi',
'Create Backup' => 'Yedek Al',
'Delete' => 'Sil',
'Restore' => 'Geri Yükle',
'storage' => 'depo',
'public' => 'genel',
'plugins' => 'eklentiler',
'Size' => 'Boyut',
'Actions' => 'Eylemler',
'Delete backup: :backup' => ':backup adlı yedek silinsin mi',
'Creating...' => 'Oluşturuluyor...',
'Backup was created' => 'Yedek oluşturuldu',
'Backup was not created' => 'Yedek oluşturulmadı',
'Backup was deleted' => 'Yedek silindi',
'Backup was not deleted' => 'Yedek silinmedi',
'Backup was restored' => 'Yedek geri yüklendi',
'Unzip error' => 'Sıkıştırılmış yedeği açma (unzip) hatası',
'Backup was not restored' => 'Yedek geri yüklenmedi',
)
);

View 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...' => '正在创建...',
)
);

View File

@@ -1,30 +1,28 @@
<h2><?php echo __('Backups', 'backup'); ?></h2> <script>$().ready(function(){$('[name=create_backup]').click(function(){$(this).button('loading');});});</script>
<br />
<?php if (Notification::get('success')) Alert::success(Notification::get('success')); ?> <div class="vertical-align margin-bottom-1">
<div class="text-left row-phone">
<script> <h2><?php echo __('Backups', 'backup'); ?></h2>
$().ready(function(){$('[name=create_backup]').click(function(){$(this).button('loading');});}); </div>
</script> <div class="text-right row-phone">
<?php
<?php echo (
echo ( Form::open(null, array('class' => 'form-inline')) .
Form::open() . Form::hidden('csrf', Security::token()).
Form::hidden('csrf', Security::token()). Form::submit('create_backup', __('Create Backup', 'backup'), array('class' => 'btn btn-phone btn-primary', 'data-loading-text' => __('Creating...', 'backup'))).
Form::checkbox('add_storage_folder', null, true, array('disabled' => 'disabled')) . ' ' . __('storage', 'backup') . ' ' . Html::nbsp(2) . Form::close()
Form::checkbox('add_public_folder') . ' ' . __('public', 'backup') . ' ' . Html::nbsp(2) . );
Form::checkbox('add_plugins_folder') . ' ' . __('plugins', 'backup') . ' ' . Html::nbsp(2) . ?>
Form::submit('create_backup', __('Create Backup', 'backup'), array('class' => 'btn', 'data-loading-text' => __('Creating...', 'backup'))). </div>
Form::close() </div>
);
?>
<!-- Backup_list --> <!-- Backup_list -->
<div class="table-responsive">
<table class="table table-bordered"> <table class="table table-bordered">
<thead> <thead>
<tr> <tr>
<th><?php echo __('Backup', 'backup'); ?></th> <th><?php echo __('Backup', 'backup'); ?></th>
<th><?php echo __('Size', 'backup'); ?></th> <th class="visible-lg hidden-xs"><?php echo __('Size', 'backup'); ?></th>
<th></th> <th></th>
</tr> </tr>
</thead> </thead>
@@ -33,14 +31,21 @@ $().ready(function(){$('[name=create_backup]').click(function(){$(this).button('
<tr> <tr>
<td> <td>
<?php $name = strtotime(str_replace('-', '', basename($backup, '.zip'))); ?> <?php $name = strtotime(str_replace('-', '', basename($backup, '.zip'))); ?>
<?php echo Html::anchor(Date::format($name, 'F jS, Y - g:i A'), Option::get('siteurl').'admin/index.php?id=backup&download='.$backup.'&token='.Security::token()); ?> <?php echo Html::anchor(Date::format($name, 'F jS, Y - g:i A'), Option::get('siteurl').'/admin/index.php?id=backup&download='.$backup.'&token='.Security::token()); ?>
</td> </td>
<td><?php echo Number::byteFormat(filesize(ROOT . DS . 'backups' . DS . $backup)); ?></td> <td class="visible-lg hidden-xs"><?php echo Number::byteFormat(filesize(ROOT . DS . 'backups' . DS . $backup)); ?></td>
<td> <td>
<div class="pull-right"> <div class="pull-right">
<?php
if (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') {
echo Html::anchor(__('Restore', 'backup'),
'index.php?id=backup&restore='.$backup.'&token='.Security::token(),
array('class' => 'btn btn-primary'));
}
?>
<?php echo Html::anchor(__('Delete', 'backup'), <?php echo Html::anchor(__('Delete', 'backup'),
'index.php?id=backup&delete_file='.$backup.'&token='.Security::token(), 'index.php?id=backup&delete_file='.$backup.'&token='.Security::token(),
array('class' => 'btn btn-small', 'onclick' => "return confirmDelete('".__('Delete backup: :backup', 'backup', array(':backup' => Date::format($name, 'F jS, Y - g:i A')))."')")); array('class' => 'btn btn-danger', 'onclick' => "return confirmDelete('".__('Delete backup: :backup', 'backup', array(':backup' => Date::format($name, 'F jS, Y - g:i A')))."')"));
?> ?>
</div> </div>
</td> </td>
@@ -48,4 +53,5 @@ $().ready(function(){$('[name=create_backup]').click(function(){$(this).button('
<?php } ?> <?php } ?>
</tbody> </tbody>
</table> </table>
</div>
<!-- /Backup_list --> <!-- /Backup_list -->

View File

@@ -2,6 +2,7 @@
// Add plugin navigation link // Add plugin navigation link
Navigation::add(__('Blocks', 'blocks'), 'content', 'blocks', 2); Navigation::add(__('Blocks', 'blocks'), 'content', 'blocks', 2);
Dashboard::addNewItem('blocks', __('Blocks', 'blocks'), 'index.php?id=blocks&action=add_block', 2);
/** /**
* Blocks Admin Class * Blocks Admin Class

View File

@@ -25,5 +25,6 @@
'Embed Code' => 'Embed Code', 'Embed Code' => 'Embed Code',
'Shortcode' => 'Shortcode', 'Shortcode' => 'Shortcode',
'PHP Code' => 'PHP Code', 'PHP Code' => 'PHP Code',
'Cancel' => 'Abbrechen',
) )
); );

View File

@@ -25,5 +25,6 @@
'Embed Code' => 'Embed Code', 'Embed Code' => 'Embed Code',
'Shortcode' => 'Shortcode', 'Shortcode' => 'Shortcode',
'PHP Code' => 'PHP Code', 'PHP Code' => 'PHP Code',
'Cancel' => 'Cancel',
) )
); );

View File

@@ -3,27 +3,28 @@
return array( return array(
'blocks' => array( 'blocks' => array(
'Blocks' => 'Bloques', 'Blocks' => 'Bloques',
'Blocks manager' => 'Administrar bloques', 'Blocks manager' => 'Administrador de bloques',
'Delete' => 'Borrar', 'Delete' => 'Eliminar',
'Edit' => 'Editar', 'Edit' => 'Editar',
'Name' => 'Nombre', 'Name' => 'Nombre',
'Create New Block' => 'Crear nuevo bloque', 'Create New Block' => 'Crear nuevo bloque',
'New block' => 'Nuevo bloque', 'New Block' => 'Nuevo bloque',
'Edit block' => 'Editar bloque', 'Edit Block' => 'Editar bloque',
'Save' => 'Guardar', 'Save' => 'Guardar',
'Save and Exit' => 'Guardar y salir', 'Save and Exit' => 'Guardar y salir',
'Actions' => 'Acciones', 'Actions' => 'Acciones',
'Required field' => 'Dato requerido', 'Required field' => 'Dato requerido',
'This block already exists' => 'Este bloque ya esiste', 'This block already exists' => 'Este bloque ya existe',
'This block does not exist' => 'Este bloque no esiste', 'This block does not exist' => 'Este bloque no existe',
'Delete block: :block' => 'Borrar bloque: :block', 'Delete block: :block' => 'Eliminar bloque: :block',
'Block content' => 'Contenido del bloque', 'Block content' => 'Contenido del bloque',
'Block <i>:name</i> deleted' => 'bloque <i>:name</i> borrdo', 'Block <i>:name</i> deleted' => 'Bloque <i>:name</i> eliminado',
'Your changes to the block <i>:name</i> have been saved.' => 'Tus cambios en el bloque <i>:name</i> han sido guardados.', 'Your changes to the block <i>:name</i> have been saved.' => 'Sus cambios en el bloque <i>:name</i> han sido guardados.',
'Delete block: :block' => 'Borrar bloque: :block', 'Delete block: :block' => 'Eliminar bloque: :block',
'View Embed Code' => 'Ver codigo para incrustar', 'View Embed Code' => 'Ver código incrustado',
'Embed Code' => 'Codigo para incrustar', 'Embed Code' => 'Incrustar código',
'Shortcode' => 'Codigo corto', 'Shortcode' => 'Código corto',
'PHP Code' => 'Codigo PHP', 'PHP Code' => 'Código PHP',
'Cancel' => 'Cancelar',
) )
); );

View File

@@ -25,5 +25,6 @@
'Embed Code' => 'کد درج شده', 'Embed Code' => 'کد درج شده',
'Shortcode' => 'کدکوتاه', 'Shortcode' => 'کدکوتاه',
'PHP Code' => 'کد PHP', 'PHP Code' => 'کد PHP',
'Cancel' => 'Cancel',
) )
); );

View File

@@ -25,5 +25,6 @@
'Embed Code' => 'Code intégré', 'Embed Code' => 'Code intégré',
'Shortcode' => 'Code court', 'Shortcode' => 'Code court',
'PHP Code' => 'Code PHP', 'PHP Code' => 'Code PHP',
'Cancel' => 'Cancel',
) )
); );

View File

@@ -25,5 +25,6 @@
'Embed Code' => 'Beágyazott kód', 'Embed Code' => 'Beágyazott kód',
'Shortcode' => 'Shortcode', 'Shortcode' => 'Shortcode',
'PHP Code' => 'PHP Code', 'PHP Code' => 'PHP Code',
'Cancel' => 'Cancel',
) )
); );

View File

@@ -0,0 +1,29 @@
<?php
return array(
'blocks' => array(
'Blocks' => 'Block',
'Blocks manager' => 'Pengelolaan Block',
'Delete' => 'Hapus',
'Edit' => 'Perbaiki',
'Name' => 'Nama',
'Create New Block' => 'Buat Block Baru',
'New Block' => 'Block Baru',
'Edit Block' => 'Edit Block',
'Save' => 'Simpan',
'Save and Exit' => 'Simpan dan Keluar',
'Actions' => 'Tindakan',
'Required field' => 'Isian yang Dibutuhkan',
'This block already exists' => 'Block ini sudah ada',
'This block does not exist' => 'Block ini belum ada',
'Delete block: :block' => 'Hapus Block: :block',
'Block content' => 'Isi Block',
'Block <i>:name</i> deleted' => 'Block <i>:nama</i> dihapus',
'Your changes to the block <i>:name</i> have been saved.' => 'Perubahan pada block <i>:nama</i> telah disimpan.',
'Delete block: :block' => 'Hapus Block: :block',
'View Embed Code' => 'Lihat Embed Code',
'Embed Code' => 'Embed Code',
'Shortcode' => 'Shortcode',
'PHP Code' => 'PHP Code',
)
);

View File

@@ -25,5 +25,6 @@
'Embed Code' => 'Embed Code', 'Embed Code' => 'Embed Code',
'Shortcode' => 'Shortcode', 'Shortcode' => 'Shortcode',
'PHP Code' => 'PHP Code', 'PHP Code' => 'PHP Code',
'Cancel' => 'Cancel',
) )
); );

View File

@@ -0,0 +1,29 @@
<?php
return array(
'blocks' => array(
'Blocks' => 'ブロック',
'Blocks manager' => 'ブロックの管理',
'Delete' => '削除',
'Edit' => '編集',
'Name' => '名前',
'Create New Block' => '新しいブロックを作成',
'New Block' => '新しいブロック',
'Edit Block' => 'ブロックを編集',
'Save' => '保存',
'Save and Exit' => '保存して終了',
'Actions' => 'アクション',
'Required field' => '必須項目',
'This block already exists' => 'このブロックはすでに存在しています',
'This block does not exist' => 'このブロックは存在していません',
'Delete block: :block' => 'ブロックの削除: :block',
'Block content' => 'ブロックの内容',
'Block <i>:name</i> deleted' => '<i>:name</i> ブロックが削除されました',
'Your changes to the block <i>:name</i> have been saved.' => '<i>:name</i> への変更は保存されました。',
'Delete block: :block' => 'ブロックの削除: :block',
'View Embed Code' => '埋め込みコードを表示',
'Embed Code' => '埋め込みコード',
'Shortcode' => 'ショートコード',
'PHP Code' => 'PHPコード',
)
);

View File

@@ -0,0 +1,30 @@
<?php
return array(
'blocks' => array(
'Blocks' => 'ბლოკები',
'Blocks manager' => 'ბლოკების მენეჯერი',
'Delete' => 'წაშლა',
'Edit' => 'რედაქტირება',
'New Block' => 'ახალი ბლოკი',
'Create New Block' => 'ახალი ბლოკის შექმნა',
'Name' => 'სახელი',
'Edit Block' => 'ბლოკის რედაქტირება',
'Save' => 'შენახვა',
'Actions' => 'მოქმედება',
'Save and Exit' => 'შენახვა და შემდეგ გამოსვლა',
'Required field' => 'აუცილებელი ველი',
'This block already exists' => 'ასეთი ბლოკი უკვე არსებობს',
'This block does not exist' => 'ასეთი ბლოკი არ არსებობს',
'Delete block: :block' => 'ბლოკის წაშლა: :block',
'Block content' => 'ბლოკის შემადგენლობა',
'Block <i>:name</i> deleted' => 'ბლოკი <i>:name</i> წაშლილია',
'Your changes to the block <i>:name</i> have been saved.' => 'თქვენი ცვლილებები ბლოკში <i>:name</i> დამახსოვრებულია.',
'Delete block: :block' => 'ბლოკის წაშლა: :block',
'View Embed Code' => 'ჩასაწერი კოდი',
'Embed Code' => 'ჩასაწერი კოდი',
'Shortcode' => 'Shortcode-ი',
'PHP Code' => 'PHP კოდი',
'Cancel' => 'გაუქმება',
)
);

View File

@@ -25,5 +25,6 @@
'Embed Code' => 'Embed Code', 'Embed Code' => 'Embed Code',
'Shortcode' => 'Shortcode', 'Shortcode' => 'Shortcode',
'PHP Code' => 'PHP Code', 'PHP Code' => 'PHP Code',
'Cancel' => 'Cancel',
) )
); );

View File

@@ -25,5 +25,6 @@
'Embed Code' => 'Insluitcode', 'Embed Code' => 'Insluitcode',
'Shortcode' => 'Verkorte code', 'Shortcode' => 'Verkorte code',
'PHP Code' => 'PHP Code', 'PHP Code' => 'PHP Code',
'Cancel' => 'Cancel',
) )
); );

View File

@@ -25,5 +25,6 @@
'Embed Code' => 'Osadzony kod', 'Embed Code' => 'Osadzony kod',
'Shortcode' => 'Krótki kod (shortcode)', 'Shortcode' => 'Krótki kod (shortcode)',
'PHP Code' => 'Kod PHP', 'PHP Code' => 'Kod PHP',
'Cancel' => 'Cancel',
) )
); );

View File

@@ -25,5 +25,6 @@
'Embed Code' => 'Embed Code', 'Embed Code' => 'Embed Code',
'Shortcode' => 'Shortcode', 'Shortcode' => 'Shortcode',
'PHP Code' => 'PHP Code', 'PHP Code' => 'PHP Code',
'Cancel' => 'Cancel',
) )
); );

View File

@@ -25,5 +25,6 @@
'Embed Code' => 'Код для вставки', 'Embed Code' => 'Код для вставки',
'Shortcode' => 'Шорткод', 'Shortcode' => 'Шорткод',
'PHP Code' => 'PHP код', 'PHP Code' => 'PHP код',
'Cancel' => 'Отмена',
) )
); );

View File

@@ -25,5 +25,6 @@
'Embed Code' => 'Vložený kód', 'Embed Code' => 'Vložený kód',
'Shortcode' => 'Skrátený kód', 'Shortcode' => 'Skrátený kód',
'PHP Code' => 'PHP kód', 'PHP Code' => 'PHP kód',
'Cancel' => 'Cancel',
) )
); );

View File

@@ -25,5 +25,6 @@
'Embed Code' => 'Embed Kod', 'Embed Code' => 'Embed Kod',
'Shortcode' => 'Kratak kod', 'Shortcode' => 'Kratak kod',
'PHP Code' => 'PHP kod', 'PHP Code' => 'PHP kod',
'Cancel' => 'Otkaži',
) )
); );

View File

@@ -0,0 +1,30 @@
<?php
return array(
'blocks' => array(
'Blocks' => 'Bloklar',
'Blocks manager' => 'Blok yöneticisi',
'Delete' => 'Sil',
'Edit' => 'Düzenle',
'Name' => 'Ad',
'Create New Block' => 'Yeni Blok Oluştur',
'New Block' => 'Yeni Blok',
'Edit Block' => 'Bloğu Düzenle',
'Save' => 'Kaydet',
'Save and Exit' => 'Kaydet ve Çık',
'Actions' => 'İşlemler',
'Required field' => 'Zorunlu alan',
'This block already exists' => 'Bu blok zaten var.',
'This block does not exist' => 'Blok bulunamadı.',
'Delete block: :block' => ':block adlı blok silinsin mi',
'Block content' => 'Blok içeriği',
'Block <i>:name</i> deleted' => '<i>:name</i> adlı blok silindi.',
'Your changes to the block <i>:name</i> have been saved.' => 'Değişiklikler <i>:name</i> bloğuna kaydedildi.',
'Delete block: :block' => ':block adlı blok silinsin mi',
'View Embed Code' => 'Gömülür Kodu Görüntüle',
'Embed Code' => 'Gömülür Kodu',
'Shortcode' => 'Kısa Kod',
'PHP Code' => 'PHP Kodu',
'Cancel' => 'Vazgeç',
)
);

View File

@@ -25,5 +25,6 @@
'Embed Code' => 'Код для вставки', 'Embed Code' => 'Код для вставки',
'Shortcode' => 'Шорткод', 'Shortcode' => 'Шорткод',
'PHP Code' => 'PHP код', 'PHP Code' => 'PHP код',
'Cancel' => 'Відмінити',
) )
); );

View File

@@ -0,0 +1,29 @@
<?php
return array(
'blocks' => array(
'Blocks' => '版块',
'Blocks manager' => '版块管理',
'Delete' => '删除',
'Edit' => '编辑',
'Name' => '名称',
'Create New Block' => '创建新版块',
'New Block' => '新版块',
'Edit Block' => '编辑版块',
'Save' => '保存',
'Save and Exit' => '保存并退出',
'Actions' => '操作',
'Required field' => '必填字段',
'This block already exists' => '此版块已存在',
'This block does not exist' => '此版块不存在',
'Delete block: :block' => '删除版块: :block',
'Block content' => '版块内容',
'Block <i>:name</i> deleted' => '版块 <i>:name</i> 已删除',
'Your changes to the block <i>:name</i> have been saved.' => '您修改的版块 <i>:name</i> 已保存。',
'Delete block: :block' => '删除版块: :block',
'View Embed Code' => '查看嵌入代码',
'Embed Code' => '嵌入代码',
'Shortcode' => '短代码',
'PHP Code' => 'PHP 代码',
)
);

View File

@@ -1,7 +1,4 @@
<h2><?php echo __('New Block', 'blocks'); ?></h2> <h2 class="margin-bottom-1"><?php echo __('New Block', 'blocks'); ?></h2>
<br />
<?php if (Notification::get('success')) Alert::success(Notification::get('success')); ?>
<?php if (isset($errors['blocks_empty_name']) or isset($errors['blocks_exists'])) $error_class = 'error'; else $error_class = ''; ?> <?php if (isset($errors['blocks_empty_name']) or isset($errors['blocks_exists'])) $error_class = 'error'; else $error_class = ''; ?>
@@ -9,25 +6,26 @@
<?php echo (Form::hidden('csrf', Security::token())); ?> <?php echo (Form::hidden('csrf', Security::token())); ?>
<?php echo (Form::label('name', __('Name', 'blocks'))); ?> <div class="form-group margin-bottom-1">
<?php echo (Form::label('name', __('Name', 'blocks'))); ?>
<?php echo (Form::input('name', $name, array('class' => (isset($errors['blocks_empty_name']) || isset($errors['blocks_exists'])) ? 'form-control error-field' : 'form-control'))); ?>
<?php
if (isset($errors['blocks_empty_name'])) echo '<span class="error-message">'.$errors['blocks_empty_name'].'</span>';
if (isset($errors['blocks_exists'])) echo '<span class="error-message">'.$errors['blocks_exists'].'</span>';
?>
</div>
<?php echo (Form::input('name', $name, array('class' => (isset($errors['blocks_empty_name']) || isset($errors['blocks_exists'])) ? 'input-xxlarge error-field' : 'input-xxlarge'))); ?> <div class="row margin-bottom-1">
<div class="col-xs-12">
<?php Action::run('admin_editor', array(Html::toText($content))); ?>
</div>
</div>
<?php
if (isset($errors['blocks_empty_name'])) echo '&nbsp;&nbsp;&nbsp;<span style="color:red">'.$errors['blocks_empty_name'].'</span>';
if (isset($errors['blocks_exists'])) echo '&nbsp;&nbsp;&nbsp;<span style="color:red">'.$errors['blocks_exists'].'</span>';
?>
<br /><br />
<?php <?php
Action::run('admin_editor', array(Html::toText($content)));
echo ( echo (
Html::br(). Form::submit('add_blocks_and_exit', __('Save and Exit', 'blocks'), array('class' => 'btn btn-phone btn-primary')).Html::nbsp(2).
Form::submit('add_blocks_and_exit', __('Save and Exit', 'blocks'), array('class' => 'btn')).Html::nbsp(2). Form::submit('add_blocks', __('Save', 'blocks'), array('class' => 'btn btn-phone btn-primary')).Html::nbsp(2).
Form::submit('add_blocks', __('Save', 'blocks'), array('class' => 'btn')). Html::anchor(__('Cancel', 'blocks'), 'index.php?id=blocks', array('title' => __('Cancel', 'blocks'), 'class' => 'btn btn-phone btn-default')).
Form::close() Form::close()
); );
?> ?>

View File

@@ -1,7 +1,4 @@
<h2><?php echo __('Edit Block', 'blocks'); ?></h2> <h2 class="margin-bottom-1"><?php echo __('Edit Block', 'blocks'); ?></h2>
<br />
<?php if (Notification::get('success')) Alert::success(Notification::get('success')); ?>
<?php <?php
if ($content !== null) { if ($content !== null) {
@@ -9,31 +6,32 @@
if (isset($errors['blocks_empty_name']) or isset($errors['blocks_exists'])) $error_class = 'error'; else $error_class = ''; if (isset($errors['blocks_empty_name']) or isset($errors['blocks_exists'])) $error_class = 'error'; else $error_class = '';
echo (Form::open()); echo (Form::open());
echo (Form::hidden('csrf', Security::token())); echo (Form::hidden('csrf', Security::token()));
echo (Form::hidden('blocks_old_name', Request::get('filename'))); echo (Form::hidden('blocks_old_name', Request::get('filename')));
?> ?>
<?php echo (Form::label('name', __('Name', 'blocks'))); ?> <div class="form-group margin-bottom-1">
<?php echo (Form::label('name', __('Name', 'blocks'))); ?>
<?php echo (Form::input('name', $name, array('class' => (isset($errors['blocks_empty_name']) || isset($errors['blocks_exists'])) ? 'input-xxlarge error-field' : 'input-xxlarge'))); ?> <?php echo (Form::input('name', $name, array('class' => (isset($errors['blocks_empty_name']) || isset($errors['blocks_exists'])) ? 'form-control error-field' : 'form-control'))); ?>
<?php <?php
if (isset($errors['blocks_empty_name'])) echo '&nbsp;&nbsp;&nbsp;<span style="color:red">'.$errors['blocks_empty_name'].'</span>'; if (isset($errors['blocks_empty_name'])) echo '<span class="error-message">'.$errors['blocks_empty_name'].'</span>';
if (isset($errors['blocks_exists'])) echo '&nbsp;&nbsp;&nbsp;<span style="color:red">'.$errors['blocks_exists'].'</span>'; if (isset($errors['blocks_exists'])) echo '<span class="error-message">'.$errors['blocks_exists'].'</span>';
?> ?>
</div>
<br /><br />
<?php
Action::run('admin_editor', array(Html::toText($content))); <div class="row margin-bottom-1">
<div class="col-xs-12">
<?php Action::run('admin_editor', array(Html::toText($content))); ?>
</div>
</div>
<?php
echo ( echo (
Html::br(). Form::submit('edit_blocks_and_exit', __('Save and Exit', 'blocks'), array('class' => 'btn btn-phone btn-primary')).Html::nbsp(2).
Form::submit('edit_blocks_and_exit', __('Save and Exit', 'blocks'), array('class' => 'btn default')).Html::nbsp(2). Form::submit('edit_blocks', __('Save', 'blocks'), array('class' => 'btn btn-phone btn-primary')). Html::nbsp(2).
Form::submit('edit_blocks', __('Save', 'blocks'), array('class' => 'btn default')). Html::nbsp(). Html::anchor(__('Cancel', 'blocks'), 'index.php?id=blocks', array('title' => __('Cancel', 'blocks'), 'class' => 'btn btn-phone btn-default')).
Form::close() Form::close()
); );

View File

@@ -1,15 +1,15 @@
<h2><?php echo __('Blocks', 'blocks'); ?></h2> <div class="vertical-align margin-bottom-1">
<br /> <div class="text-left row-phone">
<h2><?php echo __('Blocks', 'blocks'); ?></h2>
<?php if(Notification::get('success')) Alert::success(Notification::get('success')); ?> </div>
<div class="text-right row-phone">
<?php <?php
echo ( echo (
Html::anchor(__('Create New Block', 'blocks'), 'index.php?id=blocks&action=add_block', array('title' => __('Create New Block', 'blocks'), 'class' => 'btn default btn-small')). Html::nbsp(3) Html::anchor(__('Create New Block', 'blocks'), 'index.php?id=blocks&action=add_block', array('title' => __('Create New Block', 'blocks'), 'class' => 'btn btn-phone btn-primary'))
); );
?> ?>
</div>
<br /><br /> </div>
<!-- Blocks_list --> <!-- Blocks_list -->
<table class="table table-bordered"> <table class="table table-bordered">
@@ -24,20 +24,21 @@
<tr> <tr>
<td><?php echo basename($block, '.block.html'); ?></td> <td><?php echo basename($block, '.block.html'); ?></td>
<td> <td>
<div class="pull-right"> <div class="pull-right">
<div class="btn-toolbar">
<div class="btn-group"> <div class="btn-group">
<?php echo Html::anchor(__('Edit', 'blocks'), 'index.php?id=blocks&action=edit_block&filename='.basename($block, '.block.html'), array('class' => 'btn btn-actions btn-small')); ?> <?php echo Html::anchor(__('Edit', 'blocks'), 'index.php?id=blocks&action=edit_block&filename='.basename($block, '.block.html'), array('class' => 'btn btn-primary')); ?>
<a class="btn dropdown-toggle btn-actions btn-small" data-toggle="dropdown" href="#" style="font-family:arial;"><span class="caret"></span></a> <button type="button" class="btn dropdown-toggle btn-primary" data-toggle="dropdown">
<ul class="dropdown-menu"> <span class="caret"></span>
<span class="sr-only">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu" role="menu">
<li><?php echo Html::anchor(__('View Embed Code', 'blocks'), 'javascript:;', array('title' => __('View Embed Code', 'blocks'), 'onclick' => '$.monstra.blocks.showEmbedCodes("'.basename($block, '.block.html').'");')); ?></li> <li><?php echo Html::anchor(__('View Embed Code', 'blocks'), 'javascript:;', array('title' => __('View Embed Code', 'blocks'), 'onclick' => '$.monstra.blocks.showEmbedCodes("'.basename($block, '.block.html').'");')); ?></li>
</ul> </ul>
<?php echo Html::anchor(__('Delete', 'blocks'),
'index.php?id=blocks&action=delete_block&filename='.basename($block, '.block.html').'&token='.Security::token(),
array('class' => 'btn btn-actions btn-small btn-actions-default', 'onclick' => "return confirmDelete('".__('Delete block: :block', 'blocks', array(':block' => basename($block, '.block.html')))."')"));
?>
</div> </div>
</div> <?php echo Html::anchor(__('Delete', 'blocks'),
'index.php?id=blocks&action=delete_block&filename='.basename($block, '.block.html').'&token='.Security::token(),
array('class' => 'btn btn-danger', 'onclick' => "return confirmDelete('".__('Delete block: :block', 'blocks', array(':block' => basename($block, '.block.html')))."')"));
?>
</div> </div>
</td> </td>
</tr> </tr>
@@ -46,18 +47,20 @@
</table> </table>
<!-- /Blocks_list --> <!-- /Blocks_list -->
<div id="embedCodes" class="modal hide fade"> <div class="modal fade" id="embedCodes">
<div class="modal-header"> <div class="modal-dialog">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> <div class="modal-content">
<h3><?php echo __('Embed Code', 'blocks'); ?></h3> <div class="modal-header">
</div> <div class="close" data-dismiss="modal">&times;</div>
<div class="modal-body"> <h4 class="modal-title"><?php echo __('Embed Code', 'snippets'); ?></h4>
<p> </div>
<b><?php echo __('Shortcode', 'blocks'); ?></b><br> <div class="modal-body">
<code id="shortcode"></code> <b><?php echo __('Shortcode', 'snippets'); ?></b><br>
<br> <br> <pre><code id="shortcode"></code></pre>
<b><?php echo __('PHP Code', 'blocks'); ?></b><br> <br>
<code id="phpcode"></code> <b><?php echo __('PHP Code', 'snippets'); ?></b><br>
</p> <pre><code id="phpcode"></code></pre>
</div> </div>
</div> </div>
</div>
</div>

Some files were not shown because too many files have changed in this diff Show More