Full Code of monstra-cms/monstra for AI

dev 5f6573facc11 cached
540 files
1.5 MB
400.2k tokens
824 symbols
1 requests
Download .txt
Showing preview only (1,700K chars total). Download the full file or copy to clipboard to get everything.
Repository: monstra-cms/monstra
Branch: dev
Commit: 5f6573facc11
Files: 540
Total size: 1.5 MB

Directory structure:
gitextract_7f0ld_nn/

├── .gitignore
├── CHANGELOG.md
├── LICENSE.md
├── README.md
├── admin/
│   ├── index.php
│   └── themes/
│       └── default/
│           ├── css/
│           │   └── default.css
│           ├── index.template.php
│           ├── js/
│           │   └── default.js
│           └── login.template.php
├── boot/
│   └── defines.php
├── engine/
│   ├── Alert.php
│   ├── Monstra.php
│   ├── Option.php
│   ├── Plugin/
│   │   ├── Action.php
│   │   ├── Backend.php
│   │   ├── Filter.php
│   │   ├── Frontend.php
│   │   ├── I18n.php
│   │   ├── Javascript.php
│   │   ├── Navigation.php
│   │   ├── Plugin.php
│   │   ├── Stylesheet.php
│   │   └── View.php
│   ├── Security.php
│   ├── Shortcode.php
│   ├── Site.php
│   ├── Uri.php
│   ├── Xmldb/
│   │   ├── DB.php
│   │   ├── Table.php
│   │   └── XML.php
│   ├── _init.php
│   └── boot/
│       ├── actions.php
│       ├── defines.php
│       ├── filters.php
│       └── shortcodes.php
├── index.php
├── install.php
├── libraries/
│   ├── Gelato/
│   │   ├── Agent/
│   │   │   └── Agent.php
│   │   ├── Arr/
│   │   │   └── Arr.php
│   │   ├── Cache/
│   │   │   └── Cache.php
│   │   ├── ClassLoader/
│   │   │   └── ClassLoader.php
│   │   ├── Cookie/
│   │   │   └── Cookie.php
│   │   ├── Curl/
│   │   │   └── Curl.php
│   │   ├── Date/
│   │   │   └── Date.php
│   │   ├── Debug/
│   │   │   └── Debug.php
│   │   ├── ErrorHandler/
│   │   │   ├── ErrorHandler.php
│   │   │   └── Resources/
│   │   │       └── Views/
│   │   │           └── Errors/
│   │   │               ├── exception.php
│   │   │               └── production.php
│   │   ├── FileSystem/
│   │   │   ├── Dir.php
│   │   │   └── File.php
│   │   ├── Form/
│   │   │   └── Form.php
│   │   ├── Gelato.php
│   │   ├── Html/
│   │   │   └── Html.php
│   │   ├── Http/
│   │   │   ├── Request.php
│   │   │   └── Response.php
│   │   ├── Image/
│   │   │   └── Image.php
│   │   ├── Inflector/
│   │   │   └── Inflector.php
│   │   ├── Log/
│   │   │   └── Log.php
│   │   ├── Minify/
│   │   │   ├── MinifyCSS.php
│   │   │   ├── MinifyHTML.php
│   │   │   └── MinifyJS.php
│   │   ├── Notification/
│   │   │   └── Notification.php
│   │   ├── Number/
│   │   │   └── Number.php
│   │   ├── README.md
│   │   ├── Registry/
│   │   │   └── Registry.php
│   │   ├── Security/
│   │   │   └── Token.php
│   │   ├── Session/
│   │   │   └── Session.php
│   │   ├── Text/
│   │   │   └── Text.php
│   │   ├── Url/
│   │   │   └── Url.php
│   │   ├── Validation/
│   │   │   └── Valid.php
│   │   ├── Zip/
│   │   │   └── Zip.php
│   │   ├── _logs/
│   │   │   └── .empty
│   │   ├── changelog.txt
│   │   └── license.txt
│   ├── Idiorm/
│   │   └── ORM.php
│   └── PHPMailer/
│       └── PHPMailer.php
├── plugins/
│   ├── box/
│   │   ├── backup/
│   │   │   ├── backup.admin.php
│   │   │   ├── backup.plugin.php
│   │   │   ├── install/
│   │   │   │   └── backup.manifest.xml
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   └── views/
│   │   │       └── backend/
│   │   │           └── index.view.php
│   │   ├── blocks/
│   │   │   ├── blocks.admin.php
│   │   │   ├── blocks.plugin.php
│   │   │   ├── install/
│   │   │   │   └── blocks.manifest.xml
│   │   │   ├── js/
│   │   │   │   ├── .htaccess
│   │   │   │   └── blocks.js
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   └── views/
│   │   │       └── backend/
│   │   │           ├── add.view.php
│   │   │           ├── edit.view.php
│   │   │           └── index.view.php
│   │   ├── dashboard/
│   │   │   ├── dashboard.admin.php
│   │   │   ├── dashboard.plugin.php
│   │   │   ├── install/
│   │   │   │   └── dashboard.manifest.xml
│   │   │   ├── js/
│   │   │   │   ├── .htaccess
│   │   │   │   └── ganalytics.js
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   └── uk.lang.php
│   │   │   └── views/
│   │   │       └── backend/
│   │   │           ├── ga.view.php
│   │   │           └── index.view.php
│   │   ├── editor/
│   │   │   ├── editor.plugin.php
│   │   │   ├── install/
│   │   │   │   └── editor.manifest.xml
│   │   │   └── languages/
│   │   │       ├── cs.lang.php
│   │   │       ├── de.lang.php
│   │   │       ├── en.lang.php
│   │   │       ├── es.lang.php
│   │   │       ├── fa.lang.php
│   │   │       ├── fr.lang.php
│   │   │       ├── hu.lang.php
│   │   │       ├── it.lang.php
│   │   │       ├── ja.lang.php
│   │   │       ├── ka-ge.lang.php
│   │   │       ├── lt.lang.php
│   │   │       ├── nl.lang.php
│   │   │       ├── pl.lang.php
│   │   │       ├── pt-br.lang.php
│   │   │       ├── ru.lang.php
│   │   │       ├── sk.lang.php
│   │   │       ├── sr.lang.php
│   │   │       ├── tr.lang.php
│   │   │       ├── uk.lang.php
│   │   │       └── zh-cn.lang.php
│   │   ├── emails/
│   │   │   ├── css/
│   │   │   │   ├── .htaccess
│   │   │   │   └── inc.css
│   │   │   ├── emails.admin.php
│   │   │   ├── emails.plugin.php
│   │   │   ├── install/
│   │   │   │   └── emails.manifest.xml
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   └── uk.lang.php
│   │   │   └── views/
│   │   │       ├── backend/
│   │   │       │   ├── edit.view.php
│   │   │       │   └── index.view.php
│   │   │       └── emails/
│   │   │           └── email_layout.view.php
│   │   ├── filesmanager/
│   │   │   ├── css/
│   │   │   │   ├── .htaccess
│   │   │   │   └── style.css
│   │   │   ├── filesmanager.admin.php
│   │   │   ├── filesmanager.plugin.php
│   │   │   ├── install/
│   │   │   │   └── filesmanager.manifest.xml
│   │   │   ├── js/
│   │   │   │   ├── .htaccess
│   │   │   │   ├── filesmanager.js
│   │   │   │   └── fileuploader.js
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   └── views/
│   │   │       └── backend/
│   │   │           └── index.view.php
│   │   ├── information/
│   │   │   ├── information.admin.php
│   │   │   ├── information.plugin.php
│   │   │   ├── install/
│   │   │   │   └── information.manifest.xml
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   └── views/
│   │   │       └── backend/
│   │   │           └── index.view.php
│   │   ├── menu/
│   │   │   ├── install/
│   │   │   │   └── menu.manifest.xml
│   │   │   ├── js/
│   │   │   │   ├── .htaccess
│   │   │   │   └── menu.js
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   ├── menu.admin.php
│   │   │   ├── menu.plugin.php
│   │   │   └── views/
│   │   │       ├── backend/
│   │   │       │   ├── add.view.php
│   │   │       │   ├── edit.view.php
│   │   │       │   └── index.view.php
│   │   │       └── frontend/
│   │   │           └── index.view.php
│   │   ├── pages/
│   │   │   ├── install/
│   │   │   │   └── pages.manifest.xml
│   │   │   ├── js/
│   │   │   │   ├── .htaccess
│   │   │   │   └── pages.js
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   ├── pages.admin.php
│   │   │   ├── pages.plugin.php
│   │   │   └── views/
│   │   │       ├── backend/
│   │   │       │   ├── add.view.php
│   │   │       │   ├── edit.view.php
│   │   │       │   └── index.view.php
│   │   │       └── frontend/
│   │   │           ├── available_pages.view.php
│   │   │           └── breadcrumbs.view.php
│   │   ├── plugins/
│   │   │   ├── install/
│   │   │   │   └── plugins.manifest.xml
│   │   │   ├── js/
│   │   │   │   ├── .htaccess
│   │   │   │   └── plugins.js
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   ├── plugins.admin.php
│   │   │   ├── plugins.plugin.php
│   │   │   └── views/
│   │   │       └── backend/
│   │   │           └── index.view.php
│   │   ├── sitemap/
│   │   │   ├── install/
│   │   │   │   └── sitemap.manifest.xml
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   ├── sitemap.plugin.php
│   │   │   └── views/
│   │   │       └── frontend/
│   │   │           └── index.view.php
│   │   ├── snippets/
│   │   │   ├── install/
│   │   │   │   └── snippets.manifest.xml
│   │   │   ├── js/
│   │   │   │   ├── .htaccess
│   │   │   │   └── snippets.js
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   ├── snippets.admin.php
│   │   │   ├── snippets.plugin.php
│   │   │   └── views/
│   │   │       └── backend/
│   │   │           ├── add.view.php
│   │   │           ├── edit.view.php
│   │   │           └── index.view.php
│   │   ├── system/
│   │   │   ├── install/
│   │   │   │   └── system.manifest.xml
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   ├── system.admin.php
│   │   │   ├── system.plugin.php
│   │   │   └── views/
│   │   │       └── backend/
│   │   │           └── index.view.php
│   │   ├── themes/
│   │   │   ├── install/
│   │   │   │   └── themes.manifest.xml
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   ├── themes.admin.php
│   │   │   ├── themes.plugin.php
│   │   │   └── views/
│   │   │       └── backend/
│   │   │           ├── add.view.php
│   │   │           ├── edit.view.php
│   │   │           └── index.view.php
│   │   └── users/
│   │       ├── install/
│   │       │   └── users.manifest.xml
│   │       ├── js/
│   │       │   ├── .htaccess
│   │       │   └── users.js
│   │       ├── languages/
│   │       │   ├── cs.lang.php
│   │       │   ├── de.lang.php
│   │       │   ├── en.lang.php
│   │       │   ├── es.lang.php
│   │       │   ├── fa.lang.php
│   │       │   ├── fr.lang.php
│   │       │   ├── hu.lang.php
│   │       │   ├── id.lang.php
│   │       │   ├── it.lang.php
│   │       │   ├── ja.lang.php
│   │       │   ├── ka-ge.lang.php
│   │       │   ├── lt.lang.php
│   │       │   ├── nl.lang.php
│   │       │   ├── pl.lang.php
│   │       │   ├── pt-br.lang.php
│   │       │   ├── ru.lang.php
│   │       │   ├── sk.lang.php
│   │       │   ├── sr.lang.php
│   │       │   ├── tr.lang.php
│   │       │   ├── uk.lang.php
│   │       │   └── zh-cn.lang.php
│   │       ├── users.admin.php
│   │       ├── users.plugin.php
│   │       └── views/
│   │           ├── backend/
│   │           │   ├── add.view.php
│   │           │   ├── edit.view.php
│   │           │   └── index.view.php
│   │           └── frontend/
│   │               ├── edit.view.php
│   │               ├── index.view.php
│   │               ├── login.view.php
│   │               ├── password_reset.view.php
│   │               ├── profile.view.php
│   │               ├── registration.view.php
│   │               └── userspanel.view.php
│   ├── captcha/
│   │   ├── captcha.plugin.php
│   │   ├── crypt/
│   │   │   ├── .htaccess
│   │   │   ├── cryptographp.cfg.php
│   │   │   ├── cryptographp.fct.php
│   │   │   ├── cryptographp.inc.php
│   │   │   ├── cryptographp.php
│   │   │   ├── fonts/
│   │   │   │   ├── index.html
│   │   │   │   └── luggerbu.txt
│   │   │   ├── images/
│   │   │   │   ├── .htaccess
│   │   │   │   └── index.html
│   │   │   ├── index.html
│   │   │   └── index.php
│   │   ├── install/
│   │   │   ├── captcha.install.php
│   │   │   ├── captcha.manifest.xml
│   │   │   └── captcha.uninstall.php
│   │   └── languages/
│   │       ├── cs.lang.php
│   │       ├── de.lang.php
│   │       ├── en.lang.php
│   │       ├── es.lang.php
│   │       ├── fa.lang.php
│   │       ├── fr.lang.php
│   │       ├── id.lang.php
│   │       ├── it.lang.php
│   │       ├── ka-ge.lang.php
│   │       ├── lt.lang.php
│   │       ├── nl.lang.php
│   │       ├── pl.lang.php
│   │       ├── pt-br.lang.php
│   │       ├── ru.lang.php
│   │       ├── sk.lang.php
│   │       ├── sr.lang.php
│   │       ├── tr.lang.php
│   │       ├── uk.lang.php
│   │       └── zh-cn.lang.php
│   ├── markitup/
│   │   ├── install/
│   │   │   └── markitup.manifest.xml
│   │   ├── markitup/
│   │   │   ├── .htaccess
│   │   │   ├── jquery.markitup.js
│   │   │   ├── sets/
│   │   │   │   └── html/
│   │   │   │       ├── set.js
│   │   │   │       └── style.css
│   │   │   ├── skins/
│   │   │   │   └── simple/
│   │   │   │       └── style.css
│   │   │   └── templates/
│   │   │       ├── preview.css
│   │   │       └── preview.html
│   │   └── markitup.plugin.php
│   └── sandbox/
│       ├── install/
│       │   ├── sandbox.install.php
│       │   ├── sandbox.manifest.xml
│       │   └── sandbox.uninstall.php
│       ├── languages/
│       │   ├── cs.lang.php
│       │   ├── de.lang.php
│       │   ├── en.lang.php
│       │   ├── es.lang.php
│       │   ├── fa.lang.php
│       │   ├── fr.lang.php
│       │   ├── id.lang.php
│       │   ├── it.lang.php
│       │   ├── ka-ge.lang.php
│       │   ├── lt.lang.php
│       │   ├── nl.lang.php
│       │   ├── pl.lang.php
│       │   ├── pt-br.lang.php
│       │   ├── ru.lang.php
│       │   ├── sk.lang.php
│       │   ├── sr.lang.php
│       │   ├── tr.lang.php
│       │   ├── uk.lang.php
│       │   └── zh-cn.lang.php
│       ├── sandbox.admin.php
│       ├── sandbox.plugin.php
│       └── views/
│           ├── backend/
│           │   └── index.view.php
│           └── frontend/
│               └── index.view.php
├── robots.txt
└── rss.php

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# ignore os/app generated files
Thumbs.db
.DS_Store
*.esproj
*.project
*.sublime-project
*.sublime-workspace

# ignore user .htaccess
/.htaccess

# ignore user sitemap
/sitemap.xml

# ignore user defines
/monstra/boot/defines.php

# ignore debug and custom themes
/public/themes/*
/admin/themes/*
!/public/themes/default
!/admin/themes/default

# ignore user plugins
/plugins/*
!/plugins/box
!/plugins/captcha
!/plugins/markitup
!/plugins/sandbox

# ignore user files and folders
/backups/*
/public/*
/storage/*
/tmp/*

================================================
FILE: CHANGELOG.md
================================================
Monstra 3.0.4, 2016-04-05
------------------------
- Fixed User Security by adding a check that compares POST id with SESSION
id for none admin edits
- Fixed ability to read robots.txt
- Stylesheet: Changed minified URIs to eliminate query strings
- FilesManager: added alphabetical order for files and directories
- Localization: Major Fixes for ES locale

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
------------------------
- Update Twitter Bootstrap to 2.3.2
- Security: Added limits for login attempts #104
- Security: Obfuscate users email to prevent spam-bots from sniffing it.
- Core: Added ability to map Monstra Engine Directory.
- Core: Maintenance Mode Improvements
- Core: ORM::configure - driver options added
- Gelato: Image.php fix for PNG files
- Gelato: Number.php: Undefined offset fix
- XMLDB: error select for empty table fix
- Plugin API: Stylesheet.php updates - sourcecode misses a linebreak after minified css
- Files Manager: jasny bootstrap-fileupload - added #89
- Users Plugin: login page fixes
- Users Plugin: Deleting users - fixed by Oleg Gatseluk #158
- Pages Plugin: General method getPages() created #123
- Pages Plugin: page expand ajax bug #115 - fixed
- Pages Plugin: Improved available() method to show only published pages
- Pages Plugin: Bug with pages renaming - fixed
- Monstra Email Templates #164
- Localization: Major Fixes
- Localization: PL added
- Localization: NL added
- .htaccess SEO improvements

Monstra 2.2.1, 2013-04-06
------------------------
- Update Gelato to 1.0.3
- Error Handler turned off for Production environment
- Localization: Farsi(fa) translations fixes.
- Pages Manager: fix translates #107
- Missing Translation on Login Page - fixed #106
- Lithuanian flag and other languages fixes. Thanks to mbarzda

Monstra 2.2.0, 2013-03-25
------------------------
- Mobile Ready! Monstra fully responsive for mobile devices, tablets, and normal computer screens.
- Improved Monstra Architecture!
- New Stand-alone Monstra Library (Gelato) was created! Totally improved old classes and added new classes!
- Monstra Library with new useful classes - ClassLoader, ErrorHandler, Log, MinifyJS, MinifyCSS, MinifyHTML, Token, Registry.
- Adopted PSR-0 PSR-1 PSR-2
- Localization: Farsi(fa), Magyar(hu), Français(fr), Spanish(es), Serbian(sr-yu), Slovakian(sk) translations added. Thanks to Abdulhalim, Lez, Neri, Mapadesign, Hugomano and Nakome.
- Idiorm Updated to 1.3.0
- jQuery Updated to 1.9.1
- Twitter Bootstrap Updated to 2.3.0
- Default Theme: Social Meta Tags - added.
- Default Theme: Hook "theme_meta" - added.
- Admin Default Theme: Added missing meta tags.
- Improve Installer Usability. Flags Added.
- Default Site Email added.
- PHPMailer added.
- Pages Manager: added ability to quickly update page status and page access.
- Intstaller Layout: Added missing meta tags.
- Filesmanager plugin: added ability to view images.
- Filesmanager Plugin: forbidden types array - updated.
- CSRF detection text - updated.
- Engine Uri: code improvements.
- XMLDB: Table Class - fixed select method. Thanks to DmitriyMX
- Bootstrap CSS: Icons url - fixed.
- Plugins Manager: buttons confirm dialog message - fixed.
- Pages Manager: page cloning problem - fixed.
- Localizations: translations fixes.

Monstra 2.1.3, 2012-12-09
------------------------
- Pages Plugin: New shortcodes added - page_author, page_slug, page_url page_available, page_breadcrumbs, page_date, page_content.
- Pages Plugin: add ability to get content for specific page.
- XMLDB: New method factory() added.
- Twitter Bootstrap updated to Version 2.2.2
- Sitemap Plugin: `_blank` removed.
- Filesmanager Plugin: fixes.
- Backup Plugin: fixes.

Monstra 2.1.2, 2012-12-05
------------------------
- Blocks Plugin: added ability create and render inline content blocks with {block_inline} and {block_inline_create}
- Site Module: methods keywords() and description() fixes.
- Pages Plugin: pages.js fixes.
- Admin main index.php fixes.

Monstra 2.1.1, 2012-11-30
------------------------
- Plugins: Minify bug #71 - fixed.
- Menu Plugin: bug with categories #70 - fixed.
- Localization: IT translations - fixed.

Monstra 2.1.0, 2012-11-29
------------------------
- Localization: PT-BR, UK translations added.
- Default theme: hook "theme_header" added.
- System Plugin: new action "admin_system_extra_index_template_actions" added.
- Shortcodes API: new delete() clear() exists() methods added.
- Options API: new exists() method added.
- Core: new constant VERSION - added.
- Core: added ability to load: defines, actions, filters, shortcodes for current environment.
- Defines: deprecated constants: MONSTRA_GZIP_STYLES, MONSTRA_VERSION, MONSTRA_VERSION_ID, MONSTRA_SITEURL, MONSTRA_MOBILE deleted.
- Box Plugins: used Core::VERSION to compare Monstra CMS version.
- Installer: use version_compare() function to compare php versions.
- Installer: Get system timezone with date_default_timezone_get() function.
- Admin Default Theme: general improvements.
- Users Plugin: user profile editing fixed.
- Shortcodes API: bug with similar shortcode names fixed.
- Site: template() method improvements. Added ability to get template from specific theme.
- Menu Plugin: added ability to select children pages.
- Snippets Plugin: added ability to add parameters for snippets.
- Themes Plugin: added ability to add parameters for chunks.
- Pages Plugin: pages expand/collapse feature added.
- Pages Plugin: pages "access" feature added.
- Pages Plugin: tab "seo" changed to "metadata"
- Pages Table: "expand, "access" fields added.
- Information Plugin: new "Directory Permissions" tab added.
- Twitter Bootstrap updated to Version 2.2.1
- MarkitUp! updated to Version 1.1.13
- Sitemap Plugin: links title issue fixed.
- Core: Init Site module on frontend only.
- Core: IDIORM optimization.
- Site Class: code optimization.
- Sitemap Plugin: bug with priority fixed.
- File .gitignore added.
- Monstra logo updated.
- README: general updates
- Pages Plugin: "delete" action fixes.
- Plugins Manager: add ability to Cleanup minify with new plugin installation or plugin uninstallation.
- MarkitUp Plugin: unnecessary files removed.
- XMLDB: select() method fixes.
- XMLDB: new method existsField() added.
- Information Plugin: shows "PHP Built On", "Web Server", "WebServer to PHP Interface" information.
- Installer: general fixes.
- Blocks Plugin: view embed codes feature added.
- Snippets Plugin: view embed codes feature added.
- Text Helper: method strpSlashes() fixed.
- Text Helper: new method increment() added.
- Pages Plugin: method robots() fixes.
- Pages Plugin: improved page author detection.
- Pages Plugin: add, edit, delete, clone actions improvements.
- Users Plugin: apply "content" filter for "about_me" field.
- Plugin API: Stylesheet and Javascript load() methods - fixed.
- Pages Plugin: Page editing date issue - fixed.
- Localization: EN, RU, IT, LT, DE translations fixed.
- Imformation Plugin: config file(defines.php) checking removed.
- Box Plugins: general code refactoring.

Monstra 2.0.1, 2012-10-18
------------------------
- Localization: DE, LT, IT translations added
- Validation Helper: Updated email, ip and url methods with filter_var instead preg_match function.
- Localization: EN, RU translations fixed
- Users Plugin: field "about_me" fixed

Monstra 2.0.0, 2012-10-09
------------------------
- Idiorm Added! Idiorm - a lightweight nearly-zero-configuration object-relational mapper and fluent query builder for PHP5.
- Added Crypt Capthca Plugin
- Users Plugin: Added ability to close users frontend registration. Updated frontend and backend templates. Using Capthca Plugin instead of Captca Helper for more secure.
- Admin Password Reset Page: Capthca Plugin added.
- Backup Plugin: Loading state button added. Shows "Creating..." while site backups create.
- Pages Plugin: Added new actions: admin_pages_action_add, admin_pages_action_edit, admin_pages_action_clone, admin_pages_action_delete
- Pages Plugin: Updated date() method - added ability to set date format.
- Pages Plugin: UI and Logic updates.
- Users Plugin: Email templates added.
- Users Table: Added new fields: hash, about_me
- Users Plugin: Admin - New User Registration Validation - Fixed
- Users Plugin: Added ability to set "about me" information.
- Improved Password Reset Logic.
- Information Plugin: Added new tab "Server" with common server information.
- Box Plugins: CSRF vulnerability resolved.
- Sitemap Plugin: Basic search engine optimization.
- Improved Menu Plugin. Added ability to manage items categories.
- Improved Admin Theme - built with best frontend optimization practice. Updated architecture and User Interface. Admin theme more responsive now!
- Added Twitter Bootstrap 2.1.1.
- Added Twitter Bootstrap icons.
- Dir Helper: Fixed size() method.
- New Default Theme: built with best frontend optimization practice.
- Options API: Updated get() method. Return empty string if option value doesnt exists.
- CSS variables: Added - @theme_site_url @theme_admin_url
- CSS variables: Deleted - @theme_url
- Themes Plugin: Added ability to create/edit/clone JavaScripts. Added ability to change admin theme in one click.
- Apply filter 'content' to Blocks.
- Array Helper: get() method improved. New methods keyExists() isAssoc() set() delete() random() added.
- Plugin API: Fixed Javascript and Stylesheet class.
- Plugin API: Added ability to set view file from current theme folder.
- New options theme_admin_name, theme_site_name, users_frontend_registration added.
- Form Helper: Custom Macros - added
- Install Script Improvments.
- Monstra Localization Improvments. Added locales array to I18N class.
- Translates updates.
- Path updates.
- And a lot of general engine improvements.

Monstra 1.3.1, 2012-09-02
------------------------
- Fix Plugins Output

Monstra 1.3.0, 2012-09-01
------------------------
- Improve Multi-user system. Front-end registration, authorization, profile editing added.
- Improve Default Monstra theme.
- Security: Fix Script Insertion Vulnerability.
- Blocks and Snippets plugins code fix. Issue #35, Issue #34
- XMLDB: new method updateField()
- Plugin API: path updates.
- Dir Helper: new method size()
- Filesmanager: shows directory size.
- Security Helper: update safeName() method.
- Pages Plugin: new method children() Get children pages for a specific parent page.
- Update translates.
- And a lot of general engine improvements.

Monstra 1.2.1, 2012-08-09
------------------------
- Admin styles: add .error class
- Fix translates
- Security: fix Cross Site Request Forgery
- Site Module: fix template() function
- Html Helper: fix nbsp() function
- Site Module: fix template() function

Monstra 1.2.0, 2012-07-03
------------------------
- Improve I18N
- Improve Monstra Check Version: set priority 9999
- XMLDB: fix updateWhere function
- Fix Agent Helper
- Sitemap: use time() instead of mktime()
- Security Helper: add Tokenizer

Monstra 1.1.6, 2012-06-12
------------------------
- Sitemap Plugin: return content instead of displaying.
- Improve content filtering.

Monstra 1.1.5, 2012-06-10
------------------------
- Improve Monstra Error Handler
- Cookie Helper: fix set() function

Monstra 1.1.4, 2012-06-09
------------------------
- Improve Monstra Error Handler

Monstra 1.1.3, 2012-06-06
------------------------
- Improve Monstra Error Handler

Monstra 1.1.2, 2012-06-05
------------------------
- Remove Fatal Error Handler
- File helper: fix writable() function

Monstra 1.1.1, 2012-06-04
------------------------
- Fix error reporting!
- Themes Plugin: fix Chunk class

Monstra 1.1.0, 2012-06-02
------------------------
- Menu plugin: added ability to add plugins(components) to site menu.
- Improve installation script: add ability to change Monstra language.
- Improve installation script: better error checking.
- Improve monstra check version
- Update Users table autoincrement value to 0
- Pages Plugin: return empty meta robots if current component is not pages
- Html Helper: fix arrow() function.
- XMLDB: fix select function.
- Themes Plugin: fix theme navigation item order. set 2
- Time Zones updates
- Fix translates

Monstra 1.0.1, 2012-04-26
------------------------
- Cleanup minify during saving the theme
- add new css variables: @site_url and @theme_url
- Remove deprecated @url css variable

Monstra 1.0.0, 2012-04-24
------------------------
- Initial release


================================================
FILE: LICENSE.md
================================================
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.


================================================
FILE: README.md
================================================
# THIS PROJECT IS NOT SUPPORTED ANYMORE!<br>Check FLEXTYPE.ORG

## Monstra
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
Operation system: Unix, Linux, Windows, Mac OS
Middleware: PHP 5.3.2 or higher with PHP's [SimpleXML module](http://php.net/simplexml) and [Multibyte String module](http://php.net/mbstring)
Webserver: Apache with [Mod Rewrite](http://httpd.apache.org/docs/current/mod/mod_rewrite.html) or Ngnix with [Rewrite Module](http://wiki.nginx.org/HttpRewriteModule)

## Steps to Install
1. [Download the latest version.](http://monstra.org/download)
2. Unzip the contents to a new folder on your local computer.
3. Upload that whole folder with an FTP client to your host.
4. You may also need to recursively CHMOD the folder /storage/, /tmp/, /backups/ and /public/ to 755(or 777) if your host doesn't set it implicitly.
5. Also you may also need to recursively CHMOD the /install.php, /.htaccess and /sitemap.xml to 755(or 777) if your host doesn't set it implicitly.
6. Type http://example.org/install.php in the browser.

## Contributing
1. Help on the [Forum.](http://forum.monstra.org)
2. Donate to keep Monstra free. We will add you to Monstra [Sponsors Page.](http://monstra.org/contribute/sponsors)
3. Develop a new plugin.
4. Create a new theme.
5. Find and [report issues.](https://github.com/monstra-cms/monstra/issues)
6. Link back to [Monstra](http://monstra.org).

## Links
- [Site](http://monstra.org)
- [Forum](http://forum.monstra.org)
- [Documentation](http://monstra.org/documentation)
- [GitHub Documentation](https://github.com/monstra-cms/monstra-cms-documentation)
- [GitHub Repository](https://github.com/monstra-cms/monstra)

## License
See [LICENSE](https://github.com/monstra-cms/monstra/blob/master/LICENSE.md)


================================================
FILE: admin/index.php
================================================
<?php

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


// Main engine defines
define('DS', DIRECTORY_SEPARATOR);
define('ROOT', rtrim(str_replace(array('admin'), array(''), dirname(__FILE__)), '\\/'));
define('BACKEND', true);
define('MONSTRA_ACCESS', true);

// Load Monstra engine _init.php file
require_once ROOT. DS .'engine'. DS .'_init.php';

// Errors var when users login failed
$login_error = '';

// Get users Table
$users = new Table('users');

// Admin login
if (Request::post('login_submit')) {
    if (Cookie::get('login_attempts') && Cookie::get('login_attempts') >= 5) {
        $login_error = __('You are banned for 10 minutes. Try again later', 'users');
    } else {
        $user = $users->select("[login='" . trim(Request::post('login')) . "']", null);
        if (count($user) !== 0) {
            if ($user['login'] == Request::post('login')) {
                if (trim($user['password']) == Security::encryptPassword(Request::post('password'))) {
                    if ($user['role'] == 'admin' || $user['role'] == 'editor') {
                        Session::set('admin', true);
                        Session::set('user_id', (int) $user['id']);
                        Session::set('user_login', (string) $user['login']);
                        Session::set('user_role', (string) $user['role']);
                        Session::set('user_email', (string) $user['email']);
                        Request::redirect('index.php');
                    }
                } else {
                    $login_error = __('Wrong <b>username</b> or <b>password</b>', 'users');

                    if (Cookie::get('login_attempts')) {
                        if (Cookie::get('login_attempts') < 5) {
                            $attempts = Cookie::get('login_attempts') + 1;
                            Cookie::set('login_attempts', $attempts, 600);
                        } else {
                            $login_error = __('You are banned for 10 minutes. Try again later', 'users');
                        }
                    } else {
                        Cookie::set('login_attempts', 1, 600);
                    }
                }
            }
        } else {
            $login_error = __('Wrong <b>username</b> or <b>password</b>', 'users');

            if (Cookie::get('login_attempts')) {
                if (Cookie::get('login_attempts') < 5) {
                    $attempts = Cookie::get('login_attempts') + 1;
                    Cookie::set('login_attempts', $attempts, 600);
                } else {
                    $login_error = __('You are banned for 10 minutes. Try again later', 'users');
                }
            } else {
                Cookie::set('login_attempts', 1, 600);
            }
        }
    }

    Notification::setNow('error', $login_error);
}

// Errors
$errors = array();

$site_url  = Option::get('siteurl');
$site_name = Option::get('sitename');

$user_login = trim(Request::post('login'));

// Reset Password Form Submit
if (Request::post('reset_password_submit')) {
    if (Option::get('captcha_installed') == 'true' && ! CryptCaptcha::check(Request::post('answer'))) {
        $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 (count($errors) == 0) {

        // Get user
        $user = $users->select("[login='" . $user_login . "']", null);

        // Generate new hash
        $new_hash = Text::random('alnum', 12);

        // Update user hash
        $users->updateWhere("[login='" . $user_login . "']", array('hash' => $new_hash));

        $mail = new PHPMailer();
        $mail->CharSet = 'utf-8';
        $mail->ContentType = 'text/html';
        $mail->SetFrom(Option::get('system_email'));
        $mail->AddReplyTo(Option::get('system_email'));
        $mail->AddAddress($user['email'], $user['login']);
        $mail->Subject = __('Your login details for :site_name', 'users', array(':site_name' => $site_name));
        $mail->MsgHTML(View::factory('box/emails/views/emails/email_layout')
            ->assign('site_url', $site_url)
            ->assign('site_name', $site_name)
            ->assign('user_id', $user['id'])
            ->assign('user_login', $user['login'])
            ->assign('new_hash', $new_hash)
            ->assign('email_template', 'reset-password')
            ->render());
        $mail->Send();

        // Set notification
        Notification::set('success', __('Your login details for :site_name has been sent', 'users', array(':site_name' => $site_name)));
        Notification::set('reset_password', 'reset_password');

        // Redirect to password-reset page
        Request::redirect(Site::url().'/admin');
    }

    Notification::setNow('reset_password', 'reset_password');
}

// If admin user is login = true then set is_admin = true
if (Session::exists('admin') && Session::get('admin') == true) {
    $is_admin = true;
} else {
    $is_admin = false;
}

// Logout user from system
if (Request::get('logout') && Request::get('logout') == 'do') {
    Session::destroy();
}

// If is admin then load admin area
if ($is_admin) {

    // If id is empty then redirect to default plugin PAGES
    if (Request::get('id')) {
        $area = Request::get('id');
    } else {
        Request::redirect(Site::url().'/admin/index.php?id=dashboard');
    }

    $plugins_registered = Plugin::$plugins;
    foreach ($plugins_registered as $plugin) {
        $plugins_registered_areas[] = $plugin['id'];
    }

    // Show plugins admin area only for registered plugins
    if (in_array($area, $plugins_registered_areas)) {
        $plugin_admin_area = true;
    } else {
        $plugin_admin_area = false;
    }

    // Backend pre render
    Action::run('admin_pre_render');

    // Display admin template
    require 'themes'. DS . Option::get('theme_admin_name') . DS . 'index.template.php';

    // Backend post render
    Action::run('admin_post_render');
} else {

    // Display login template
    require 'themes'. DS . Option::get('theme_admin_name') . DS . 'login.template.php';
}

// Flush (send) the output buffer and turn off output buffering
ob_end_flush();


================================================
FILE: admin/themes/default/css/default.css
================================================
/************************************
  Monstra
  default.css
*************************************
  CONTENTS
    1. GENERAL
    2. COMPONENTS
    3. MEDIA QUERIES

*************************************
    1. GENERAL
*************************************/

@font-face {
    font-family: 'Glyphicons Halflings';

    src: url('@site_url/public/assets/fonts/glyphicons-halflings-regular.eot');
    src: url('@site_url/public/assets/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),
    url('@site_url/public/assets/fonts/glyphicons-halflings-regular.woff') format('woff'),
    url('@site_url/public/assets/fonts/glyphicons-halflings-regular.ttf') format('truetype'),
    url('@site_url/public/assets/fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg');
}

body {
    background: #fafafa;
}

h1,
h2,
h3,
h4,
h5 {
    color: #222;
}

.error-none {
    display: none;
}

.error-field {
    border: 1px solid red!important;
}

.error-message {
    color: red;
}

a.btn-expand {
    font-size: 14px;
    font-weight: bold;

    padding-right: 4px;
    padding-left: 4px;

    text-decoration: none;

    color: #333;
}

.btn:active,
.btn.active {
    outline: 0;
    background-image: none;
    box-shadow: none;
}

.login-footer,
.login-footer a {
    font-size: 12px;

    color: #777;
}

footer {
    margin-top: 40px;
}

footer,
footer a {
    font-size: 12px;

    color: #777;
}

footer span {
    padding-top: 10px;

    border-top: 1px solid #e0e0e0;
}

footer .highlight {
    color: #333;
}

/*************************************
    2. COMPONENTS
*************************************/

/* Well */
.well {
    color: #555;
    border: none;
    border-radius: 0px;
    background: #fff;
    -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.13);
            box-shadow: 0 1px 3px rgba(0,0,0,.13);

    -webkit-font-smoothing: subpixel-antialiased;
}

.dashboard-well {
    padding-top: 6px;
    padding-bottom: 6px;
}

.dashboard-well a.welcome-back {
    font-size: 16px;

    padding-left: 0;

    text-decoration: none;

    color: #333;
}

/* Admin Form */
.form-signin {
    max-width: 400px;
}

.form-signin {
    margin-top: 40px;
}

.form-signin .administration-area,
.form-signin .reset-password-area {
    margin-top: 40px;
}

/* Dropdown Menu */
.dropdown-menu .divider {
    background-color: #555454;
}

.dropdown-menu {
    border: 1px solid #333;
    background: #333;
    box-shadow: none;
}

.dropdown-menu > li > a {
    color: #eee;
}

/* Navbar */
.navbar-inverse .navbar-nav > li > a {
    color: #eee;
}

.navbar-inverse {
    background: #222;
}

.navbar-default {
    border-radius: 0px;
}

ul.navbar-nav {
    min-height: 60px;
}

.navbar-nav > li {
    min-height: 60px;
}

.navbar-nav > li > a {
    line-height: 30px;
}

.navbar-brand {
    font-size: 24px;
    line-height: inherit;

    padding: 13px 15px;
}

.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .open > a:hover,
.navbar-inverse .navbar-nav > .open > a:focus {
    background: #333;
}

.navbar-inverse .navbar-nav > .active > a,
.navbar-inverse .navbar-nav > .active > a:hover,
.navbar-inverse .navbar-nav > .active > a:focus {
    background: #333;
}

a.navbar-brand {
    font-weight: bold;

    color: #fafafa!important;
}

.navbar-nav .dropdown-menu {
    padding-top: 0;
    padding-bottom: 0;
}

.navbar-nav .dropdown-menu > li > a {
    padding: 7px 20px;
}

.nav > li > a {
    padding-top: 15px;
    padding-right: 20px;
    padding-bottom: 15px;
    padding-left: 20px;
}

.nav > li > a > img {
    width: 28px;
    height: 28px;
    margin: 0 0 0 4px;

    border: 1px solid #888;
}

/* Flat Elements */
.form-control,
.btn,
.dropdown-menu,
.modal-content,
.badge,
.label,
.input-group-addon,
.alert,
.tooltip,
.tooltip-inner,
pre,
code {
    border-radius: 0px;
}
.badge,
.tooltip,
.tooltip-inner,
.label,
pre,
code {
    font-weight: normal;

    text-shadow: none;
}

pre {
    border: none;
}

/* Inputs */
select,
textarea,
input[type="text"],
input[type="password"],
input[type="datetime"],
input[type="datetime-local"],
input[type="date"],
input[type="month"],
input[type="time"],
input[type="week"],
input[type="number"],
input[type="email"],
input[type="url"],
input[type="search"],
input[type="tel"],
input[type="color"],
.form-control,
.uneditable-input {
    color: #3c3c3c;
    border-color: #d0d0d0;
    background-color: #fff;
}
select:focus,
textarea:focus,
input[type="text"]:focus,
input[type="password"]:focus,
input[type="datetime"]:focus,
input[type="datetime-local"]:focus,
input[type="date"]:focus,
input[type="month"]:focus,
input[type="time"]:focus,
input[type="week"]:focus,
input[type="number"]:focus,
input[type="email"]:focus,
input[type="url"]:focus,
input[type="search"]:focus,
input[type="tel"]:focus,
input[type="color"]:focus,
.form-control:focus,
.uneditable-input:focus {
    border-color: #aaaaaa;
    -webkit-box-shadow: 0 0 8px #dce1e5;
       -moz-box-shadow: 0 0 8px #dce1e5;
            box-shadow: 0 0 8px #dce1e5;
}

/* Datapicker */
.datapicker {
    width: 200px;
}

/* Breadcrumb */
.breadcrumb {
    border-radius: 0px;
    background: #fff;
}

/* Tabs */
.nav-tabs > li > a {
    border-radius: 0px;
}

.tab-page {
    background: #fff;
}

.tab-pane > table {
    border-top: none!important;
}

.tab-content {
    overflow: visible;
}

.tab-page {
    padding: 20px 10px 10px;

    border-right: 1px solid #dddddd;
    border-bottom: 1px solid #dddddd;
    border-left: 1px solid #dddddd;
}

/* Tables */
table {
    max-width: 100%;

    border-spacing: 0;
    border-collapse: collapse;

    background-color: transparent;
}
.table {
    width: 100%;
    margin-bottom: 18px;
}
.table th,
.table td {
    line-height: 18px;

    padding: 8px;

    text-align: left;

    border-top: 1px solid #dddddd;
    background: #fff;
}
.table th {
    font-weight: bold;
}
.table thead th {
    vertical-align: bottom;
}
.table colgroup + thead tr:first-child th,
.table colgroup + thead tr:first-child td,
.table thead:first-child tr:first-child th,
.table thead:first-child tr:first-child td {
    border-top: 0;
}
.table tbody + tbody {
    border-top: 2px solid #dddddd;
}
.table-condensed th,
.table-condensed td {
    padding: 4px 5px;
}
.table-bordered {
    border-collapse: separate;

    border: 1px solid #dddddd;
    border-left: 0;

    *border-collapse: collapsed;
}
.table-bordered th:first-child,
.table-bordered td:first-child {
    border-left: 1px solid #dddddd;
}

.table-bordered td:first-child {
    padding-left: 15px;
}

.table-bordered thead:first-child tr:first-child th,
.table-bordered tbody:first-child tr:first-child th,
.table-bordered tbody:first-child tr:first-child td {
    border-top: 0;
}

.table-bordered thead tr th {
    font-weight: bold;

    background-color: #fff;
}

.table-bordered thead:first-child tr:first-child > th:first-child,
.table-bordered tbody:first-child tr:first-child > td:first-child {
    border-top-left-radius: 0px;
}

.table-bordered thead:last-child tr:last-child > th:last-child,
.table-bordered tbody:last-child tr:last-child > td:last-child {
    border-top-right-radius: 0px;
}

.table-striped tbody tr:nth-child(odd) td,
.table-striped tbody tr:nth-child(odd) th {
    background-color: #f9f9f9;
}

.table tbody tr:hover td,
.table tbody tr:hover th {
    background-color: #f5f5f5;
}

.table-bordered th,
.table-bordered td {
    height: 50px;

    border-left: none;
}

.table-bordered > thead > tr {
    height: 45px;
}

td,
th {
    display: table-cell;

    vertical-align: inherit!important;
}

.table-bordered > thead > tr > th,
.table-bordered > tbody > tr > th,
.table-bordered > tfoot > tr > th,
.table-bordered > thead > tr > td,
.table-bordered > tbody > tr > td,
.table-bordered > tfoot > tr > td {
    border: 0;
    border-bottom: 1px solid #ccc;
}

.vertical-align {
    display: table;

    width: 100%;
}

.vertical-align > div {
    display: table-cell;

    vertical-align: middle;
}

.vertical-align > div > h1,
.vertical-align > div > h2,
.vertical-align > div > h3,
.vertical-align > div > h4,
.vertical-align > div > h5 {
    margin-top: 10px;
    margin-bottom: 10px;
}

.margin-top-1 {
    margin-top: 1em;
}

.margin-top-2 {
    margin-top: 2em;
}

.margin-bottom-1 {
    margin-bottom: 1em;
}

.margin-bottom-2 {
    margin-bottom: 2em;
}

/* Editor */
#editor_area {
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    font-size: 14px;
    line-height: 1.428571429;

    height: 400px!important;
    padding: 6px 9px;

    color: #555;
    border: 1px solid #ccc;
}

.markItUpHeader ul li {
    padding: 5px;
}

.markItUpHeader ul .markItUpSeparator {
    display: none;
}

.modal-header {
    border-bottom: 1px solid #f3f3f3;
}

.modal-header .close {
    font-size: 26px;
}

.modal-footer {
    border-top: 1px solid #f3f3f3;
}

.drop-file-here {
    margin-left: 4px;
    padding: 5px 40px;

    color: #ccc;
    border: 3px dashed #d5d5d5;
    background: #ccc;
    background: #f7f7f7;
}

.modal-backdrop {
    background-color: #000;
}

.modal-backdrop.in {
    opacity: 0.8;
}

.modal-content {
    border: none;
    box-shadow: none;
}

#readme .modal-dialog {
    width: 70%;
}

#readme .modal-body {
    padding-top: 0px;
}

#Choco_container_via {
    display: none;
}

/*************************************
    3. MEDIA QUERIES
*************************************/


@media (max-width: 480px) {
    /* MarkItUp */
    .markItUpButton11,
    .markItUpButton12,
    .markItUpButton13,
    .markItUpButton14,
    .markItUpButton15,
    .markItUpButton16,
    .markItUpButton17,
    .markItUpButton18 {
        display: none;
    }
    .markItUpSeparator {
        display: none;
    }

    /* Dashboard */
    .dashboard-well .col-xs-6 {
        width: 100%;
    }
    .dashboard-well .col-xs-6 .pull-right {
        float: left!important;
    }


    .btn-phone {
        width: 100%;
    }

    .row-phone {
        display: block!important;

        width: 100%!important;

        text-align: left!important;
    }

    /* Users */
    .users-btns > div {
        display: block;

        width: 100%;
        margin-top: 10px;

        text-align: left;
    }

    .users-btns > div:nth-child(2) {
        margin-top: 15px;
    }

    .page-users .btn-cancel {
        margin-bottom: 20px;
    }
}


@media (max-width: 768px) {
    .nav > li > a {
        padding: 15px 9px!important;
    }
}

@media (max-width: 320px) {
    .mobile-nav-tabs .nav-tabs > li {
        width: 100%;
        height: 46px;
        margin: 0px;
    }
    .mobile-nav-tabs .nav-tabs > li > a {
        border: 0;
        background: #fff;
    }
    .mobile-nav-tabs .nav-tabs > li.active > a,
    .mobile-nav-tabs .nav-tabs > li.active > a:hover,
    .mobile-nav-tabs .nav-tabs > li.active > a:focus {
        color: #fff;
        border: 0;
        background-color: #428bca;
    }
    .mobile-nav-tabs .nav-tabs {
        margin-top: 10px;
        margin-bottom: 10px;

        border: 0;
    }
    .mobile-nav-tabs .tab-pane > table {
        border-top: 1px solid #ddd!important;
    }
}


================================================
FILE: admin/themes/default/index.template.php
================================================
<?php if ( ! defined('MONSTRA_ACCESS')) exit('No direct script access allowed'); ?><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">

    <meta http-equiv="x-dns-prefetch-control" content="on">
    <link rel="dns-prefetch" href="<?php echo Site::url(); ?>" />
    <link rel="dns-prefetch" href="//www.google-analytics.com" />
    <link rel="dns-prefetch" href="//www.gravatar.com" />

    <title>Monstra :: <?php echo __('Administration', 'system'); ?></title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="Monstra Admin Area" />
    <link rel="icon" href="<?php echo Option::get('siteurl'); ?>/favicon.ico" type="image/x-icon" />
    <link rel="shortcut icon" href="<?php echo Option::get('siteurl'); ?>/favicon.ico" type="image/x-icon" />

    <!-- Styles -->
    <link rel="stylesheet" href="<?php echo Site::url(); ?>/public/assets/css/bootstrap.css" type="text/css" />
    <link rel="stylesheet" href="<?php echo Site::url(); ?>/public/assets/css/messenger.css" type="text/css" />
    <link rel="stylesheet" href="<?php echo Site::url(); ?>/public/assets/css/messenger-theme-flat.css" type="text/css" />
    <?php Stylesheet::add('public/assets/css/chocolat.css', 'backend', 2); ?>
    <?php Stylesheet::add('public/assets/css/bootstrap-fileupload.css', 'backend', 3); ?>
    <?php Stylesheet::add('public/assets/css/icheck-blue.css', 'backend', 4); ?>
    <?php Stylesheet::add('admin/themes/default/css/default.css', 'backend', 5); ?>
    <?php Stylesheet::load(); ?>

    <!-- JavaScripts -->
    <script src="<?php echo Site::url(); ?>/public/assets/js/jquery.min.js"></script>
    <script src="<?php echo Site::url(); ?>/public/assets/js/bootstrap.min.js"></script>
    <script src="<?php echo Site::url(); ?>/public/assets/js/messenger.min.js"></script>
    <script src="<?php echo Site::url(); ?>/public/assets/js/icheck.min.js"></script>
    <?php Javascript::add('public/assets/js/jquery.chocolat.js', 'backend', 3); ?>
    <?php Javascript::add('public/assets/js/bootstrap-fileupload.js', 'backend', 4); ?>
    <?php Javascript::add('admin/themes/default/js/default.js', 'backend', 5); ?>
    <?php Javascript::load(); ?>

    <?php Action::run('admin_header'); ?>

    <script>
        $(document).ready(function() {

          $('.chocolat').Chocolat({
              overlayColor          : '#000',
              leftImg               : "<?php echo Option::get('siteurl'); ?>/public/assets/img/chocolat/left.gif",
              rightImg              : "<?php echo Option::get('siteurl'); ?>/public/assets/img/chocolat/right.gif",
              closeImg              : "<?php echo Option::get('siteurl'); ?>/public/assets/img/chocolat/close.gif",
              loadingImg            : "<?php echo Option::get('siteurl'); ?>/public/assets/img/chocolat/loading.gif"
          });

          $('input').iCheck({
              checkboxClass: 'icheckbox_square-blue',
              radioClass: 'iradio_square-blue',
              increaseArea: '20%'
          });

        });
    </script>

    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7/html5shiv.js"></script>
      <script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.js"></script>
    <![endif]-->
  </head>

  <body class="page-<?php echo Request::get('id'); ?>">

    <nav class="navbar navbar-default navbar-inverse" role="navigation">
      <div class="container">
          <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
              <span class="sr-only">Toggle navigation</span>
              <span class="icon-bar"></span>
              <span class="icon-bar"></span>
              <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="<?php echo Site::url(); ?>/admin/index.php?id=dashboard">MONSTRA</a>
          </div>

          <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav">
              <li<?php if (Request::get('id') == 'dashboard') { ?> class="active"<?php } ?>><a href="<?php echo Site::url(); ?>/admin/index.php?id=dashboard"><?php echo __('Dashboard', 'dashboard'); ?></a></li>
              <li class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo __('Content', 'pages'); ?> <b class="caret"></b></a>
                <ul class="dropdown-menu">
                    <?php Navigation::draw('content'); ?>
                </ul>
              </li>
              <?php if (Session::exists('user_role') && in_array(Session::get('user_role'), array('admin'))) { ?>
              <li class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo __('Extends', 'system'); ?> <b class="caret"></b></a>
                <ul class="dropdown-menu">
                    <?php Navigation::draw('extends'); ?>
                </ul>
              </li>
              <?php } ?>
              <li class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo __('System', 'system'); ?> <b class="caret"></b></a>
                <ul class="dropdown-menu">
                    <?php Navigation::draw('system'); ?>
                </ul>
              </li>
              <li class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo __('Help', 'system'); ?> <b class="caret"></b></a>
                <ul class="dropdown-menu">
                    <li><a href="http://monstra.org/documentation" target="_blank"><?php echo __('Documentation', 'system'); ?></a></li>
                    <?php if (Option::get('language') == 'ru') { ?>
                    <li><a href="http://ru.forum.monstra.org" target="_blank"><?php echo __('Official Support Forum', 'system'); ?></a></li>
                    <?php } else { ?>
                    <li><a href="http://forum.monstra.org" target="_blank"><?php echo __('Official Support Forum', 'system'); ?></a></li>
                    <?php } ?>
                </ul>
              </li>
            </ul>
            <ul class="nav navbar-nav navbar-right">
              <li><a href="<?php echo Site::url(); ?>" target="_blank"><?php echo __('View Site', 'system'); ?></a></li>
              <li class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo Session::get('user_login'); ?> <img src="<?php echo Users::getGravatarURL(Session::get('user_email'), 28); ?>" alt=""> <b class="caret"></b></a>
                <ul class="dropdown-menu">
                  <li><a href="<?php echo Site::url(); ?>/admin/index.php?id=users&action=edit&user_id=<?php echo Session::get('user_id'); ?>"><?php echo __('Profile', 'users')?></a></li>
                  <li><a href="<?php echo Site::url(); ?>/admin/?logout=do"><?php echo __('Log Out', 'users'); ?></a></li>
                </ul>
              </li>
            </ul>
          </div>
      </div>
    </nav>

    <div class="container">

        <?php
            // Monstra Notifications
            Notification::get('success') AND Alert::success(Notification::get('success'));
            Notification::get('warning') AND Alert::warning(Notification::get('warning'));
            Notification::get('error')   AND Alert::error(Notification::get('error'));
        ?>

        <div id="update-monstra"></div>
        <div><?php Action::run('admin_pre_template'); ?></div>
        <div>
            <?php
                if ($plugin_admin_area) {
                    if (is_callable(ucfirst(Plugin::$plugins[$area]['id']).'Admin::main')) {
                        call_user_func(ucfirst(Plugin::$plugins[$area]['id']).'Admin::main');
                    } else {
                        echo '<div class="message-error">'.__('Plugin main admin function does not exist', 'system').'</div>';
                    }
                } else {
                    echo '<div class="message-error">'.__('Plugin does not exist', 'system').'</div>';
                }
            ?>
        </div>
        <div><?php Action::run('admin_post_template'); ?></div>
      </div>
      <div class="margin-top-1  margin-bottom-1 hidden-md"></div>
      <footer class="container visible-md visible-lg">
          <p class="pull-right">
            <span>
              <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; ?>
            </span>
          </p>
      </footer>
</body>
</html>


================================================
FILE: admin/themes/default/js/default.js
================================================
/**
 * Monstra JS module
 *
 * This source file is part of the Monstra Engine. More information,
 * documentation and tutorials can be found at http://monstra.org
 *
 * @package     Monstra
 *
 * @author      Romanenko Sergey / Awilum <awilum@msn.com>
 * @copyright   2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/* Confirm delete */
function confirmDelete(msg){var data=confirm(msg+" ?"); return data;}

/* Messanger */
Messenger.options = {
    extraClasses: 'messenger-fixed messenger-on-bottom messenger-on-right',
    theme: 'flat'
}

================================================
FILE: admin/themes/default/login.template.php
================================================
<?php  if ( ! defined('MONSTRA_ACCESS')) exit('No direct script access allowed'); ?><!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Monstra :: <?php echo __('Administration', 'system'); ?></title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta name="description" content="Monstra Admin Area">
        <link rel="icon" href="<?php echo Option::get('siteurl'); ?>/favicon.ico" type="image/x-icon" />
        <link rel="shortcut icon" href="<?php echo Option::get('siteurl'); ?>/favicon.ico" type="image/x-icon" />

        <!-- Styles -->
        <link rel="stylesheet" href="<?php echo Site::url(); ?>/public/assets/css/bootstrap.css" type="text/css" />
        <link rel="stylesheet" href="<?php echo Site::url(); ?>/public/assets/css/messenger.css" type="text/css" />
        <link rel="stylesheet" href="<?php echo Site::url(); ?>/public/assets/css/messenger-theme-flat.css" type="text/css" />
        <?php Stylesheet::add('public/assets/css/bootstrap-lightbox.css', 'backend', 2); ?>
        <?php Stylesheet::add('public/assets/css/bootstrap-fileupload.css', 'backend', 3); ?>
        <?php Stylesheet::add('admin/themes/default/css/default.css', 'backend', 5); ?>
        <?php Stylesheet::load(); ?>

        <!-- JavaScripts -->
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
        <script src="<?php echo Site::url(); ?>/public/assets/js/bootstrap.min.js"></script>
        <script src="<?php echo Site::url(); ?>/public/assets/js/messenger.min.js"></script>
        <script src="<?php echo Site::url(); ?>/public/assets/js/messenger-theme-flat.js"></script>
        <?php Javascript::add('public/assets/js/bootstrap-lightbox.js', 'backend', 3); ?>
        <?php Javascript::add('public/assets/js/bootstrap-fileupload.js', 'backend', 4); ?>
        <?php Javascript::add('admin/themes/default/js/default.js', 'backend', 5); ?>
        <?php Javascript::load(); ?>

        <script type="text/javascript">
            $().ready(function () {
                <?php if (Notification::get('reset_password') == 'reset_password') { ?>
                    $('.reset-password-area, .administration-btn').show();
                    $('.administration-area, .reset-password-btn').hide();
                <?php } else { ?>
                    $('.reset-password-area, .administration-btn').hide();
                    $('.administration-area, .reset-password-btn').show();
                <?php } ?>

                $('.reset-password-btn').click(function() {
                    $('.reset-password-area, .administration-btn').show();
                    $('.administration-area, .reset-password-btn').hide();
                });

                $('.administration-btn').click(function() {
                    $('.reset-password-area, .administration-btn').hide();
                    $('.administration-area, .reset-password-btn').show();
                });
            });
        </script>

        <?php Action::run('admin_header'); ?>

    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7/html5shiv.js"></script>
      <script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.js"></script>
    <![endif]-->
    </head>
    <body class="login-body">

        <?php
            // Monstra Notifications
            Notification::get('success') AND Alert::success(Notification::get('success'));
            Notification::get('warning') AND Alert::warning(Notification::get('warning'));
            Notification::get('error')   AND Alert::error(Notification::get('error'));
        ?>

        <div class="container form-signin">

            <div class="text-center"><a class="brand" href="<?php echo Option::get('siteurl'); ?>/admin"><img src="<?php echo Option::get('siteurl'); ?>/public/assets/img/monstra-logo-256px.png" alt="monstra" /></a></div>
            <div class="administration-area well">
                <div>
                    <form method="post">
                        <div class="form-group">
                            <label><?php echo __('Username', 'users'); ?></label>
                            <input class="form-control" name="login" type="text" />
                        </div>
                        <div class="form-group">
                            <label><?php echo __('Password', 'users'); ?></label>
                            <input class="form-control" name="password" type="password" />
                        </div>
                        <div class="form-group">
                            <input type="submit" name="login_submit" class="btn btn-primary" value="<?php echo __('Log In', 'users'); ?>" />
                        </div>
                    </form>
                </div>
            </div>

            <div class="reset-password-area well">
                <div>
                    <form method="post">
                        <div class="form-group">
                        <label><?php echo __('Username', 'users'); ?></label>
                        <input name="login" class="form-control" type="text" value="<?php echo $user_login; ?>" />
                        </div>
                        <?php if (Option::get('captcha_installed') == 'true') { ?>
                        <div class="form-group">
                        <label><?php echo __('Captcha', 'users'); ?></label>
                        <input type="text" name="answer" class="form-control">
                        <br>
                        <?php CryptCaptcha::draw(); ?>
                        </div>
                        <?php } ?>
                        <br>
                        <?php
                            if (count($errors) > 0) {
                                foreach ($errors as $error) {
                                    Alert::error($error);
                                }
                            }
                        ?>
                        <div class="form-group">
                            <input type="submit" name="reset_password_submit" class="btn btn-primary" value="<?php echo __('Send New Password', 'users')?>" />
                        </div>
                    </form>
                </div>
            </div>

        </div>

        <div class="login-footer">

            <div class="text-center">
                <a href="<?php echo Option::get('siteurl'); ?>"><?php echo __('Back to Website', 'system');?></a> -
                <a class="reset-password-btn" href="javascript:;"><?php echo __('Forgot your password ?', 'system');?></a>
                <a class="administration-btn" href="javascript:;"><?php echo __('Log In', 'users');?></a>
            </div>

            <div class="text-center">
                © 2012 - 2016 <a href="http://monstra.org/about/license" target="_blank">Monstra</a> – <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?>
            </div>
        </div>
    </body>
</html>


================================================
FILE: boot/defines.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra Defines
 */

/**
 * The filesystem path to the site 'themes' folder
 */
define('THEMES_SITE', ROOT . DS . 'public' . DS . 'themes');

/**
 * The filesystem path to the admin 'themes' folder
 */
define('THEMES_ADMIN', ROOT . DS . 'admin' . DS . 'themes');

/**
 * The filesystem path to the 'plugins' folder
 */
define('PLUGINS', ROOT . DS . 'plugins');

/**
 * The filesystem path to the 'box' folder which is contained within
 * the 'plugins' folder
 */
define('PLUGINS_BOX', PLUGINS . DS . 'box');

/**
 * The filesystem path to the 'storage' folder
 */
define('STORAGE', ROOT . DS . 'storage');

/**
 * The filesystem path to the 'xmldb' folder
 */
define('XMLDB', STORAGE . DS . 'database');

/**
 * The filesystem path to the 'cache' folder
 */
define('CACHE', ROOT . DS . 'tmp' . DS . 'cache');

/**
 * The filesystem path to the 'minify' folder
 */
define('MINIFY', ROOT . DS . 'tmp' . DS . 'minify');

/**
 * The filesystem path to the 'logs' folder
 */
define('LOGS', ROOT . DS . 'tmp' . DS . 'logs');

/**
 * The filesystem path to the 'assets' folder
 */
define('ASSETS', ROOT . DS . 'public' . DS . 'assets');

/**
 * The filesystem path to the 'uploads' folder
 */
define('UPLOADS', ROOT . DS . 'public' . DS . 'uploads');

/**
 * Set password salt
 */
define('MONSTRA_PASSWORD_SALT', 'YOUR_SALT_HERE');

/**
 * Set date format
 */
define('MONSTRA_DATE_FORMAT', 'Y-m-d / H:i:s');

/**
 * Set eval php
 */
define('MONSTRA_EVAL_PHP', false);

/**
 * Check Monstra CMS version
 */
define('CHECK_MONSTRA_VERSION', true);

/**
 * Set gzip output
 */
define('MONSTRA_GZIP', false);

/**
 * Monstra database settings
 */
//define('MONSTRA_DB_DSN', 'mysql:dbname=monstra;host=localhost;port=3306');
//define('MONSTRA_DB_USER', 'root');
//define('MONSTRA_DB_PASSWORD', 'password');



================================================
FILE: engine/Alert.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


class Alert
{
    /**
     * Protected constructor since this is a static class.
     *
     * @access  protected
     */
    protected function __construct()
    {
        // Nothing here
    }

    /**
     * Show success message
     *
     *  <code>
     *      Alert::success('Message here...');
     *  </code>
     *
     * @param string  $message Message
     * @param integer $seconds Seconds
     */
    public static function success($message, $seconds = 3)
    {
        // Redefine vars
        $message = (string) $message;
        $seconds    = (int) $seconds;

        echo '<script type="text/javascript">
                Messenger().post({
                    type: "success",
                    message : "'.$message.'",                    
                    hideAfter: '.$seconds.'
                });
             </script>';
    }

    /**
     * Show warning message
     *
     *  <code>
     *      Alert::warning('Message here...');
     *  </code>
     *
     * @param string  $message Message
     * @param integer $seconds Seconds
     */
    public static function warning($message, $seconds = 3)
    {
        // Redefine vars
        $message = (string) $message;
        $seconds    = (int) $seconds;

        echo '<script type="text/javascript">
                Messenger().post({
                    type: "info",
                    message : "'.$message.'",
                    hideAfter: '.$seconds.'
                });
             </script>';
    }

    /**
     * Show error message
     *
     *  <code>
     *      Alert::error('Message here...');
     *  </code>
     *
     * @param string  $message Message
     * @param integer $seconds Seconds
     */
    public static function error($message, $seconds = 3)
    {
        // Redefine vars
        $message = (string) $message;
        $seconds    = (int) $seconds;

        echo '<script type="text/javascript">
                Messenger().post({
                    type: "error",
                    message : "'.$message.'",
                    hideAfter: '.$seconds.'
                });
             </script>';
    }
}


================================================
FILE: engine/Monstra.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Monstra
{
    /**
     * An instance of the Monstra class
     *
     * @var core
     */
    protected static $instance = null;

    /**
     * Common environment type constants for consistency and convenience
     */
    const PRODUCTION  = 1;
    const STAGING     = 2;
    const TESTING     = 3;
    const DEVELOPMENT = 4;

    /**
     * The version of Monstra
     */
    const VERSION = '3.0.4';


    /**
     * Monstra environment
     *
     * @var string
     */
    public static $environment = Monstra::PRODUCTION;

    /**
     * Monstra environment names
     *
     * @var array
     */
    public static $environment_names = array(
        Monstra::PRODUCTION  => 'production',
        Monstra::STAGING     => 'staging',
        Monstra::TESTING     => 'testing',
        Monstra::DEVELOPMENT => 'development',
    );

    /**
     * Protected clone method to enforce singleton behavior.
     *
     * @access  protected
     */
    protected function __clone()
    {
        // Nothing here.
    }

    /**
     * Protected Construct
     */
    protected function __construct()
    {
        /**
         * Load core defines
         */
        Monstra::loadDefines();

        /**
         * Compress HTML with gzip
         */
        if (MONSTRA_GZIP) {
            if (! ob_start("ob_gzhandler")) {
                ob_start();
            }
        } else {
            ob_start();
        }

        /**
         * Send default header and set internal encoding
         */
        header('Content-Type: text/html; charset=UTF-8');
        function_exists('mb_language') and mb_language('uni');
        function_exists('mb_regex_encoding') and mb_regex_encoding('UTF-8');
        function_exists('mb_internal_encoding') and mb_internal_encoding('UTF-8');

        /**
         * Gets the current configuration setting of magic_quotes_gpc
         * and kill magic quotes
         */
        if (get_magic_quotes_gpc()) {
            function stripslashesGPC(&$value)
            {
                $value = stripslashes($value);
            }
            array_walk_recursive($_GET, 'stripslashesGPC');
            array_walk_recursive($_POST, 'stripslashesGPC');
            array_walk_recursive($_COOKIE, 'stripslashesGPC');
            array_walk_recursive($_REQUEST, 'stripslashesGPC');
        }

        /**
         * Set Gelato Display Errors to False for Production environment.
         */
        if (Monstra::$environment == Monstra::PRODUCTION) {
            define('GELATO_DEVELOPMENT', false);
        }

        /**
         * Define Monstra Folder for Gelato Logs
         */
        define('GELATO_LOGS_PATH', LOGS);

        /**
         * Include Gelato Library
         */
        include ROOT . DS . 'libraries'. DS .'Gelato'. DS .'Gelato.php';

        /**
         * Map Monstra Engine Directory
         */
        ClassLoader::directory(ROOT . DS . 'engine' . DS);

        /**
         * Map all Monstra Classes
         */
        ClassLoader::mapClasses(array(

            // Site Modules
            'Security'  => ROOT . DS .'engine'. DS .'Security.php',
            'Uri'       => ROOT . DS .'engine'. DS .'Uri.php',
            'Site'      => ROOT . DS .'engine'. DS .'Site.php',
            'Alert'     => ROOT . DS .'engine'. DS .'Alert.php',

            // XMLDB API
            'XML'       => ROOT . DS .'engine'. DS .'Xmldb'. DS .'XML.php',
            'DB'        => ROOT . DS .'engine'. DS .'Xmldb'. DS .'DB.php',
            'Table'     => ROOT . DS .'engine'. DS .'Xmldb'. DS .'Table.php',

            // Plugin API
            'Plugin'     => ROOT . DS .'engine'. DS .'Plugin'. DS .'Plugin.php',
            'Frontend'   => ROOT . DS .'engine'. DS .'Plugin'. DS .'Frontend.php',
            'Backend'    => ROOT . DS .'engine'. DS .'Plugin'. DS .'Backend.php',
            'Action'     => ROOT . DS .'engine'. DS .'Plugin'. DS .'Action.php',
            'Filter'     => ROOT . DS .'engine'. DS .'Plugin'. DS .'Filter.php',
            'View'       => ROOT . DS .'engine'. DS .'Plugin'. DS .'View.php',
            'I18n'       => ROOT . DS .'engine'. DS .'Plugin'. DS .'I18n.php',
            'Stylesheet' => ROOT . DS .'engine'. DS .'Plugin'. DS .'Stylesheet.php',
            'Javascript' => ROOT . DS .'engine'. DS .'Plugin'. DS .'Javascript.php',
            'Navigation' => ROOT . DS .'engine'. DS .'Plugin'. DS .'Navigation.php',

            // Option API
            'Option'    => ROOT . DS .'engine'. DS .'Option.php',

            // Shortcode API
            'Shortcode' => ROOT . DS .'engine'. DS .'Shortcode.php',

            // Idiorm
            'ORM'       => ROOT . DS .'libraries'. DS . 'Idiorm'. DS .'ORM.php',

            // PHPMailer
            'PHPMailer' => ROOT . DS .'libraries'. DS . 'PHPMailer'. DS .'PHPMailer.php',
        ));

        /**
         *  Start session
         */
        Session::start();

        /**
         * Init Idiorm
         */
        if (defined('MONSTRA_DB_DSN')) {
            ORM::configure(MONSTRA_DB_DSN);
            ORM::configure('username', MONSTRA_DB_USER);
            ORM::configure('password',  MONSTRA_DB_PASSWORD);
            ORM::configure('driver_options', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
        }

        /**
         * Auto cleanup if DEVELOPMENT environment
         */
        if (Monstra::$environment == Monstra::DEVELOPMENT) {
            Monstra::cleanTmp();
        }

        /**
         * Set Cache dir
         */
        Cache::configure('cache_dir', CACHE);

        /**
         * Init Options API module
         */
        Option::init();

        /**
         * Set default 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'));
        }

        /**
         * Sanitize URL to prevent XSS - Cross-site scripting
         */
        Security::runSanitizeURL();

        /**
         * Load default
         */
        Monstra::loadPluggable();

        /**
         * Init I18n
         */
        I18n::init(Option::get('language'));

        /**
         * Init Plugins API
         */
        Plugin::init();

        /**
         * Init Notification service
         */
        Notification::init();

        /**
         * Init site module
         */
        if (! BACKEND) {
            Site::init();
        }
    }

    /**
     * Load Defines
     */
    protected static function loadDefines()
    {
        $root_defines         = ROOT . DS . 'boot' . DS . 'defines.php';
        $environment_defines  = ROOT . DS . 'boot' . DS . Monstra::$environment_names[Monstra::$environment] . DS . 'defines.php';
        $monstra_defines      = ROOT . DS . 'engine' . DS . 'boot' . DS . 'defines.php';

        if (file_exists($root_defines)) {
            include $root_defines;
        } elseif (file_exists($environment_defines)) {
            include $environment_defines;
        } elseif (file_exists($monstra_defines)) {
            include $monstra_defines;
        } else {
            throw new RuntimeException("The defines file does not exist.");
        }
    }

    /**
     * Load Pluggable
     */
    protected static function loadPluggable()
    {
        $root_pluggable         = ROOT . DS . 'boot';
        $environment_pluggable  = ROOT . DS . 'boot' . DS . Monstra::$environment_names[Monstra::$environment];
        $monstra_pluggable      = ROOT . DS . 'engine' . DS . 'boot';

        if (file_exists($root_pluggable . DS . 'filters.php')) {
            include $root_pluggable . DS . 'filters.php';
        } elseif (file_exists($environment_pluggable . DS . 'filters.php')) {
            include $environment_pluggable . DS . 'filters.php';
        } elseif (file_exists($monstra_pluggable . DS . 'filters.php')) {
            include $monstra_pluggable . DS . 'filters.php';
        } else {
            throw new RuntimeException("The pluggable filters.php file does not exist.");
        }

        if (file_exists($root_pluggable . DS . 'actions.php')) {
            include $root_pluggable . DS . 'actions.php';
        } elseif (file_exists($environment_pluggable . DS . 'actions.php')) {
            include $environment_pluggable . DS . 'actions.php';
        } elseif (file_exists($monstra_pluggable . DS . 'actions.php')) {
            include $monstra_pluggable . DS . 'actions.php';
        } else {
            throw new RuntimeException("The pluggable actions.php file does not exist.");
        }

        if (file_exists($root_pluggable . DS . 'shortcodes.php')) {
            include $root_pluggable . DS . 'shortcodes.php';
        } elseif (file_exists($environment_pluggable . DS . 'shortcodes.php')) {
            include $environment_pluggable . DS . 'shortcodes.php';
        } elseif (file_exists($monstra_pluggable . DS . 'shortcodes.php')) {
            include $monstra_pluggable . DS . 'shortcodes.php';
        } else {
            throw new RuntimeException("The pluggable shortcodes.php file does not exist.");
        }
    }

    /**
     * Clean Monstra TMP folder.
     */
    public static function cleanTmp()
    {
        // Cleanup minify
        if (count($files = File::scan(MINIFY, array('css', 'js', 'php'))) > 0) {
            foreach ($files as $file) {
                File::delete(MINIFY . DS . $file);
            }
        }

        // Cleanup cache
        if (count($namespaces = Dir::scan(CACHE)) > 0) {
            foreach ($namespaces as $namespace) {
                Dir::delete(CACHE . DS . $namespace);
            }
        }
    }

    /**
     * Initialize Monstra Engine
     *
     * @return Monstra
     */
    public static function init()
    {
        if (! isset(self::$instance)) {
            self::$instance = new Monstra();
        }
        return self::$instance;
    }
}


================================================
FILE: engine/Option.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


class Option
{
    /**
     * Options
     *
     * @var array
     */
    protected static $options = null;

    /**
     * An instance of the Option class
     *
     * @var option
     */
    protected static $instance = null;

    /**
     * Initializing options
     *
     * @param string $name Options file
     */
    public static function init()
    {
        if (! isset(self::$instance)) {
            self::$instance = new Option();
        }
        return self::$instance;
    }

    /**
     * Protected clone method to enforce singleton behavior.
     *
     * @access  protected
     */
    protected function __clone()
    {
        // Nothing here.
    }

    /**
     *  Construct
     */
    protected function __construct()
    {
        Option::$options = new Table('options');
    }

    /**
     * Add a new option
     *
     *  <code>
     *      Option::add('pages_limit', 10);
     *      Option::add(array('pages_count' => 10, 'pages_default' => 'home'));
     *  </code>
     *
     * @param  mixed   $option Name of option to add.
     * @param  mixed   $value  Option value.
     * @return boolean
     */
    public static function add($option, $value = null)
    {
        if (is_array($option)) {
            foreach ($option as $k => $v) {
                $_option = Option::$options->select('[name="'.$k.'"]', null);
                if (count($_option) == 0) {
                    Option::$options->insert(array('name' => $k, 'value' => $v));
                }
            }
        } else {
            $_option = Option::$options->select('[name="'.$option.'"]', null);
            if (count($_option) == 0) {
                return Option::$options->insert(array('name' => $option, 'value' => $value));
            }
        }
    }

    /**
     * Update option value
     *
     *  <code>
     *      Option::update('pages_limit', 12);
     *      Option::update(array('pages_count' => 10, 'pages_default' => 'home'));
     *  </code>
     *
     * @param  mixed   $option Name of option to update.
     * @param  mixed   $value  Option value.
     * @return boolean
     */
    public static function update($option, $value = null)
    {
        if (is_array($option)) {
            foreach ($option as $k => $v) {
                Option::$options->updateWhere('[name="'.$k.'"]', array('value' => $v));
            }
        } else {
            return Option::$options->updateWhere('[name="'.$option.'"]', array('value' => $value));
        }
    }

    /**
     * Get option value
     *
     *  <code>
     *      $pages_limit = Option::get('pages_limit');
     *      if ($pages_limit == '10') {
     *          // do something...
     *      }
     *  </code>
     *
     * @param  string $option Name of option to get.
     * @return string
     */
    public static function get($option)
    {
        // Redefine vars
        $option = (string) $option;

        // Select specific option
        $option_name = Option::$options->select('[name="'.$option.'"]', null);

        // Return specific option value
        return isset($option_name['value']) ? $option_name['value'] : '';
    }

    /**
     * Delete option
     *
     *  <code>
     *      Option::delete('pages_limit');
     *  </code>
     *
     * @param  string  $option Name of option to delete.
     * @return boolean
     */
    public static function delete($option)
    {
        // Redefine vars
        $option = (string) $option;

        // Delete specific option
        return Option::$options->deleteWhere('[name="'.$option.'"]');
    }

    /**
     * Check if option exist
     *
     *  <code>
     *      if (Option::exists('pages_limit')) {
     *          // do something...
     *      }
     *  </code>
     *
     * @param  string  $option Name of option to check.
     * @return boolean
     */
    public static function exists($option)
    {
        // Redefine vars
        $option = (string) $option;

        // Check if option exists
        return (count(Option::$options->select('[name="'.$option.'"]', null)) > 0) ? true : false;
    }
}


================================================
FILE: engine/Plugin/Action.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


class Action
{
    /**
     * Actions
     *
     * @var array
     */
    public static $actions = array();

    /**
     * Protected constructor since this is a static class.
     *
     * @access  protected
     */
    protected function __construct()
    {
        // Nothing here
    }

    /**
     *  Hooks a function on to a specific action.
     *
     *  <code>
     *      // Hooks a function "newLink" on to a "footer" action.
     *      Action::add('footer', 'newLink', 10);
     *
     *      function newLink() {
     *          echo '<a href="#">My link</a>';
     *      }
     *  </code>
     *
     * @param string  $action_name    Action name
     * @param mixed   $added_function Added function
     * @param integer $priority       Priority. Default is 10
     * @param array   $args           Arguments
     */
    public static function add($action_name, $added_function, $priority = 10, array $args = null)
    {
        // Hooks a function on to a specific action.
        Action::$actions[] = array(
                        'action_name' => (string) $action_name,
                        'function'    => $added_function,
                        'priority'    => (int) $priority,
                        'args'        => $args
        );
    }

    /**
     * Run functions hooked on a specific action hook.
     *
     *  <code>
     *      // Run functions hooked on a "footer" action hook.
     *      Action::run('footer');
     *  </code>
     *
     * @param  string  $action_name Action name
     * @param  array   $args        Arguments
     * @param  boolean $return      Return data or not. Default is false
     * @return mixed
     */
    public static function run($action_name, $args = array(), $return = false)
    {
        // Redefine arguments
        $action_name = (string) $action_name;
        $return      = (bool) $return;

        // Run action
        if (count(Action::$actions) > 0) {

            // Sort actions by priority
            $actions = Arr::subvalSort(Action::$actions, 'priority');

            // Loop through $actions array
            foreach ($actions as $action) {

                // Execute specific action
                if ($action['action_name'] == $action_name) {

                    // isset arguments ?
                    if (isset($args)) {

                        // Return or Render specific action results ?
                        if ($return) {
                            return call_user_func_array($action['function'], $args);
                        } else {
                            call_user_func_array($action['function'], $args);
                        }
                    } else {
                        if ($return) {
                            return call_user_func_array($action['function'], $action['args']);
                        } else {
                            call_user_func_array($action['function'], $action['args']);
                        }
                    }
                }
            }
        }
    }
}


================================================
FILE: engine/Plugin/Backend.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Backend
{
    public static function main()
    {
    }
}


================================================
FILE: engine/Plugin/Filter.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


class Filter
{
    /**
     * Filters
     *
     * @var array
     */
    public static $filters = array();

    /**
     * Protected constructor since this is a static class.
     *
     * @access  protected
     */
    protected function __construct()
    {
        // Nothing here
    }

    /**
     * Apply filters
     *
     *  <code>
     *      Filter::apply('content', $content);
     *  </code>
     *
     * @param  string $filter_name The name of the filter hook.
     * @param  mixed  $value       The value on which the filters hooked.
     * @return mixed
     */
    public static function apply($filter_name, $value)
    {
        // Redefine arguments
        $filter_name = (string) $filter_name;

        $args = array_slice(func_get_args(), 2);

        if (! isset(Filter::$filters[$filter_name])) {
            return $value;
        }

        foreach (Filter::$filters[$filter_name] as $priority => $functions) {
            if (! is_null($functions)) {
                foreach ($functions as $function) {
                    $all_args = array_merge(array($value), $args);
                    $function_name = $function['function'];
                    $accepted_args = $function['accepted_args'];
                    if ($accepted_args == 1) {
                        $the_args = array($value);
                    } elseif ($accepted_args > 1) {
                        $the_args = array_slice($all_args, 0, $accepted_args);
                    } elseif ($accepted_args == 0) {
                        $the_args = null;
                    } else {
                        $the_args = $all_args;
                    }
                    $value = call_user_func_array($function_name, $the_args);
                }
            }
        }

        return $value;
    }

    /**
     * Add filter
     *
     *  <code>
     *      Filter::add('content', 'replacer');
     *
     *      function replacer($content) {
     *          return preg_replace(array('/\[b\](.*?)\[\/b\]/ms'), array('<strong>\1</strong>'), $content);
     *      }
     *  </code>
     *
     * @param  string  $filter_name     The name of the filter to hook the $function_to_add to.
     * @param  mixed   $function_to_add The name of the function to be called when the filter is applied.
     * @param  integer $priority        Function to add priority - default is 10.
     * @param  integer $accepted_args   The number of arguments the function accept default is 1.
     * @return boolean
     */
    public static function add($filter_name, $function_to_add, $priority = 10, $accepted_args = 1)
    {
        // Redefine arguments
        $filter_name     = (string) $filter_name;
        $function_to_add = $function_to_add;
        $priority        = (int) $priority;
        $accepted_args   = (int) $accepted_args;

        // Check that we don't already have the same filter at the same priority. Thanks to WP :)
        if (isset(Filter::$filters[$filter_name]["$priority"])) {
            foreach (Filter::$filters[$filter_name]["$priority"] as $filter) {
                if ($filter['function'] == $function_to_add) {
                    return true;
                }
            }
        }

        Filter::$filters[$filter_name]["$priority"][] = array('function' => $function_to_add, 'accepted_args' => $accepted_args);

        // Sort
        ksort(Filter::$filters[$filter_name]["$priority"]);

        return true;
    }
}


================================================
FILE: engine/Plugin/Frontend.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


class Frontend
{
    public static function main()
    {
    }
    public static function title()
    {
        return '';
    }
    public static function description()
    {
        return '';
    }
    public static function keywords()
    {
        return '';
    }
    public static function template()
    {
        return 'index';
    }
    public static function content()
    {
        return '';
    }
}


================================================
FILE: engine/Plugin/I18n.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


class I18n
{
    /**
     * Locales array
     *
     * @var array
     */
    public static $locales = array(
        'ar' => 'العربية',
        'bg' => 'Български',
        'ca' => 'Català',
        'cs' => 'Česky',
        'da' => 'Dansk',
        'de' => 'Deutsch',
        'el' => 'Ελληνικά',
        'en' => 'English',
        'es' => 'Español',
        'fa' => 'Farsi',
        'fi' => 'Suomi',
        'fr' => 'Français',
        'gl' => 'Galego',
        'ka-ge' => 'Georgian',
        'hu' => 'Magyar',
        'it' => 'Italiano',
        'id' => 'Bahasa Indonesia',
        'ja' => '日本語',
        'lt' => 'Lietuvių',
        'nl' => 'Nederlands',
        'no' => 'Norsk',
        'pl' => 'Polski',
        'pt' => 'Português',
        'pt-br' => 'Português do Brasil',
        'ru' => 'Русский',
        'sk' => 'Slovenčina',
        'sl' => 'Slovenščina',
        'sv' => 'Svenska',
        'sr' => 'Srpski',
        'tr' => 'Türkçe',
        'uk' => 'Українська',
        'zh-cn' => '简体中文',
    );

    /**
     * Dictionary
     *
     * @var array
     */
    public static $dictionary = array();

    /**
     * An instance of the I18n class
     *
     * @var I18n
     */
    protected static $instance = null;

    /**
     * Initializing I18n
     *
     * @param string $dir Plugins directory
     */
    public static function init($locale)
    {
        if (! isset(self::$instance)) {
            self::$instance = new I18n($locale);
        }
        return self::$instance;
    }

    /**
     * Protected clone method to enforce singleton behavior.
     *
     * @access  protected
     */
    protected function __clone()
    {
        // Nothing here.
    }

    /**
     * Construct
     */
    protected function __construct($locale)
    {
        // Redefine arguments
        $locale = (string) $locale;

        // Get lang table for current locale
        $lang_table = Cache::get('i18n', $locale);

        // If lang_table is empty then create new
        if (! $lang_table) {

            // Get plugins Table
            $plugins = new Table('plugins');

            // Get all plugins
            $records = $plugins->select(null, 'all', null, array('location', 'priority'), 'priority', 'ASC');

            // Init var
            $lang_table = array();

            // Loop through each installed plugin
            foreach ($records as $record) {
                if (is_dir(ROOT . DS . dirname($record['location']) . DS . 'languages')) {

                    // Init var
                    $t = array();

                    // Check lang file
                    if (file_exists(ROOT . DS . dirname($record['location']) . DS . 'languages' . DS . $locale . '.lang.php')) {

                        // Merge the language strings into the sub table
                        $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
                    $lang_table += $t;
                }
            }

            // Save lang table for current locale
            Cache::put('i18n', $locale, $lang_table);

            // Update dictionary
            I18n::$dictionary = $lang_table;
        }

        // Update dictionary
        I18n::$dictionary = $lang_table;
    }

    /**
     * Returns translation of a string. If no translation exists, the original
     * string will be returned. No parameters are replaced.
     *
     *  <code>
     *      $hello = I18n::find('Hello friends, my name is :name', 'namespace');
     *  <code>
     *
     * @param  string $string    Text to translate
     * @param  string $namespace Namespace
     * @return string
     */
    public static function find($string, $namespace = null)
    {
        // Redefine arguments
        $string = (string) $string;

        // Return string
        if (isset(I18n::$dictionary[$namespace][$string])) {
            return I18n::$dictionary[$namespace][$string];
        } else {
            return $string;
        }
    }
}

/**
 * Global Translation/internationalization function.
 * Accepts an English string and returns its translation
 * to the active system language. If the given string is not available in the
 * current dictionary the original English string will be returned.
 *
 *  <code>
 *      // Display a translated message
 *      echo __('Hello, world', 'namespace');
 *
 *      // With parameter replacement
 *      echo __('Hello, :user', 'namespace', array(':user' => $username));
 *  </code>
 *
 * @global array  $dictionary Dictionary
 * @param  string $string    String to translate
 * @param  array  $values    Values to replace in the translated text
 * @param  string $namespace Namespace
 * @return string
 */
function __($string, $namespace = null, array $values = null)
{
    // Redefine arguments
    $string = (string) $string;

    // Find string in dictionary
    $string = I18n::find($string, $namespace);

    // Return string
    return empty($values) ? $string : strtr($string, $values);
}


================================================
FILE: engine/Plugin/Javascript.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


class Javascript
{
    /**
     * Javascripts
     *
     * @var array
     */
    public static $javascripts = array();

    /**
     * Protected constructor since this is a static class.
     *
     * @access  protected
     */
    protected function __construct()
    {
        // Nothing here
    }

    /**
     * Add javascript
     *
     *  <code>
     *      Javascript::add('path/to/my/script1.js');
     *      Javascript::add('path/to/my/script2.js', 'frontend', 11);
     *      Javascript::add('path/to/my/script3.js', 'backend', 12);
     *  <code>
     *
     * @param string  $file     File path
     * @param string  $load     Load script on frontend, backend or both
     * @param inteeer $priority Priority default is 10
     */
    public static function add($file, $load = 'frontend', $priority = 10)
    {
        Javascript::$javascripts[] = array(
            'file'     => (string) $file,
            'load'     => (string) $load,
            'priority' => (int) $priority,
        );
    }

    /**
     *  Combine and load site javascript
     */
    public static function load()
    {
        $backend_site_js_path  = MINIFY . DS . 'backend_site.minify.js';
        $frontend_site_js_path = MINIFY . DS . 'frontend_site.minify.'.Option::get('javascript_version').'.js';

        // Load javascripts
        if (count(Javascript::$javascripts) > 0) {
            $backend_buffer = '';
            $backend_regenerate = false;

            $frontend_buffer = '';
            $frontend_regenerate = false;

            // Sort javascripts by priority
            $javascripts = Arr::subvalSort(Javascript::$javascripts, 'priority');

            if (BACKEND) {

                // Build backend site javascript
                foreach ($javascripts as $javascript) {
                    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)) {
                            $backend_regenerate = true;
                            break;
                        }
                    }
                }

                // Regenerate site javascript
                if ($backend_regenerate) {
                    foreach ($javascripts as $javascript) {
                        if ((file_exists(ROOT . DS . $javascript['file'])) and (($javascript['load'] == 'backend') or ($javascript['load'] == 'both'))) {
                            $backend_buffer .= file_get_contents(ROOT . DS . $javascript['file'])."\n";
                        }
                    }
                    file_put_contents($backend_site_js_path, $backend_buffer);
                    $backend_regenerate = false;
                }
            } else {

                // Build frontend site javascript
                foreach ($javascripts as $javascript) {
                    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)) {
                            $frontend_regenerate = true;
                            break;
                        }
                    }
                }

                // Regenerate site javascript
                if ($frontend_regenerate) {
                    foreach ($javascripts as $javascript) {
                        if ((file_exists(ROOT . DS . $javascript['file'])) and (($javascript['load'] == 'frontend') or ($javascript['load'] == 'both'))) {
                            $frontend_buffer .= file_get_contents(ROOT . DS . $javascript['file'])."\n";
                        }
                    }
                    file_put_contents($frontend_site_js_path, $frontend_buffer);
                    $frontend_regenerate = false;
                }
            }

            // Render
            if (BACKEND) {
                echo '<script type="text/javascript" src="'.Option::get('siteurl').'/tmp/minify/backend_site.minify.js?'.Option::get('javascript_version').'"></script>';
            } else {
                echo '<script type="text/javascript" src="'.Option::get('siteurl').'/tmp/minify/frontend_site.minify.'.Option::get('javascript_version').'.js"></script>'."\n";
            }
        }
    }

    /**
     *  javascriptVersionIncrement
     */
    public static function javascriptVersionIncrement()
    {
        Option::update('javascript_version', (int) Option::get('javascript_version') + 1);
    }
}


================================================
FILE: engine/Plugin/Navigation.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


class Navigation
{
    /**
     * Items
     *
     * @var array
     */
    public static $items = array();

    /**
     * Navigation types
     */
    const LEFT = 1;
    const TOP  = 2;

    /**
     * Add new item
     *
     *  <code>
     *      // Add link for left navigation
     *      Navigation::add(__('Blog'), 'content', 'blog', 11);
     *
     *      // Add link for top navigation
     *      Navigation::add(__('View site'), 'top', 'http://site.com/', 11, Navigation::TOP, true);
     *  <code>
     *
     * @param string  $name     Name
     * @param string  $category Category
     * @param stirng  $link     Link
     * @param integer $priority Priority. Default is 10
     * @param integer $type     Type. Default is LEFT
     * @param bool    $external External or not. Default is false
     */
    public static function add($name, $category, $id, $priority = 10, $type = Navigation::LEFT, $external = false)
    {
        Navigation::$items[] = array(
            'name'      => (string) $name,
            'category'  => (string) $category,
            'id'        => (string) $id,
            'priority'  => (int) $priority,
            'type'      => (int) $type,
            'external'  => (bool) $external,
        );
    }

    /**
     * Draw items
     *
     *  <code>
     *      Navigation::draw('content');
     *      Navigation::draw('top', Navigation::TOP);
     *  <code>
     *
     * @param string  $category Category
     * @param integer $type     Type. Default is LEFT
     */
    public static function draw($category, $type = Navigation::LEFT)
    {
        // Sort items by priority
        $items = Arr::subvalSort(Navigation::$items, 'priority');

        // Draw left navigation
        if ($type == Navigation::LEFT) {

            // Loop trough the items
            foreach ($items as $item) {

                // If current plugin id == selected item id then set class to current
                if (Request::get('id') == $item['id'] && $item['external'] == false) {
                    $class = 'class = "current" ';
                } else {
                    $class = '';
                }

                // If current category == item category and navigation type is left them draw this item
                if ($item['category'] == $category && $item['type'] == Navigation::LEFT) {

                    // Is external item id or not ?
                    if ($item['external'] == false) {
                        echo '<li><a '.$class.'href="index.php?id='.$item['id'].'">'.$item['name'].'</a></li>';
                    } else {
                        echo '<li><a target="_blank" href="'.$item['id'].'">'.$item['name'].'</a></li>';
                    }
                }
            }
        } elseif ($type == Navigation::TOP) {
            // Draw top navigation
            foreach ($items as $item) {
                if ($item['category'] == $category && $item['type'] == Navigation::TOP) {
                    if ($item['external'] == false) {
                        echo '<a class="btn btn-small btn-inverse" href="index.php?id='.$item['id'].'">'.$item['name'].'</a>'.Html::nbsp(2);
                    } else {
                        echo '<a target="_blank" class="btn btn-small btn-inverse" href="'.$item['id'].'">'.$item['name'].'</a>'.Html::nbsp(2);
                    }
                }
            }
        }
    }

    /**
     * Draw items
     *
     *  <code>
     *      Navigation::draw('content');
     *      Navigation::draw('top', Navigation::TOP);
     *  <code>
     *
     * @param string  $category Category
     * @param integer $type     Type. Default is LEFT
     */
    public static function get($category, $type = Navigation::LEFT)
    {
        // Sort items by priority
        $items = Arr::subvalSort(Navigation::$items, 'priority');

        // Draw left navigation
        if ($type == Navigation::LEFT) {

            // Loop trough the items
            foreach ($items as $item) {

                // If current plugin id == selected item id then set class to current
                if (Request::get('id') == $item['id'] && $item['external'] == false) {
                    $class = 'class = "current" ';
                } else {
                    $class = '';
                }

                // If current category == item category and navigation type is left them draw this item
                if ($item['category'] == $category && $item['type'] == Navigation::LEFT) {

                    // Is external item id or not ?
                    if ($item['external'] == false) {
                        echo '<li><a '.$class.'href="index.php?id='.$item['id'].'">'.$item['name'].'</a></li>';
                    } else {
                        echo '<li><a target="_blank" href="'.$item['id'].'">'.$item['name'].'</a></li>';
                    }
                }
            }
        } elseif ($type == Navigation::TOP) {
            // Draw top navigation
            foreach ($items as $item) {
                if ($item['category'] == $category && $item['type'] == Navigation::TOP) {
                    if ($item['external'] == false) {
                        echo '<a class="btn btn-small btn-inverse" href="index.php?id='.$item['id'].'">'.$item['name'].'</a>'.Html::nbsp(2);
                    } else {
                        echo '<a target="_blank" class="btn btn-small btn-inverse" href="'.$item['id'].'">'.$item['name'].'</a>'.Html::nbsp(2);
                    }
                }
            }
        }
    }

    /**
     * Draw dropdown items
     *
     *  <code>
     *      Navigation::getDropdown('content');
     *  <code>
     *
     * @param string $category Category
     */
    public static function getDropdown($category)
    {
        // Sort items by priority
        $items = Arr::subvalSort(Navigation::$items, 'priority');

        // Loop trough the items
        foreach ($items as $item) {

            // If current plugin id == selected item id then set class to current
            if (Request::get('id') == $item['id'] && $item['external'] == false) {
                $class = 'selected = "selected" ';
            } else {
                $class = '';
            }

            // If current category == item category and navigation type is left them draw this item
            if ($item['category'] == $category && $item['type'] == Navigation::LEFT) {

                // Is external item id or not ?
                if ($item['external'] == false) {
                    echo '<option '.$class.'rel="index.php?id='.$item['id'].'">'.$item['name'].'</option>';
                }
            }
        }
    }
}


================================================
FILE: engine/Plugin/Plugin.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


class Plugin
{
    /**
     * Plugins
     *
     * @var array
     */
    public static $plugins = array();

    /**
     * Components
     *
     * @var array
     */
    public static $components = array();

    /**
     * An instance of the Plugin class
     *
     * @var plugin
     */
    protected static $instance = null;

    /**
     * Initializing plugins
     *
     * @return Plugin
     */
    public static function init()
    {
        if (! isset(self::$instance)) {
            self::$instance = new Plugin();
        }
        return self::$instance;
    }

    /**
     * Protected clone method to enforce singleton behavior.
     *
     * @access  protected
     */
    protected function __clone()
    {
        // Nothing here.
    }

    /**
     * Construct
     */
    protected function __construct()
    {
        // Get plugins Table
        $plugins = new Table('plugins');

        // Select all plugins
        $records = $plugins->select(null, 'all', null, array('location', 'status', 'priority'), 'priority', 'ASC');

        // Now include plugins from $records plugins array
        // If plugin is active then load it to the system.
        foreach ($records as $record) {
            if ($record['status'] == 'active') {
                include_once ROOT . DS . $record['location'];
            }
        }
    }

    /**
     * Get plugin admin
     *
     *  <code>
     *      // Get admin for Blog plugin
     *      Plugin::admin('blog');
     *  </code>
     *
     * @param string $plug       Plugin Name
     * @param string $alt_folder Alternative plugin folder
     */
    public static function admin($plug, $alt_folder = null)
    {
        // Redefine arguments
        $plug = (string) $plug;

        // Plugin admin extension
        $ext = '.admin.php';

        // Plugin admin can be loaded only in backend
        if (BACKEND) {

            // Plugin admin folder
            if (! empty($alt_folder)) {
                $folder = $alt_folder . DS . strtolower($plug);
            } else {
                $folder = strtolower($plug);
            }

            // Path to plugin admin file
            $path = PLUGINS . DS . $folder . DS . $plug . $ext;

            // Load plugin admin
            if (File::exists($path)) {
                include $path;
            }
        }
    }

    /**
     * Register new plugin in system
     *
     *  <code>
     *      // Register plugin
     *      Plugin::register( __FILE__,
     *                        __('Blog'),
     *                        __('Blog plugin'),
     *                        '1.0.0',
     *                        'Awilum',
     *                        'http://example.org/',
     *                        'blog');
     *  </code>
     *
     * @param string  $file        Plugin file
     * @param string  $title       Plugin title
     * @param string  $description Plugin description
     * @param string  $version     Plugin version
     * @param string  $author      Plugin author
     * @param string  $author_uri  Plugin author uri
     * @param string  $component   Plugin as component
     * @param boolean $box         Plugin as box
     */
    public static function register($file, $title, $description = null, $version = null, $author = null, $author_uri = null, $component = null, $box = false)
    {
        // Redefine arguments
        $file            = (string) $file;
        $title           = (string) $title;
        $description     = ($description === null)    ? null : (string) $description;
        $version         = ($version === null)        ? null : (string) $version;
        $author          = ($author === null)         ? null : (string) $author;
        $author_uri      = ($author_uri === null)     ? null : (string) $author_uri;
        $component       = ($component === null)      ? null : (string) $component;
        $box             = (bool) $box;

        // Get plugin id from name.plugin.php
        $id = strtolower(basename($file, '.plugin.php'));

        // Set plugin privilege 'box' if $box is true
        if ($box) {
            $privilege = 'box';
        } else {
            $privilege = '';
        }

        // Register plugin in global plugins array.
        Plugin::$plugins[$id] = array(
          'id'              => $id,
          'title'           => $title,
          'privilege'       => $privilege,
          'version'         => $version,
          'description'     => $description,
          'author'          => $author,
          'author_uri'      => $author_uri,
        );

        // Add plugin as a component
        // Plugin - component will be available at the link sitename/component_name
        // Example:
        //    www.example.org/guestbook
        //    www.example.org/news
        if (! empty($component)) {
            Plugin::$components[] = $component;
        }
    }
}


================================================
FILE: engine/Plugin/Stylesheet.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


class Stylesheet
{
    /**
     * Stylesheets
     *
     * @var array
     */
    public static $stylesheets = array();

    /**
     * Protected constructor since this is a static class.
     *
     * @access  protected
     */
    protected function __construct()
    {
        // Nothing here
    }

    /**
     * Add stylesheet
     *
     *  <code>
     *      Stylesheet::add('path/to/my/stylesheet1.css');
     *      Stylesheet::add('path/to/my/stylesheet2.css', 'frontend', 11);
     *      Stylesheet::add('path/to/my/stylesheet3.css', 'backend',12);
     *  <code>
     *
     * @param string  $file     File path
     * @param string  $load     Load stylesheet on frontend, backend or both
     * @param integer $priority Priority. Default is 10
     */
    public static function add($file, $load = 'frontend', $priority = 10)
    {
        Stylesheet::$stylesheets[] = array(
            'file'     => (string) $file,
            'load'     => (string) $load,
            'priority' => (int) $priority,
        );
    }

    /**
     *  Minify, combine and load site stylesheet
     */
    public static function load()
    {
        $backend_site_css_path  = MINIFY . DS . 'backend_site.minify.css';
        $frontend_site_css_path = MINIFY . DS . 'frontend_site.minify.'.Option::get('styles_version').'.css';

        // Load stylesheets
        if (count(Stylesheet::$stylesheets) > 0) {
            $backend_buffer = '';
            $backend_regenerate = false;

            $frontend_buffer = '';
            $frontend_regenerate = false;

            // Sort stylesheets by priority
            $stylesheets = Arr::subvalSort(Stylesheet::$stylesheets, 'priority');

            if (BACKEND) {

                // Build backend site stylesheets
                foreach ($stylesheets as $stylesheet) {
                    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)) {
                            $backend_regenerate = true;
                            break;
                        }
                    }
                }

                // Regenerate site stylesheet
                if ($backend_regenerate) {
                    foreach ($stylesheets as $stylesheet) {
                        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 = Stylesheet::parseVariables($backend_buffer);
                    file_put_contents($backend_site_css_path, MinifyCSS::process($backend_buffer));
                    $backend_regenerate = false;
                }
            } else {

                // Build frontend site stylesheets
                foreach ($stylesheets as $stylesheet) {
                    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)) {
                            $frontend_regenerate = true;
                            break;
                        }
                    }
                }

                // Regenerate site stylesheet
                if ($frontend_regenerate) {
                    foreach ($stylesheets as $stylesheet) {
                        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 = Stylesheet::parseVariables($frontend_buffer);
                    file_put_contents($frontend_site_css_path, MinifyCSS::process($frontend_buffer));
                    $frontend_regenerate = false;
                }
            }

            // Render
            if (BACKEND) {
                echo '<link rel="stylesheet" href="'.Option::get('siteurl').'/tmp/minify/backend_site.minify.css?'.Option::get('styles_version').'" type="text/css" />';
            } else {
                echo '<link rel="stylesheet" href="'.Option::get('siteurl').'/tmp/minify/frontend_site.minify.'.Option::get('styles_version').'.css" type="text/css" />'."\n";
            }
        }
    }

    /**
     * CSS Parser
     */
    public static function parseVariables($frontend_buffer)
    {
        return str_replace(array('@site_url',
                                 '@theme_site_url',
                                 '@theme_admin_url'),
                           array(Option::get('siteurl'),
                                 Option::get('siteurl').'/public/themes/'.Option::get('theme_site_name'),
                                 Option::get('siteurl').'/admin/themes/'.Option::get('theme_admin_name')),
                           $frontend_buffer);
    }

    /**
     * stylesVersionIncrement
     */
    public static function stylesVersionIncrement()
    {
        Option::update('styles_version',  (int) Option::get('styles_version') + 1);
    }
}


================================================
FILE: engine/Plugin/View.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


class View
{
    /**
     * Path to view file.
     *
     * @var string
     */
    protected $view_file;

    /**
     * View variables.
     *
     * @var array
     */
    protected $vars = array();

    /**
     * Global view variables.
     *
     * @var array
     */
    protected static $global_vars = array();

    /**
     * The output.
     *
     * @var string
     */
    protected $output;

    /**
     * Create a new view object.
     *
     *  <code>
     *      // Create new view object
     *      $view = new View('blog/views/backend/index');
     *
     *      // Assign some new variables
     *      $view->assign('msg', 'Some message...');
     *
     *      // Get view
     *      $output = $view->render();
     *
     *      // Display view
     *      echo $output;
     *  </code>
     *
     * @param string $view      Name of the view file
     * @param array  $variables Array of view variables
     */
    public function __construct($view, array $variables = array())
    {
        // Set view file
        // From current theme folder or from plugin folder
        if (File::exists($theme_view_file = THEMES_SITE . DS . Site::theme() . DS . $view . '.view.php') && BACKEND == false) {
            $this->view_file = $theme_view_file;
        } else {
            $this->view_file = PLUGINS . DS . $view . '.view.php';
        }

        // Is view file exists ?
        if (file_exists($this->view_file) === false) {
            throw new RuntimeException(vsprintf("%s(): The '%s' view does not exist.", array(__METHOD__, $view)));
        }

        // Set view variables
        $this->vars = $variables;
    }

    /**
     * View factory
     *
     *  <code>
     *      // Create new view object, assign some variables
     *      // and displays the rendered view in the browser.
     *      View::factory('blog/views/backend/index')
     *          ->assign('msg', 'Some message...')
     *          ->display();
     *  </code>
     *
     * @param  string $view      Name of the view file
     * @param  array  $variables Array of view variables
     * @return View
     */
    public static function factory($view, array $variables = array())
    {
        return new View($view, $variables);
    }

    /**
     * Assign a view variable.
     *
     *  <code>
     *      $view->assign('msg', 'Some message...');
     *  </code>
     *
     * @param  string  $key    Variable name
     * @param  mixed   $value  Variable value
     * @param  boolean $global Set variable available in all views
     * @return View
     */
    public function assign($key, $value, $global = false)
    {
        // Assign a new view variable (global or locale)
        if ($global === false) {
            $this->vars[$key] = $value;
        } else {
            View::$global_vars[$key] = $value;
        }

        return $this;
    }

    /**
     * Include the view file and extracts the view variables before returning the generated output.
     *
     *  <code>
     *      // Get view
     *      $output = $view->render();
     *
     *      // Display output
     *      echo $output;
     *  </code>
     *
     * @param  string $filter Callback function used to filter output
     * @return string
     */
    public function render($filter = null)
    {
        // Is output empty ?
        if (empty($this->output)) {

            // Extract variables as references
            extract(array_merge($this->vars, View::$global_vars), EXTR_REFS);

            // Turn on output buffering
            ob_start();

            // Include view file
            include($this->view_file);

            // Output...
            $this->output = ob_get_clean();
        }

        // Filter output ?
        if ($filter !== null) {
            $this->output = call_user_func($filter, $this->output);
        }

        // Return output
        return $this->output;
    }

    /**
     * Displays the rendered view in the browser.
     *
     *  <code>
     *      $view->display();
     *  </code>
     *
     */
    public function display()
    {
        echo $this->render();
    }

    /**
     * Magic setter method that assigns a view variable.
     *
     * @param string $key   Variable name
     * @param mixed  $value Variable value
     */
    public function __set($key, $value)
    {
        $this->vars[$key] = $value;
    }

    /**
     * Magic getter method that returns a view variable.
     *
     * @param  string $key Variable name
     * @return mixed
     */
    public function __get($key)
    {
        if (isset($this->vars[$key])) {
            return $this->vars[$key];
        }
    }

    /**
     * Magic isset method that checks if a view variable is set.
     *
     * @param  string  $key Variable name
     * @return boolean
     */
    public function __isset($key)
    {
        return isset($this->vars[$key]);
    }

    /**
     * Magic unset method that unsets a view variable.
     *
     * @param string $key Variable name
     */
    public function __unset($key)
    {
        unset($this->vars[$key]);
    }

    /**
     * Method that magically converts the view object into a string.
     *
     * @return string
     */
    public function __toString()
    {
        return $this->render();
    }
}


================================================
FILE: engine/Security.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


class Security
{
    /**
     * Key name for token storage
     *
     * @var  string
     */
    protected static $token_name = 'security_token';

    /**
     * Protected constructor since this is a static class.
     *
     * @access  protected
     */
    protected function __construct()
    {
        // Nothing here
    }

    /**
     * Generate and store a unique token which can be used to help prevent
     * [CSRF](http://wikipedia.org/wiki/Cross_Site_Request_Forgery) attacks.
     *
     *  <code>
     *      $token = Security::token();
     *  </code>
     *
     * You can insert this token into your forms as a hidden field:
     *
     *  <code>
     *      echo Form::hidden('csrf', Security::token());
     *  </code>
     *
     * This provides a basic, but effective, method of preventing CSRF attacks.
     *
     * @param  boolean $new force a new token to be generated?. Default is false
     * @return string
     */
    public static function token($new = false)
    {
        // Get the current token
        $token = Session::get(Security::$token_name);

        // Create a new unique token
        if ($new === true or ! $token) {

            // Generate a new unique token
            $token = sha1(uniqid(mt_rand(), true));

            // Store the new token
            Session::set(Security::$token_name, $token);
        }

        // Return token
        return $token;
    }

    /**
     * Check that the given token matches the currently stored security token.
     *
     *  <code>
     *     if (Security::check($token)) {
     *         // Pass
     *     }
     *  </code>
     *
     * @param  string  $token token to check
     * @return boolean
     */
    public static function check($token)
    {
        return Security::token() === $token;
    }

    /**
     * Encrypt password
     *
     *  <code>
     *      $encrypt_password = Security::encryptPassword('password');
     *  </code>
     *
     * @param string $password Password to encrypt
     */
    public static function encryptPassword($password)
    {
        return md5(md5(trim($password) . MONSTRA_PASSWORD_SALT));
    }

    /**
     * Create safe name. Use to create safe username, filename, pagename.
     *
     *  <code>
     *      $safe_name = Security::safeName('hello world');
     *  </code>
     *
     * @param  string  $str       String
     * @param  mixed   $delimiter String delimiter
     * @param  boolean $lowercase String Lowercase
     * @return string
     */
    public static function safeName($str, $delimiter = '-', $lowercase = false)
    {
        // Redefine vars
        $str       = (string) $str;
        $delimiter = $delimiter;
        $lowercase = (bool) $lowercase;
        $delimiter = $delimiter;

        // Remove tags
        $str = filter_var($str, FILTER_SANITIZE_STRING);

        // Decode all entities to their simpler forms
        $str = html_entity_decode($str, ENT_QUOTES, 'UTF-8');

        // Reserved characters (RFC 3986)
        $reserved_characters = array(
            '/', '?', ':', '@', '#', '[', ']',
            '!', '$', '&', '\'', '(', ')', '*',
            '+', ',', ';', '='
        );

        // Remove reserved characters
        $str = str_replace($reserved_characters, ' ', $str);

        // Set locale to en_US.UTF8
        setlocale(LC_ALL, 'en_US.UTF8');

        // Translit ua,ru => latin
        $str = Text::translitIt($str);

        // Convert string
        $str = iconv('UTF-8', 'ASCII//TRANSLIT', $str);

        // Remove characters
        $str = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $str);
        if ($delimiter != null) {
            $str = preg_replace("/[\/_|+ -]+/", $delimiter, $str);
            $str = trim($str, $delimiter);
        }

        // Lowercase
        if ($lowercase === true) {
            $str = Text::lowercase($str);
        }

        // Return safe name
        return $str;
    }

    /**
     * Create safe url.
     *
     *  <code>
     *      $url = Security::sanitizeURL('http://test.com');
     *  </code>
     *
     * @param  string $url Url to sanitize
     * @return string
     */
    public static function sanitizeURL($url)
    {
        $url = trim($url);
        $url = rawurldecode($url);
        $url = str_replace(array('--', '&quot;', '!', '@', '#', '$', '%', '^', '*', '(', ')', '+', '{', '}', '|', ':', '"', '<', '>',
                                  '[', ']', '\\', ';', "'", ',', '*', '+', '~', '`', 'laquo', 'raquo', ']>', '&#8216;', '&#8217;', '&#8220;', '&#8221;', '&#8211;', '&#8212;'),
                            array('-', '-', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''),
                            $url);
        $url = str_replace('--', '-', $url);
        $url = rtrim($url, "-");

        $url = str_replace('..', '', $url);
        $url = str_replace('//', '', $url);
        $url = preg_replace('/^\//', '', $url);
        $url = preg_replace('/^\./', '', $url);

        return $url;
    }

    /**
     * Sanitize URL to prevent XSS - Cross-site scripting
     */
    public static function runSanitizeURL()
    {
        $_GET = array_map('Security::sanitizeURL', $_GET);
    }

    /**
     * That prevents null characters between ascii characters.
     *
     * @param string $str String
     */
    public static function removeInvisibleCharacters($str)
    {
        // Redefine vars
        $str = (string) $str;

        // Thanks to ci for this tip :)
        $non_displayables = array('/%0[0-8bcef]/', '/%1[0-9a-f]/', '/[\x00-\x08]/', '/\x0b/', '/\x0c/', '/[\x0e-\x1f]/');

        do {
            $cleaned = $str;
            $str = preg_replace($non_displayables, '', $str);
        } while ($cleaned != $str);

        // Return safe string
        return $str;
    }

    /**
     * Sanitize data to prevent XSS - Cross-site scripting
     *
     * @param string $str String
     */
    public static function xssClean($str)
    {
        // Remove invisible characters
        $str = Security::removeInvisibleCharacters($str);

        // Convert html to plain text
        $str = Html::toText($str);

        // Return safe string
        return $str;
    }
}


================================================
FILE: engine/Shortcode.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


class Shortcode
{
    /**
     * Shortcode tags array
     *
     * @var shortcode_tags
     */
    protected static $shortcode_tags = array();

    /**
     * Protected constructor since this is a static class.
     *
     * @access  protected
     */
    protected function __construct()
    {
        // Nothing here
    }

    /**
     * Add new shortcode
     *
     *  <code>
     *      function returnSiteUrl() {
     *          return Option::get('siteurl');
     *      }
     *
     *      // Add shortcode {siteurl}
     *      Shortcode::add('siteurl', 'returnSiteUrl');
     *  </code>
     *
     * @param string $shortcode         Shortcode tag to be searched in content.
     * @param string $callback_function The callback function to replace the shortcode with.
     */
    public static function add($shortcode, $callback_function)
    {
        // Redefine vars
        $shortcode = (string) $shortcode;

        // Add new shortcode
        if (is_callable($callback_function)) {
            Shortcode::$shortcode_tags[$shortcode] = $callback_function;
        }
    }

    /**
     * Remove a specific registered shortcode.
     *
     *  <code>
     *      Shortcode::delete('shortcode_name');
     *  </code>
     *
     * @param string $shortcode Shortcode tag.
     */
    public static function delete($shortcode)
    {
        // Redefine vars
        $shortcode = (string) $shortcode;

        // Delete shortcode
        if (Shortcode::exists($shortcode)) {
            unset(Shortcode::$shortcode_tags[$shortcode]);
        }
    }

    /**
     * Remove all registered shortcodes.
     *
     *  <code>
     *      Shortcode::clear();
     *  </code>
     *
     */
    public static function clear()
    {
        Shortcode::$shortcode_tags = array();
    }

    /**
     * Check if a shortcode has been registered.
     *
     *  <code>
     *      if (Shortcode::exists('shortcode_name')) {
     *          // do something...
     *      }
     *  </code>
     *
     * @param string $shortcode Shortcode tag.
     */
    public static function exists($shortcode)
    {
        // Redefine vars
        $shortcode = (string) $shortcode;

        // Check shortcode
        return array_key_exists($shortcode, Shortcode::$shortcode_tags);
    }

    /**
     * Parse a string, and replace any registered shortcodes within it with the result of the mapped callback.
     *
     *  <code>
     *      $content = Shortcode::parse($content);
     *  </code>
     *
     * @param  string $content Content
     * @return string
     */
    public static function parse($content)
    {
        if (! Shortcode::$shortcode_tags) {
            return $content;
        }

        $shortcodes = implode('|', array_map('preg_quote', array_keys(Shortcode::$shortcode_tags)));
        $pattern    = "/(.?)\{([$shortcodes]+)(.*?)(\/)?\}(?(4)|(?:(.+?)\{\/\s*\\2\s*\}))?(.?)/s";

        return preg_replace_callback($pattern, 'Shortcode::_handle', $content);
    }

    /**
     * _handle()
     */
    protected static function _handle($matches)
    {
        $prefix    = $matches[1];
        $suffix    = $matches[6];
        $shortcode = $matches[2];

        // Allow for escaping shortcodes by enclosing them in {{shortcode}}
        if ($prefix == '{' && $suffix == '}') {
            return substr($matches[0], 1, -1);
        }

        $attributes = array(); // Parse attributes into into this array.

        if (preg_match_all('/(\w+) *= *(?:([\'"])(.*?)\\2|([^ "\'>]+))/', $matches[3], $match, PREG_SET_ORDER)) {
            foreach ($match as $attribute) {
                if (! empty($attribute[4])) {
                    $attributes[strtolower($attribute[1])] = $attribute[4];
                } elseif (! empty($attribute[3])) {
                    $attributes[strtolower($attribute[1])] = $attribute[3];
                }
            }
        }

        // 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 : '';
    }
}


================================================
FILE: engine/Site.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


class Site
{
    /**
     * An instance of the Site class
     *
     * @var site
     */
    protected static $instance = null;

    /**
     * Initializing site
     *
     * @return Site
     */
    public static function init()
    {
        if (! isset(self::$instance)) {
            self::$instance = new Site();
        }
        return self::$instance;
    }

    /**
     * Protected clone method to enforce singleton behavior.
     *
     * @access  protected
     */
    protected function __clone()
    {
        // Nothing here.
    }

    /**
     * Construct
     */
    protected function __construct()
    {
        call_user_func(ucfirst(Uri::command()).'::main');
    }

    /**
     * Get site name
     *
     *  <code>
     *      echo Site::name();
     *  </code>
     *
     * @return string
     */
    public static function name()
    {
        return Option::get('sitename');
    }

    /**
     * Get site theme
     *
     *  <code>
     *      echo Site::theme();
     *  </code>
     *
     * @return string
     */
    public static function theme()
    {
        return Option::get('theme_site_name');
    }

    /**
     * Get Page title
     *
     *  <code>
     *      echo Site::title();
     *  </code>
     *
     * @return string
     */
    public static function title()
    {
        return call_user_func(ucfirst(Uri::command()).'::title');
    }

    /**
     * Get page description
     *
     *  <code>
     *      echo Site::description();
     *  </code>
     *
     * @return string
     */
    public static function description()
    {
        return (($description = trim(call_user_func(ucfirst(Uri::command()).'::description'))) == '') ? Html::toText(Option::get('description')) : Html::toText($description);
    }

    /**
     * Get page keywords
     *
     *  <code>
     *      echo Site::keywords();
     *  </code>
     *
     * @return string
     */
    public static function keywords()
    {
        return (($keywords = trim(call_user_func(ucfirst(Uri::command()).'::keywords'))) == '') ? Html::toText(Option::get('keywords')) : Html::toText($keywords);
    }

    /**
     * Get site slogan
     *
     *  <code>
     *      echo Site::slogan();
     *  </code>
     *
     * @return string
     */
    public static function slogan()
    {
        return Option::get('slogan');
    }

    /**
     * Get page content
     *
     *  <code>
     *      echo Site::content();
     *  </code>
     *
     * @return string
     */
    public static function content()
    {
        return Filter::apply('content', call_user_func(ucfirst(Uri::command()).'::content'));
    }

    /**
     * Get compressed template
     *
     *  <code>
     *      echo Site::template();
     *  </code>
     *
     * @param  string $theme Theme name
     * @return mixed
     */
    public static function template($theme = null)
    {
        // Get specific theme or current theme
        $current_theme = ($theme == null) ? Option::get('theme_site_name') : $theme ;

        // Get template
        $template = call_user_func(ucfirst(Uri::command()).'::template');

        // Check whether is there such a template in the current theme
        // else return default template: index
        // also compress template file :)
        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
                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 = MinifyHTML::process($buffer);
                file_put_contents(MINIFY . DS . 'theme.' . $current_theme . '.minify.' . $template . '.template.php', $buffer);
            }

            return 'minify.'.$template;
        } else {
            if (! File::exists(MINIFY . DS . 'theme.' . $current_theme . '.' . 'minify.index.template.php') or
                filemtime(THEMES_SITE . DS . $current_theme . DS . 'index.template.php') > filemtime(MINIFY . DS . 'theme.' . $current_theme . '.' . 'minify.index.template.php')) {
                $buffer = file_get_contents(THEMES_SITE . DS . $current_theme . DS . 'index.template.php');
                $buffer = MinifyHTML::process($buffer);
                file_put_contents(MINIFY . DS . 'theme.' . $current_theme . '.' . 'minify.index.template.php', $buffer);
            }

            return 'minify.index';
        }
    }

    /**
     * Get site url
     *
     *  <code>
     *      echo Site::url();
     *  </code>
     *
     * @return string
     */
    public static function url()
    {
        return Option::get('siteurl');
    }

    /**
     * Get copyright information
     *
     *  <code>
     *      echo Site::powered();
     *  </code>
     *
     * @return string
     */
    public static function powered()
    {
        return __('Powered by', 'system').' <a href="http://monstra.org" target="_blank">Monstra</a> ' . Monstra::VERSION;
    }
}


================================================
FILE: engine/Uri.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


class Uri
{
    /**
     * Protected constructor since this is a static class.
     *
     * @access  protected
     */
    protected function __construct()
    {
        // Nothing here
    }

    /**
     * Default component
     *
     * @var string
     */
    public static $default_component = 'pages';

    /**
     *	Get uri and explode command/param1/param2
     *
     *  <code>
     *      $segments = Uri::segments();
     *  </code>
     *
     *  @return array
     */
    public static function segments()
    {
        // Get request uri and current script path
        $request_uri = explode('/', $_SERVER['REQUEST_URI']);
        $script_name = explode('/', $_SERVER['SCRIPT_NAME']);

        // Delete script name
        for ($i = 0; $i < sizeof($script_name); $i++) {
            if ($request_uri[$i] == $script_name[$i]) {
                unset($request_uri[$i]);
            }
        }

        // Get all the values of an array
        $uri = array_values($request_uri);

        // Ability to pass parameters
        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));
                }
            }
        }

        // Return uri segments
        return $uri;
    }

    /**
     *  Get uri segment
     *
     *  <code>
     *      $segment = Uri::segment(1);
     *  </code>
     *
     *  @param  integer $segment Segment
     *  @return mixed
     */
    public static function segment($segment)
    {
        $segments = Uri::segments();

        return isset($segments[$segment]) ? $segments[$segment] : null;
    }

    /**
     *	Get command/component from registed components
     *
     *  <code>
     *      $command = Uri::command();
     *  </code>
     *
     *  @return array
     */
    public static function command()
    {
        // Get uri segments
        $uri = Uri::segments();

        if (! isset($uri[0])) {
            $uri[0] = Uri::$default_component;
        } else {
            if (! in_array($uri[0], Plugin::$components)) {
                $uri[0] = Uri::$default_component;
            } else {
                $uri[0] = $uri[0];
            }
        }

        return $uri[0];
    }

    /**
     *	Get uri parammeters
     *
     *  <code>
     *      $params = Uri::params();
     *  </code>
     *
     *  @return array
     */
    public static function params()
    {
        //Init data array
        $data = array();

        // Get URI
        $uri = Uri::segments();

        // http://site.com/ and http://site.com/index.php same main home pages
        if (! isset($uri[0])) {
            $uri[0] = '';
        }

        // param1/param2
        if ($uri[0] !== Uri::$default_component) {
            if (isset($uri[1])) {
                foreach ($uri as $part) {
                    $data[] = $part;
                }
            } else { // default
                $data[0] = $uri[0];
            }
        } else {
            // This is good for box plugin Pages
            // parent/child
            if (isset($uri[2])) {
                $data[0] = $uri[1];
                $data[1] = $uri[2];
            } else { // default
                $data[0] = $uri[1];
            }
        }

        return $data;
    }
}


================================================
FILE: engine/Xmldb/DB.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


class DB
{
    /**
     * XMLDB directory
     *
     * @var string
     */
    public static $db_dir = STORAGE;

    /**
     * Protected constructor since this is a static class.
     *
     * @access  protected
     */
    protected function __construct()
    {
        // Nothing here
    }

    /**
     * Configure the settings of XMLDB
     *
     * @param mixed $setting Setting name
     * @param mixed $value   Setting value
     */
    public static function configure($setting, $value)
    {
        if (property_exists("db", $setting)) {
            DB::$$setting = $value;
        }
    }

    /**
     * Create new database
     *
     * @param  string  $db_name Database name
     * @param  integer $mode    Mode
     * @return boolean
     */
    public static function create($db_name, $chmod = 0775)
    {
        // Redefine vars
        $db_name = (string) $db_name;

        // Create
        if (is_dir(DB::$db_dir . '/' . $db_name)) {
            return false;
        }
        return mkdir(DB::$db_dir . '/' . $db_name, $chmod);
    }

    /**
     * Drop database
     *
     * @param  string  $db_name Database name
     * @return boolean
     */
    public static function drop($db_name)
    {
        // Redefine vars
        $db_name = (string) $db_name;

        // 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);
         }
     }
 }
        }
        reset($ob);
        rmdir(DB::$db_dir . '/' . $db_name);
    }
}


================================================
FILE: engine/Xmldb/Table.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


class Table
{
    /**
     * XMLDB Tables directory
     *
     * @var string
     */
    public static $tables_dir = XMLDB;

    /**
     * Table
     *
     * @var object
     */
    private $table;

    /**
     * Table name
     *
     * @var string
     */
    private $name;

    /**
     * Configure the settings of XMLDB Tables
     *
     * @param mixed $setting Setting name
     * @param mixed $value   Setting value
     */
    public static function configure($setting, $value)
    {
        if (property_exists("table", $setting)) {
            Table::$$setting = $value;
        }
    }

    /**
     * Table factory.
     *
     *  <code>
     *      $users = Table::factory('table_name');
     *  </code>
     *
     * @param  string $table_name Table name
     * @return Table
     */
    public static function factory($table_name)
    {
        return new Table($table_name);
    }

    /**
     * Table construct
     *
     *  <code>
     *      $users = new Table('table_name');
     *  </code>
     *
     * @param string $table_name Table name
     */
    public function __construct($table_name)
    {
        // Redefine vars
        $table_name = (string) $table_name;

        $this->table = Table::get($table_name);
        $this->name  = $table_name;
    }

    /**
     * Create new table
     *
     * XMLDB Table structure:
     *
     *  <?xml version="1.0" encoding="UTF-8"?>
     *  <root>
     *      <options><autoincrement>0</autoincrement></options>
     *      <fields>
     *          <field1/>
     *          <field2/>
     *      </fields>
     *      <record>
     *          <field1>value</field1>
     *          <field2>value</field2>
     *      </record>
     *  </root>
     *
     *  <code>
     *      Table::create('table_name', array('field1', 'field2'));
     *  </code>
     *
     * @param  string  $table_name Table name
     * @param  array   $fields     Fields
     * @return boolean
     */
    public static function create($table_name, $fields)
    {
        // Redefine vars
        $table_name = (string) $table_name;

        if (! file_exists(Table::$tables_dir . '/' . $table_name . '.table.xml') &&
            is_dir(dirname(Table::$tables_dir)) &&
            is_writable(dirname(Table::$tables_dir)) &&
            isset($fields) &&
            is_array($fields)) {

            // Create table fields
            $_fields = '<fields>';
            foreach ($fields as $field) {
                $_fields .= "<$field/>";
            }
            $_fields .= '</fields>';

            // 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);
        } else {

            // Something wrong... return false
            return false;
        }
    }

    /**
     * Delete table
     *
     *  <code>
     *      Table::drop('table_name');
     *  </code>
     *
     * @param  string  $table_name Table name
     * @return boolean
     */
    public static function drop($table_name)
    {
        // Redefine vars
        $table_name = (string) $table_name;

        // Drop
        if (! is_dir(Table::$tables_dir . '/' . $table_name . '.table.xml')) {
            return unlink(Table::$tables_dir . '/' . $table_name . '.table.xml');
        }

        return false;
    }

    /**
     * Get table
     *
     *  <code>
     *     $table = Table::get('table_name');
     *  </code>
     *
     * @param  array $table_name Table name
     * @return mixed
     */
    public static function get($table_name)
    {
        // Redefine vars
        $table_name = (string) $table_name;

        // Load table
        if (file_exists(Table::$tables_dir . '/' . $table_name.'.table.xml') && is_file(Table::$tables_dir . '/' . $table_name.'.table.xml')) {
            $data = array('xml_object'   => XML::loadFile(Table::$tables_dir . '/' . $table_name.'.table.xml'),
                          'xml_filename' => Table::$tables_dir . '/' . $table_name.'.table.xml');

            return $data;
        } else {
            return false;
        }
    }

    /**
     * Get information about table
     *
     *  <code>
     *      var_dump($users->info());
     *  </code>
     *
     * @return array
     */
    public function info()
    {
        return array(
            'table_name'        => basename($this->table['xml_filename'], '.table.xml'),
            'table_size'        => filesize($this->table['xml_filename']),
            'table_last_change' => filemtime($this->table['xml_filename']),
            'table_last_access' => fileatime($this->table['xml_filename']),
            'table_fields'      => $this->fields(),
            'records_count'     => $this->count(),
            'records_last_id'   => $this->lastId()
        );
    }

    /**
     * Get table fields
     *
     *  <code>
     *      var_dump($users->fields());
     *  </code>
     *
     * @return array
     */
    public function fields()
    {
        // Select fields
        $fields_obj = Table::_selectOne($this->table, "fields");

        // Create fields array
        foreach ($fields_obj as $key => $field) {
            $fields[] = $key;
        }

        // Return array of fields
        return $fields;
    }

    /**
     * Add new field
     *
     *  <code>
     *      $users->addField('test');
     *  </code>
     *
     * @param  string  $name Field name
     * @return boolean
     */
    public function addField($name)
    {
        // Redefine vars
        $name = (string) $name;

        // Get table
        $table = $this->table;

        // Select all fields
        $fields = Table::_selectOne($this->table, "fields");

        // Select current field
        $field  = Table::_selectOne($this->table, "fields/{$name}");

        // If field dosnt exists than create new field
        if ($field == null) {

            // Create new field
            $fields->addChild($name, '');

            // Save table
            return Table::_save($table);
        } else {
            return false;
        }
    }

    /**
     * Delete field
     *
     *  <code>
     *      $users->deleteField('test');
     *  </code>
     *
     * @param  string  $name Field name
     * @return boolean
     */
    public function deleteField($name)
    {
        // Redefine vars
        $name = (string) $name;

        // Get table
        $table = $this->table;

        // Select field
        $field = Table::_selectOne($this->table, "fields/{$name}");

        // If field exist than delete it
        if ($field != null) {

            // Delete field
            unset($field[0]);

            // Save table
            return Table::_save($table);
        } else {
            return false;
        }
    }

    /**
     * Update field
     *
     *  <code>
     *      $users->updateField('login', 'username');
     *  </code>
     *
     * @param  string  $old_name Old field name
     * @param  string  $new_name New field name
     * @return boolean
     */
    public function updateField($old_name, $new_name)
    {
        if (file_exists(Table::$tables_dir . '/' . $this->name.'.table.xml') && is_file(Table::$tables_dir . '/' . $this->name.'.table.xml')) {
            $table = strtr(file_get_contents(Table::$tables_dir . '/' . $this->name.'.table.xml'), array('<'.$old_name.'>' => '<'.$new_name.'>',
                                                                                                         '</'.$old_name.'>' => '</'.$new_name.'>',
                                                                                                         '<'.$old_name.'/>' => '<'.$new_name.'/>'));
            if (file_put_contents(Table::$tables_dir . '/' . $this->name.'.table.xml', $table)) {
                return true;
            } else {
                return false;
            }
        }
    }

    /**
     * Check if field exist
     *
     *  <code>
     *      if ($users->existsField('field_name')) {
     *          // do something...
     *      }
     *  </code>
     *
     * @param  string  $name Name of field to check.
     * @return boolean
     */
    public function existsField($name)
    {
        // Redefine vars
        $name = (string) $name;

        // Get table
        $table = $this->table;

        // Select field
        $field = Table::_selectOne($this->table, "fields/{$name}");

        // Return true or false
        return ($field == null) ? false : true;
    }

    /**
     * Add new record
     *
     *  <code>
     *      $users->insert(array('login'=>'admin', 'password'=>'pass'));
     *  </code>
     *
     * @param  array   $fields Record fields to insert
     * @return boolean
     */
    public function insert(array $fields = null)
    {
        // Set save flag to true
        $save = true;

        // Foreach fields check is current field alredy exists
        if (count($fields) !== 0) {
            foreach ($fields as $key => $value) {
                if (Table::_selectOne($this->table, "fields/{$key}") == null) {
                    $save = false;
                    break;
                }
            }
        }

        // Get table fields and create fields names array
        $_fields = Table::_selectOne($this->table, "fields");
        foreach ($_fields as $key => $value) {
            $field_names[(string) $key] = (string) $key;
        }

        // Save record
        if ($save) {

            // Find autoincrement option
            $inc = Table::_selectOne($this->table, "options/autoincrement");

            // Increment
            $inc_upd = $inc + 1;

            // Add record
            $node = $this->table['xml_object']->addChild(XML::safe($this->name));

            // Update autoincrement
            Table::_updateWhere($this->table, "options", array('autoincrement' => $inc_upd));

            // Add common record fields: id and uid
            $node->addChild('id', $inc_upd);
            $node->addChild('uid', Table::_generateUID());

            // If exists fields to insert then insert them
            if (count($fields) !== 0) {
                $table_fields = array_diff_key($field_names, $fields);

                // Defined fields
                foreach ($table_fields as $table_field) {
                    $node->addChild($table_field, '');
                }

                // User fields
                foreach ($fields as $key => $value) {
                    $node->addChild($key, XML::safe($value));
                }
            }

            // Save table
            return Table::_save($this->table);
        } else {
            return false;
        }
    }

    /**
     * Select record(s) in table
     *
     *  <code>
     *      $records = $users->select('[id=2]');
     *      $records = $users->select(null, 'all');
     *      $records = $users->select(null, 'all', null, array('login'));
     *      $records = $users->select(null, 2, 1);
     *  </code>
     *
     * @param  string  $query     XPath query
     * @param  integer $row_count Row count. To select all records write 'all'
     * @param  integer $offset    Offset
     * @param  array   $fields    Fields
     * @param  string  $order_by  Order by
     * @param  string  $order     Order type
     * @return array
     */
    public function select($query = null, $row_count = 'all', $offset = null, array $fields = null, $order_by = 'id', $order = 'ASC')
    {
        // Redefine vars
        $query    = ($query === null)  ? null : (string) $query;
        $offset   = ($offset === null) ? null : (int) $offset;
        $order_by = (string) $order_by;
        $order    = (string) $order;

        // Execute query
        if ($query !== null) {
            $tmp = $this->table['xml_object']->xpath('//'.$this->name.$query);
        } else {
            $tmp = $this->table['xml_object']->xpath($this->name);
        }

        // Init vars
        $data     = array();
        $records  = array();
        $_records = array();

        $one_record = false;

        // If row count is null then select only one record
        // eg: $users->select('[login="admin"]', null);
        if ($row_count == null) {
            if (isset($tmp[0])) {
                $_records   = $tmp[0];
                $one_record = true;
            }
        } else {

            // If row count is 'all' then select all records
            // eg:
            //     $users->select('[status="active"]', 'all');
            // or
            //     $users->select('[status="active"]');
            foreach ($tmp as $record) {
                $data[] = $record;
            }

            $_records = $data;
        }

        // If array of fields is exits then get records with this fields only
        if (count($fields) > 0) {
            if (count($_records) > 0) {
                $count = 0;
                foreach ($_records as $key => $record) {
                    foreach ($fields as $field) {
                        $record_array[$count][$field] = (string) $record->$field;
                    }

                    $record_array[$count]['id'] = (int) $record->id;

                    if ($order_by == 'id') {
                        $record_array[$count]['sort'] = (int) $record->$order_by;
                    } else {
                        $record_array[$count]['sort'] = (string) $record->$order_by;
                    }

                    $count++;
                }

                // Sort records
                $records = Table::subvalSort($record_array, 'sort', $order);

                // Slice records array
                if ($offset === null && is_int($row_count)) {
                    $records = array_slice($records, -$row_count, $row_count);
                } elseif ($offset !== null && is_int($row_count)) {
                    $records = array_slice($records, $offset, $row_count);
                }
            }
        } else {

            // Convert from XML object to array

            if (! $one_record) {
                $count = 0;
                foreach ($_records as $xml_objects) {
                    $vars = get_object_vars($xml_objects);

                    foreach ($vars as $key => $value) {
                        $records[$count][$key] = (string) $value;

                        if ($order_by == 'id') {
                            $records[$count]['sort'] = (int) $vars['id'];
                        } else {
                            $records[$count]['sort'] = (string) $vars[$order_by];
                        }
                    }

                    $count++;
                }

                // Sort records
                $records = Table::subvalSort($records, 'sort', $order);

                // Slice records array
                if ($offset === null && is_int($row_count)) {
                    $records = array_slice($records, -$row_count, $row_count);
                } elseif ($offset !== null && is_int($row_count)) {
                    $records = array_slice($records, $offset, $row_count);
                }
            } else {

                // Single record
                $vars = get_object_vars($_records[0]);
                foreach ($vars as $key => $value) {
                    $records[$key] = (string) $value;
                }
            }
        }

        // Return records
        return $records;
    }

    /**
     * Delete current record in table
     *
     *  <code>
     *      $users->delete(2);
     *  </code>
     *
     * @param  integer $id Record ID
     * @return boolean
     */
    public function delete($id)
    {
        // Redefine vars
        $id = (int) $id;

        // Find record to delete
        $xml_arr = Table::_selectOne($this->table, "//".$this->name."[id='".$id."']");

        // If its exists then delete it
        if (count($xml_arr) !== 0) {

            // Delete
            unset($xml_arr[0]);
        }

        // Save table
        return Table::_save($this->table);
    }

    /**
     * Delete with xPath query record in xml file
     *
     *  <code>
     *      $users->deleteWhere('[id=2]');
     *  </code>
     *
     * @param  string  $query xPath query
     * @return boolean
     */
    public function deleteWhere($query)
    {
        // Redefine vars
        $query = (string) $query;

        // Find record to delete
        $xml_arr = Table::_selectOne($this->table, '//'.$this->name.$query);

        // If its exists then delete it
        if (count($xml_arr) !== 0) {

            // Delete
            unset($xml_arr[0]);
        }

        // Save table
        return Table::_save($this->table);
    }

    /**
     * Update record with xPath query in XML file
     *
     *  <code>
     *      $users->updateWhere('[id=2]', array('login'=>'Admin', 'password'=>'new pass'));
     *  </code>
     *
     * @param  string  $query  XPath query
     * @param  array   $fields Record fields to udpate
     * @return boolean
     */
    public function updateWhere($query, array $fields = null)
    {
        // Redefine vars
        $query = (string) $query;

        // Set save flag to true
        $save = true;

        // Foreach fields check is current field alredy exists
        if (count($fields) !== 0) {
            foreach ($fields as $key => $value) {
                if (Table::_selectOne($this->table, "fields/{$key}") == null) {
                    $save = false;
                    break;
                }
            }
        }

        // Get table fields and create fields names array
        $_fields = Table::_selectOne($this->table, "fields");
        foreach ($_fields as $key => $value) {
            $field_names[(string) $key] = (string) $key;
        }

        // Save record
        if ($save) {

            // Find record
            $xml_arr = Table::_selectOne($this->table, '//'.$this->name.$query);

            // If its exists then delete it
            if (count($fields) !== 0) {
                foreach ($fields as $key => $value) {
                    // Else: Strict Mode Error
                    // Creating default object from empty value
                    @$xml_arr->$key = XML::safe($value, false);
                }
            }

            // Save table
            return Table::_save($this->table);
        } else {
            return false;
        }
    }

    /**
     * Update current record in table
     *
     *  <code>
     *      $users->update(1, array('login'=>'Admin','password'=>'new pass'));
     *  </code>
     *
     * @param  integer $id     Record ID
     * @param  array   $fields Record fields to udpate
     * @return boolean
     */
    public function update($id, array $fields = null)
    {
        // Redefine vars
        $id = (int) $id;

        // Set save flag to true
        $save = true;

        // Foreach fields check is current field alredy exists
        if (count($fields) !== 0) {
            foreach ($fields as $key => $value) {
                if (Table::_selectOne($this->table, "fields/{$key}") == null) {
                    $save = false;
                    break;
                }
            }
        }

        // Get table fields and create fields names array
        $_fields = Table::_selectOne($this->table, "fields");
        foreach ($_fields as $key => $value) {
            $field_names[(string) $key] = (string) $key;
        }

        // Save record
        if ($save) {

            // Find record to delete
            $xml_arr = Table::_selectOne($this->table, "//".$this->name."[id='".(int) $id."']");

            // If its exists then update it
            if (count($fields) !== 0) {
                foreach ($fields as $key => $value) {

                    // Delete current
                    unset($xml_arr->$key);

                    // And add new one
                    $xml_arr->addChild($key, XML::safe($value, false));
                }
            }

            // Save table
            return Table::_save($this->table);
        } else {
            return false;
        }
    }

    /**
     * Get last record id
     *
     *  <code>
     *      echo $users->lastId();
     *  </code>
     *
     * @return integer
     */
    public function lastId()
    {
        $data = $this->table['xml_object']->xpath("//root/node()[last()]");

        return (int) $data[0]->id;
    }

    /**
     * Get count of records
     *
     *  <code>
     *      echo $users->count();
     *  </code>
     *
     * @return integer
     */
    public function count()
    {
        return count($this->table['xml_object'])-2;
    }

    /**
     * Subval sort
     *
     * @param  array  $a      Array
     * @param  string $subkey Key
     * @param  string $order  Order type DESC or ASC
     * @return array
     */
    protected static function subvalSort($a, $subkey, $order = null)
    {
        if (count($a) != 0 || (!empty($a))) {
            foreach ($a as $k=>$v) {
                $b[$k] = function_exists('mb_strtolower') ? mb_strtolower($v[$subkey]) : strtolower($v[$subkey]);
            }
            if ($order==null || $order== 'ASC') {
                asort($b);
            } elseif ($order == 'DESC') {
                arsort($b);
            }
            foreach ($b as $key=>$val) {
                $c[] = $a[$key];
            }

            return $c;
        }
        return $a;
    }

    /**
     * _selectOne
     */
    protected static function _selectOne($table, $query)
    {
        $tmp = $table['xml_object']->xpath($query);

        return isset($tmp[0])? $tmp[0]: null;
    }

    /**
     * _updateWhere
     */
    protected static function _updateWhere($table, $query, $fields = array())
    {
        // Find record to delete
        $xml_arr = Table::_selectOne($table, $query);

        // If its exists then delete it
        if (count($fields) !== 0) {
            foreach ($fields as $key => $value) {
                $xml_arr->$key = XML::safe($value, false);
            }
        }

        // Save table
        Table::_save($table);
    }

    /**
     * _generateUID
     */
    protected static function _generateUID()
    {
        return substr(md5(uniqid(rand(), true)), 0, 10);
    }

    /**
     * Format XML and save
     *
     * @param array $table Array of database name and XML object
     */
    protected static function _save($table)
    {
        $dom = new DOMDocument('1.0', 'utf-8');
        $dom->preserveWhiteSpace = false;

        // Save new xml data to xml file only if loadXML successful.
        // Preventing the destruction of the database by unsafe data.
        // note: If loadXML !successful then _save() add&save empty record.
        //       This record cant be removed by delete[Where]() Problem solved by hand removing...
        //       Possible solution: modify delete[Where]() or prevent add&saving of such records.
        // the result now: database cant be destroyed :)
        if ($dom->loadXML($table['xml_object']->asXML())) {
            $dom->save($table['xml_filename']);

            return true;
        } else {
            return false;
            // report about errors...
        }
    }
}


================================================
FILE: engine/Xmldb/XML.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


class XML
{
    /**
     * Protected constructor since this is a static class.
     *
     * @access  protected
     */
    protected function __construct()
    {
        // Nothing here
    }

    /**
     * Create safe xml data. Removes dangerous characters for string.
     *
     *  <code>
     *      $xml_safe = XML::safe($xml_unsafe);
     *  </code>
     *
     * @param  string  $str  String
     * @param  boolean $flag Flag
     * @return string
     */
    public static function safe($str, $flag = true)
    {
        // Redefine vars
        $str  = (string) $str;
        $flag = (bool) $flag;

        // Remove invisible chars
        $non_displayables = array('/%0[0-8bcef]/', '/%1[0-9a-f]/', '/[\x00-\x08]/', '/\x0b/', '/\x0c/', '/[\x0e-\x1f]/');
        do {
            $cleaned = $str;
            $str = preg_replace($non_displayables, '', $str);
        } while ($cleaned != $str);

        // htmlspecialchars
        if ($flag) {
            $str = htmlspecialchars($str, ENT_QUOTES, 'utf-8');
        }

        // Return safe string
        return $str;
    }

    /**
     * Get XML file
     *
     *  <code>
     *      $xml_file = XML::loadFile('path/to/file.xml');
     *  </code>
     *
     * @param  string  $file  File name
     * @param  boolean $force Method
     * @return array
     */
    public static function loadFile($file, $force = false)
    {
        // Redefine vars
        $file  = (string) $file;
        $force = (bool) $force;

        // For CMS API XML file force method
        if ($force) {
            $xml = file_get_contents($file);
            $data = simplexml_load_string($xml);

            return $data;
        } else {
            if (file_exists($file) && is_file($file)) {
                $xml = file_get_contents($file);
                $data = simplexml_load_string($xml);

                return $data;
            } else {
                return false;
            }
        }
    }
}


================================================
FILE: engine/_init.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 *  Monstra requires PHP 5.3.2 or greater
 */
if (version_compare(PHP_VERSION, "5.3.2", "<")) {
    exit("Monstra requires PHP 5.3.2 or greater.");
}

/**
 *  Include Monstra Engine
 */
include ROOT . DS .'engine'. DS .'Monstra.php';

/**
 * Set Monstra Environment
 *
 * Monstra has four predefined environments:
 *   Monstra::DEVELOPMENT - The development environment.
 *   Monstra::TESTING     - The test environment.
 *   Monstra::STAGING     - The staging environment.
 *   Monstra::PRODUCTION  - The production environment.
 */
Monstra::$environment = Monstra::PRODUCTION;

/**
 * Report Errors
 */
if (Monstra::$environment == Monstra::PRODUCTION) {
    error_reporting(0);
} else {
    error_reporting(-1);
}

/**
 * Initialize Monstra
 */
Monstra::init();


================================================
FILE: engine/boot/actions.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Set meta generator
 */
Action::add('theme_meta', 'setMetaGenerator');
function setMetaGenerator()
{
    echo '<meta name="generator" content="Powered by Monstra '.Monstra::VERSION.'" />'."\n";
}


================================================
FILE: engine/boot/defines.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Monstra Defines
 */

/**
 * The filesystem path to the site 'themes' folder
 */
define('THEMES_SITE', ROOT . DS . 'public' . DS . 'themes');

/**
 * The filesystem path to the admin 'themes' folder
 */
define('THEMES_ADMIN', ROOT . DS . 'admin' . DS . 'themes');

/**
 * The filesystem path to the 'plugins' folder
 */
define('PLUGINS', ROOT . DS . 'plugins');

/**
 * The filesystem path to the 'box' folder which is contained within
 * the 'plugins' folder
 */
define('PLUGINS_BOX', PLUGINS . DS . 'box');

/**
 * The filesystem path to the 'storage' folder
 */
define('STORAGE', ROOT . DS . 'storage');

/**
 * The filesystem path to the 'xmldb' folder
 */
define('XMLDB', STORAGE . DS . 'database');

/**
 * The filesystem path to the 'cache' folder
 */
define('CACHE', ROOT . DS . 'tmp' . DS . 'cache');

/**
 * The filesystem path to the 'minify' folder
 */
define('MINIFY', ROOT . DS . 'tmp' . DS . 'minify');

/**
 * The filesystem path to the 'logs' folder
 */
define('LOGS', ROOT . DS . 'tmp' . DS . 'logs');

/**
 * The filesystem path to the 'assets' folder
 */
define('ASSETS', ROOT . DS . 'public' . DS . 'assets');

/**
 * The filesystem path to the 'uploads' folder
 */
define('UPLOADS', ROOT . DS . 'public' . DS . 'uploads');

/**
 * Set password salt
 */
define('MONSTRA_PASSWORD_SALT', 'YOUR_SALT_HERE');

/**
 * Set date format
 */
define('MONSTRA_DATE_FORMAT', 'Y-m-d / H:i:s');

/**
 * Set eval php
 */
define('MONSTRA_EVAL_PHP', false);

/**
 * Check Monstra CMS version
 */
define('CHECK_MONSTRA_VERSION', true);

/**
 * Set gzip output
 */
define('MONSTRA_GZIP', false);

/**
 * Monstra database settings
 */
//define('MONSTRA_DB_DSN', 'mysql:dbname=monstra;host=localhost;port=3306');
//define('MONSTRA_DB_USER', 'root');
//define('MONSTRA_DB_PASSWORD', 'password');



================================================
FILE: engine/boot/filters.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

/**
 * Evaluate a string as PHP code
 */
if (MONSTRA_EVAL_PHP) {
    Filter::add('content', 'evalPHP');
}
function obEval($mathes)
{
    ob_start();
    eval($mathes[1]);
    $mathes = ob_get_contents();
    ob_end_clean();

    return $mathes;
}
function evalPHP($str)
{
    return preg_replace_callback('/\[php\](.*?)\[\/php\]/ms', 'obEval', $str);
}

/**
 * Add shortcode parser filter
 */
Filter::add('content', 'Shortcode::parse', 11);


================================================
FILE: engine/boot/shortcodes.php
================================================
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');

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


================================================
FILE: index.php
================================================
<?php

/**
 * Monstra
 *
 * @package Monstra
 * @author Romanenko Sergey / Awilum <awilum@msn.com>
 * @link http://monstra.org
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */


// Main engine defines
define('DS', DIRECTORY_SEPARATOR);
define('ROOT', rtrim(dirname(__FILE__), '\\/'));
define('BACKEND', false);
define('MONSTRA_ACCESS', true);

// First check for installer then go
if (file_exists('install.php')) {
    if (isset($_GET['install'])) {
        if ($_GET['install'] == 'done') {
            // Try to delete install file if not delete manually
            @unlink('install.php');
            // Redirect to main page
            header('location: index.php');
        }
    } else {
        include 'install.php';
    }
} else {

    // Load Engine init file
    require_once ROOT. DS . 'engine'. DS . '_init.php';

    // Check for maintenance mod
    if ('on' == Option::get('maintenance_status')) {

        // Set maintenance mode for all except admin and editor
        if ((Session::exists('user_role')) and (Session::get('user_role') == 'admin' or Session::get('user_role') == 'editor')) {
            // Monstra show this page :)
        } else {
            header('HTTP/1.1 503 Service Temporarily Unavailable');
            header('Status: 503 Service Temporarily Unavailable');
            header('Retry-After: 600');
            die(Text::toHtml(Option::get('maintenance_message')));
        }
    }

    // Frontend pre render
    Action::run('frontend_pre_render');

    // Load site template
    require MINIFY . DS . 'theme.' . Site::theme() . '.' . Site::template() . '.template.php';

    // Frontend pre render
    Action::run('frontend_post_render');

    // Flush (send) the output buffer and turn off output buffering
    ob_end_flush();
}


================================================
FILE: install.php
================================================
<?php

    /**
     * Monstra :: Installator
     */

    // Main engine defines
    if (! defined('DS')) {
        define('DS', DIRECTORY_SEPARATOR);
    }
    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
    require_once(ROOT . DS . 'engine' . DS . '_init.php');

    // Get array with the names of all modules compiled and loaded
    $php_modules = get_loaded_extensions();

    // Protocol to use
    $protocol = 'http';

    // Get server port
    if ($_SERVER["SERVER_PORT"] == "80") {
        $port = "";
    } elseif ($_SERVER["SERVER_PORT"] == "443") {
        $port = "";
        $protocol = 'https';
    } else {
        $port = ':'.$_SERVER["SERVER_PORT"];
    }

    // Get site URL
    $site_url = $protocol . '://'.$_SERVER["SERVER_NAME"].$port.str_replace(array("index.php", "install.php"), "", $_SERVER['PHP_SELF']);

    // Replace last slash in site_url
    $site_url = rtrim($site_url, '/');

    // Rewrite base
    $rewrite_base = str_replace(array("index.php", "install.php"), "", $_SERVER['PHP_SELF']);

    // Errors array
    $errors = array();

    // Directories to check
    $dir_array = array('public', 'storage', 'backups', 'tmp');

    // Languages array
    $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
    if (Request::get('language')) {
        if (Request::get('action') && Request::get('action') == 'install') {
            $action = '?action=install';
        } else {
            $action = '';
        }
        if (in_array(Request::get('language'), $languages_array)) {
            if (Option::update('language', Request::get('language'))) {
                Request::redirect($site_url.$action);
            }
        } else {
            Request::redirect($site_url.$action);
        }
    }

    // If pressed <Install> button then try to install
    if (Request::post('install_submit')) {
        if (Request::post('sitename') == '') {
            $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('password') == '') {
            $errors['password'] = __('Field "Password" 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 (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 (count($errors) == 0) {

            // Update options
            Option::update(array('maintenance_status' => 'off',
                                 'sitename'           => Request::post('sitename'),
                                 'siteurl'            => Request::post('siteurl'),
                                 'description'        => __('Site description', 'system'),
                                 'keywords'           => __('Site keywords', 'system'),
                                 'slogan'             => __('Site slogan', 'system'),
                                 'defaultpage'        => 'home',
                                 'timezone'           => Request::post('timezone'),
                                 'system_email'       => Request::post('email'),
                                 'theme_site_name'    => 'default',
                                 'theme_admin_name'   => 'default'));

            // Get users table
            $users = new Table('users');

            // Insert new user with role = admin
            $users->insert(array('login'           => Security::safeName(Request::post('login')),
                                 'password'        => Security::encryptPassword(Request::post('password')),
                                 'email'           => Request::post('email'),
                                 'hash'            => Text::random('alnum', 12),
                                 'date_registered' => time(),
                                 'role'            => 'admin'));

            // Write .htaccess
            $htaccess = file_get_contents('.htaccess');
            $save_htaccess_content = str_replace("/%siteurlhere%/", $rewrite_base, $htaccess);

            $handle = fopen('.htaccess', "w");
            fwrite($handle, $save_htaccess_content);
            fclose($handle);

            // Installation done :)
            header("location: index.php?install=done");
        } else {
            Notification::setNow('errors', $errors);
        }
    }
?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Monstra :: Install</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta name="description" content="Monstra Install Area">
        <link rel="icon" href="<?php echo $site_url; ?>/favicon.ico" type="image/x-icon" />
        <link rel="shortcut icon" href="<?php echo $site_url; ?>/favicon.ico" type="image/x-icon" />
        <link rel="stylesheet" href="<?php echo $site_url; ?>/public/assets/css/bootstrap.css" media="all" type="text/css" />
        <link rel="stylesheet" href="<?php echo $site_url; ?>/admin/themes/default/css/default.css" media="all" type="text/css" />

        <style>

            .install-body {
                margin-top: 40px;
                background: #FAFAFA;
            }

            .install-languages {
                margin: 20px auto 20px;
                text-align: center;
                width: 600px;
            }

            .install-block,
            .monstra-dialog,
            .install-block-footer {
                margin: 0 auto;
                width: 600px;
            }

            .install-block-footer {
                margin-top: 20px;
                margin-bottom: 20px;
            }

            .well {
                border: none;
                border-radius: 0px;
                background: #fff;
                color: #555;
                -webkit-font-smoothing: subpixel-antialiased;
                -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.13);
                        box-shadow: 0 1px 3px rgba(0,0,0,.13);
            }


            .form-control {
                border-radius: 0px;
            }

            .monstra-says {
                margin: 20px;
            }

            .error {
                color:#8E0505;
                padding-top: 5px;
                padding-bottom: 5px;
                padding-top: 5px;
                padding-bottom: 5px;
                margin-bottom: 5px;
            }

            .ok {
                color:#00853F;
                padding-top: 5px;
                padding-bottom: 5px;
                margin-bottom: 5px;
            }

            .warn {
                color: #F74C18;
                padding-top: 5px;
                padding-bottom: 5px;
            }

            .install-languages a {
                padding-left: 2px;
                padding-right: 2px;
            }

            .language-link img {
                -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
                filter: alpha(opacity=30);
                -khtml-opacity: 0.3;
                  -moz-opacity:0.3;
                       opacity: 0.3;
            }

            .language-link-current img {
                -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
                filter: alpha(opacity=100);
                -moz-opacity:1.0;
                -khtml-opacity: 1.0;
                opacity: 1.0;
            }

            .install-languages a img:hover {
                -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
                filter: alpha(opacity=100);
                -moz-opacity:1.0;
                -khtml-opacity: 1.0;
                opacity: 1.0;
            }

            .continue {
                width: 100%;
            }

       </style>
       <script src="<?php echo $site_url; ?>/public/assets/js/jquery.min.js"></script>
       <script src="<?php echo $site_url; ?>/public/assets/js/bootstrap.min.js"></script>
    </head>
    <body class="install-body">


    <?php
        if (version_compare(PHP_VERSION, "5.3.2", "<")) {
            $errors['php'] = 'error';
        } else {
            $errors['php'] = '';
        }

        if (in_array('SimpleXML', $php_modules)) {
            $errors['simplexml'] = '';
        } else {
            $errors['simplexml'] = 'error';
        }

        if (function_exists('apache_get_modules')) {
            if (! in_array('mod_rewrite', apache_get_modules())) {
                $errors['mod_rewrite'] = 'error';
            } else {
                $errors['mod_rewrite'] = '';
            }
        } else {
            $errors['mod_rewrite'] = '';
        }

        if (is_writable(__FILE__)) {
            $errors['install'] = '';
        } else {
            $errors['install'] = 'error';
        }

        if (is_writable('sitemap.xml')) {
            $errors['sitemap'] = '';
        } else {
            $errors['sitemap'] = 'error';
        }

        if (is_writable('.htaccess')) {
            $errors['htaccess'] = '';
        } else {
            $errors['htaccess'] = 'error';
        }

        // Dirs 'public', 'storage', 'backups', 'tmp'
        foreach ($dir_array as $dir) {
            if (is_writable($dir.'/')) {
                $errors[$dir] = '';
            } else {
                $errors[$dir] = 'error';
            }
        }
    ?>

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

        <div class="install-languages">
            <?php
                if (Request::get('action') && Request::get('action') == 'install') {
                    $action = '&action=install';
                } else {
                    $action = '';
                }
            ?>
            <?php foreach ($languages_array as $lang_code) {
    ?>
            <a data-placement="top" data-toggle="tooltip" class="language-link<?php if (Option::get('language') == $lang_code) {
    echo ' language-link-current';
}
    ?>" title="<?php echo I18n::$locales[$lang_code];
    ?>" href="<?php echo $site_url.'/?language=' . $lang_code.$action;
    ?>"><img src="<?php echo $site_url;
    ?>/public/assets/img/flags/<?php echo $lang_code?>.png" alt="<?php echo $lang_code?>"></a>
            <?php

} ?>
        </div>

        <div class="install-block <?php if (Request::get('action') && Request::get('action') == 'install') {
    ?><?php

} else {
    ?> hide <?php

} ?>">

            <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 class="form-group">
                    <label><?php echo __('Site Url', 'system'); ?></label>
                    <input class="form-control" name="siteurl" type="text" value="<?php echo Html::toText($site_url); ?>" />
                </div>

                <div class="form-group">
                    <label><?php echo __('Username', 'users'); ?></label>
                    <input class="form-control login" name="login" value="<?php if (Request::post('login')) {
    echo Html::toText(Request::post('login'));
} ?>" type="text" />
                </div>

                <div class="form-group">
                    <label><?php echo __('Password', 'users'); ?></label>
                    <input class="form-control" name="password" type="password" />
                </div>

                <div class="form-group">
                    <label><?php echo __('Time zone', 'system'); ?></label>
                    <select class="form-control" name="timezone">
                        <option value="Kwajalein">(GMT-12:00) International Date Line West</option>
                        <option value="Pacific/Samoa">(GMT-11:00) Midway Island, Samoa</option>
                        <option value="Pacific/Honolulu">(GMT-10:00) Hawaii</option>
                        <option value="America/Anchorage">(GMT-09:00) Alaska</option>
                        <option value="America/Los_Angeles">(GMT-08:00) Pacific Time (US &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 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.'/')) {
                
Download .txt
gitextract_7f0ld_nn/

├── .gitignore
├── CHANGELOG.md
├── LICENSE.md
├── README.md
├── admin/
│   ├── index.php
│   └── themes/
│       └── default/
│           ├── css/
│           │   └── default.css
│           ├── index.template.php
│           ├── js/
│           │   └── default.js
│           └── login.template.php
├── boot/
│   └── defines.php
├── engine/
│   ├── Alert.php
│   ├── Monstra.php
│   ├── Option.php
│   ├── Plugin/
│   │   ├── Action.php
│   │   ├── Backend.php
│   │   ├── Filter.php
│   │   ├── Frontend.php
│   │   ├── I18n.php
│   │   ├── Javascript.php
│   │   ├── Navigation.php
│   │   ├── Plugin.php
│   │   ├── Stylesheet.php
│   │   └── View.php
│   ├── Security.php
│   ├── Shortcode.php
│   ├── Site.php
│   ├── Uri.php
│   ├── Xmldb/
│   │   ├── DB.php
│   │   ├── Table.php
│   │   └── XML.php
│   ├── _init.php
│   └── boot/
│       ├── actions.php
│       ├── defines.php
│       ├── filters.php
│       └── shortcodes.php
├── index.php
├── install.php
├── libraries/
│   ├── Gelato/
│   │   ├── Agent/
│   │   │   └── Agent.php
│   │   ├── Arr/
│   │   │   └── Arr.php
│   │   ├── Cache/
│   │   │   └── Cache.php
│   │   ├── ClassLoader/
│   │   │   └── ClassLoader.php
│   │   ├── Cookie/
│   │   │   └── Cookie.php
│   │   ├── Curl/
│   │   │   └── Curl.php
│   │   ├── Date/
│   │   │   └── Date.php
│   │   ├── Debug/
│   │   │   └── Debug.php
│   │   ├── ErrorHandler/
│   │   │   ├── ErrorHandler.php
│   │   │   └── Resources/
│   │   │       └── Views/
│   │   │           └── Errors/
│   │   │               ├── exception.php
│   │   │               └── production.php
│   │   ├── FileSystem/
│   │   │   ├── Dir.php
│   │   │   └── File.php
│   │   ├── Form/
│   │   │   └── Form.php
│   │   ├── Gelato.php
│   │   ├── Html/
│   │   │   └── Html.php
│   │   ├── Http/
│   │   │   ├── Request.php
│   │   │   └── Response.php
│   │   ├── Image/
│   │   │   └── Image.php
│   │   ├── Inflector/
│   │   │   └── Inflector.php
│   │   ├── Log/
│   │   │   └── Log.php
│   │   ├── Minify/
│   │   │   ├── MinifyCSS.php
│   │   │   ├── MinifyHTML.php
│   │   │   └── MinifyJS.php
│   │   ├── Notification/
│   │   │   └── Notification.php
│   │   ├── Number/
│   │   │   └── Number.php
│   │   ├── README.md
│   │   ├── Registry/
│   │   │   └── Registry.php
│   │   ├── Security/
│   │   │   └── Token.php
│   │   ├── Session/
│   │   │   └── Session.php
│   │   ├── Text/
│   │   │   └── Text.php
│   │   ├── Url/
│   │   │   └── Url.php
│   │   ├── Validation/
│   │   │   └── Valid.php
│   │   ├── Zip/
│   │   │   └── Zip.php
│   │   ├── _logs/
│   │   │   └── .empty
│   │   ├── changelog.txt
│   │   └── license.txt
│   ├── Idiorm/
│   │   └── ORM.php
│   └── PHPMailer/
│       └── PHPMailer.php
├── plugins/
│   ├── box/
│   │   ├── backup/
│   │   │   ├── backup.admin.php
│   │   │   ├── backup.plugin.php
│   │   │   ├── install/
│   │   │   │   └── backup.manifest.xml
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   └── views/
│   │   │       └── backend/
│   │   │           └── index.view.php
│   │   ├── blocks/
│   │   │   ├── blocks.admin.php
│   │   │   ├── blocks.plugin.php
│   │   │   ├── install/
│   │   │   │   └── blocks.manifest.xml
│   │   │   ├── js/
│   │   │   │   ├── .htaccess
│   │   │   │   └── blocks.js
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   └── views/
│   │   │       └── backend/
│   │   │           ├── add.view.php
│   │   │           ├── edit.view.php
│   │   │           └── index.view.php
│   │   ├── dashboard/
│   │   │   ├── dashboard.admin.php
│   │   │   ├── dashboard.plugin.php
│   │   │   ├── install/
│   │   │   │   └── dashboard.manifest.xml
│   │   │   ├── js/
│   │   │   │   ├── .htaccess
│   │   │   │   └── ganalytics.js
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   └── uk.lang.php
│   │   │   └── views/
│   │   │       └── backend/
│   │   │           ├── ga.view.php
│   │   │           └── index.view.php
│   │   ├── editor/
│   │   │   ├── editor.plugin.php
│   │   │   ├── install/
│   │   │   │   └── editor.manifest.xml
│   │   │   └── languages/
│   │   │       ├── cs.lang.php
│   │   │       ├── de.lang.php
│   │   │       ├── en.lang.php
│   │   │       ├── es.lang.php
│   │   │       ├── fa.lang.php
│   │   │       ├── fr.lang.php
│   │   │       ├── hu.lang.php
│   │   │       ├── it.lang.php
│   │   │       ├── ja.lang.php
│   │   │       ├── ka-ge.lang.php
│   │   │       ├── lt.lang.php
│   │   │       ├── nl.lang.php
│   │   │       ├── pl.lang.php
│   │   │       ├── pt-br.lang.php
│   │   │       ├── ru.lang.php
│   │   │       ├── sk.lang.php
│   │   │       ├── sr.lang.php
│   │   │       ├── tr.lang.php
│   │   │       ├── uk.lang.php
│   │   │       └── zh-cn.lang.php
│   │   ├── emails/
│   │   │   ├── css/
│   │   │   │   ├── .htaccess
│   │   │   │   └── inc.css
│   │   │   ├── emails.admin.php
│   │   │   ├── emails.plugin.php
│   │   │   ├── install/
│   │   │   │   └── emails.manifest.xml
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   └── uk.lang.php
│   │   │   └── views/
│   │   │       ├── backend/
│   │   │       │   ├── edit.view.php
│   │   │       │   └── index.view.php
│   │   │       └── emails/
│   │   │           └── email_layout.view.php
│   │   ├── filesmanager/
│   │   │   ├── css/
│   │   │   │   ├── .htaccess
│   │   │   │   └── style.css
│   │   │   ├── filesmanager.admin.php
│   │   │   ├── filesmanager.plugin.php
│   │   │   ├── install/
│   │   │   │   └── filesmanager.manifest.xml
│   │   │   ├── js/
│   │   │   │   ├── .htaccess
│   │   │   │   ├── filesmanager.js
│   │   │   │   └── fileuploader.js
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   └── views/
│   │   │       └── backend/
│   │   │           └── index.view.php
│   │   ├── information/
│   │   │   ├── information.admin.php
│   │   │   ├── information.plugin.php
│   │   │   ├── install/
│   │   │   │   └── information.manifest.xml
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   └── views/
│   │   │       └── backend/
│   │   │           └── index.view.php
│   │   ├── menu/
│   │   │   ├── install/
│   │   │   │   └── menu.manifest.xml
│   │   │   ├── js/
│   │   │   │   ├── .htaccess
│   │   │   │   └── menu.js
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   ├── menu.admin.php
│   │   │   ├── menu.plugin.php
│   │   │   └── views/
│   │   │       ├── backend/
│   │   │       │   ├── add.view.php
│   │   │       │   ├── edit.view.php
│   │   │       │   └── index.view.php
│   │   │       └── frontend/
│   │   │           └── index.view.php
│   │   ├── pages/
│   │   │   ├── install/
│   │   │   │   └── pages.manifest.xml
│   │   │   ├── js/
│   │   │   │   ├── .htaccess
│   │   │   │   └── pages.js
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   ├── pages.admin.php
│   │   │   ├── pages.plugin.php
│   │   │   └── views/
│   │   │       ├── backend/
│   │   │       │   ├── add.view.php
│   │   │       │   ├── edit.view.php
│   │   │       │   └── index.view.php
│   │   │       └── frontend/
│   │   │           ├── available_pages.view.php
│   │   │           └── breadcrumbs.view.php
│   │   ├── plugins/
│   │   │   ├── install/
│   │   │   │   └── plugins.manifest.xml
│   │   │   ├── js/
│   │   │   │   ├── .htaccess
│   │   │   │   └── plugins.js
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   ├── plugins.admin.php
│   │   │   ├── plugins.plugin.php
│   │   │   └── views/
│   │   │       └── backend/
│   │   │           └── index.view.php
│   │   ├── sitemap/
│   │   │   ├── install/
│   │   │   │   └── sitemap.manifest.xml
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   ├── sitemap.plugin.php
│   │   │   └── views/
│   │   │       └── frontend/
│   │   │           └── index.view.php
│   │   ├── snippets/
│   │   │   ├── install/
│   │   │   │   └── snippets.manifest.xml
│   │   │   ├── js/
│   │   │   │   ├── .htaccess
│   │   │   │   └── snippets.js
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   ├── snippets.admin.php
│   │   │   ├── snippets.plugin.php
│   │   │   └── views/
│   │   │       └── backend/
│   │   │           ├── add.view.php
│   │   │           ├── edit.view.php
│   │   │           └── index.view.php
│   │   ├── system/
│   │   │   ├── install/
│   │   │   │   └── system.manifest.xml
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   ├── system.admin.php
│   │   │   ├── system.plugin.php
│   │   │   └── views/
│   │   │       └── backend/
│   │   │           └── index.view.php
│   │   ├── themes/
│   │   │   ├── install/
│   │   │   │   └── themes.manifest.xml
│   │   │   ├── languages/
│   │   │   │   ├── cs.lang.php
│   │   │   │   ├── de.lang.php
│   │   │   │   ├── en.lang.php
│   │   │   │   ├── es.lang.php
│   │   │   │   ├── fa.lang.php
│   │   │   │   ├── fr.lang.php
│   │   │   │   ├── hu.lang.php
│   │   │   │   ├── id.lang.php
│   │   │   │   ├── it.lang.php
│   │   │   │   ├── ja.lang.php
│   │   │   │   ├── ka-ge.lang.php
│   │   │   │   ├── lt.lang.php
│   │   │   │   ├── nl.lang.php
│   │   │   │   ├── pl.lang.php
│   │   │   │   ├── pt-br.lang.php
│   │   │   │   ├── ru.lang.php
│   │   │   │   ├── sk.lang.php
│   │   │   │   ├── sr.lang.php
│   │   │   │   ├── tr.lang.php
│   │   │   │   ├── uk.lang.php
│   │   │   │   └── zh-cn.lang.php
│   │   │   ├── themes.admin.php
│   │   │   ├── themes.plugin.php
│   │   │   └── views/
│   │   │       └── backend/
│   │   │           ├── add.view.php
│   │   │           ├── edit.view.php
│   │   │           └── index.view.php
│   │   └── users/
│   │       ├── install/
│   │       │   └── users.manifest.xml
│   │       ├── js/
│   │       │   ├── .htaccess
│   │       │   └── users.js
│   │       ├── languages/
│   │       │   ├── cs.lang.php
│   │       │   ├── de.lang.php
│   │       │   ├── en.lang.php
│   │       │   ├── es.lang.php
│   │       │   ├── fa.lang.php
│   │       │   ├── fr.lang.php
│   │       │   ├── hu.lang.php
│   │       │   ├── id.lang.php
│   │       │   ├── it.lang.php
│   │       │   ├── ja.lang.php
│   │       │   ├── ka-ge.lang.php
│   │       │   ├── lt.lang.php
│   │       │   ├── nl.lang.php
│   │       │   ├── pl.lang.php
│   │       │   ├── pt-br.lang.php
│   │       │   ├── ru.lang.php
│   │       │   ├── sk.lang.php
│   │       │   ├── sr.lang.php
│   │       │   ├── tr.lang.php
│   │       │   ├── uk.lang.php
│   │       │   └── zh-cn.lang.php
│   │       ├── users.admin.php
│   │       ├── users.plugin.php
│   │       └── views/
│   │           ├── backend/
│   │           │   ├── add.view.php
│   │           │   ├── edit.view.php
│   │           │   └── index.view.php
│   │           └── frontend/
│   │               ├── edit.view.php
│   │               ├── index.view.php
│   │               ├── login.view.php
│   │               ├── password_reset.view.php
│   │               ├── profile.view.php
│   │               ├── registration.view.php
│   │               └── userspanel.view.php
│   ├── captcha/
│   │   ├── captcha.plugin.php
│   │   ├── crypt/
│   │   │   ├── .htaccess
│   │   │   ├── cryptographp.cfg.php
│   │   │   ├── cryptographp.fct.php
│   │   │   ├── cryptographp.inc.php
│   │   │   ├── cryptographp.php
│   │   │   ├── fonts/
│   │   │   │   ├── index.html
│   │   │   │   └── luggerbu.txt
│   │   │   ├── images/
│   │   │   │   ├── .htaccess
│   │   │   │   └── index.html
│   │   │   ├── index.html
│   │   │   └── index.php
│   │   ├── install/
│   │   │   ├── captcha.install.php
│   │   │   ├── captcha.manifest.xml
│   │   │   └── captcha.uninstall.php
│   │   └── languages/
│   │       ├── cs.lang.php
│   │       ├── de.lang.php
│   │       ├── en.lang.php
│   │       ├── es.lang.php
│   │       ├── fa.lang.php
│   │       ├── fr.lang.php
│   │       ├── id.lang.php
│   │       ├── it.lang.php
│   │       ├── ka-ge.lang.php
│   │       ├── lt.lang.php
│   │       ├── nl.lang.php
│   │       ├── pl.lang.php
│   │       ├── pt-br.lang.php
│   │       ├── ru.lang.php
│   │       ├── sk.lang.php
│   │       ├── sr.lang.php
│   │       ├── tr.lang.php
│   │       ├── uk.lang.php
│   │       └── zh-cn.lang.php
│   ├── markitup/
│   │   ├── install/
│   │   │   └── markitup.manifest.xml
│   │   ├── markitup/
│   │   │   ├── .htaccess
│   │   │   ├── jquery.markitup.js
│   │   │   ├── sets/
│   │   │   │   └── html/
│   │   │   │       ├── set.js
│   │   │   │       └── style.css
│   │   │   ├── skins/
│   │   │   │   └── simple/
│   │   │   │       └── style.css
│   │   │   └── templates/
│   │   │       ├── preview.css
│   │   │       └── preview.html
│   │   └── markitup.plugin.php
│   └── sandbox/
│       ├── install/
│       │   ├── sandbox.install.php
│       │   ├── sandbox.manifest.xml
│       │   └── sandbox.uninstall.php
│       ├── languages/
│       │   ├── cs.lang.php
│       │   ├── de.lang.php
│       │   ├── en.lang.php
│       │   ├── es.lang.php
│       │   ├── fa.lang.php
│       │   ├── fr.lang.php
│       │   ├── id.lang.php
│       │   ├── it.lang.php
│       │   ├── ka-ge.lang.php
│       │   ├── lt.lang.php
│       │   ├── nl.lang.php
│       │   ├── pl.lang.php
│       │   ├── pt-br.lang.php
│       │   ├── ru.lang.php
│       │   ├── sk.lang.php
│       │   ├── sr.lang.php
│       │   ├── tr.lang.php
│       │   ├── uk.lang.php
│       │   └── zh-cn.lang.php
│       ├── sandbox.admin.php
│       ├── sandbox.plugin.php
│       └── views/
│           ├── backend/
│           │   └── index.view.php
│           └── frontend/
│               └── index.view.php
├── robots.txt
└── rss.php
Download .txt
SYMBOL INDEX (824 symbols across 85 files)

FILE: admin/themes/default/js/default.js
  function confirmDelete (line 17) | function confirmDelete(msg){var data=confirm(msg+" ?"); return data;}

FILE: engine/Alert.php
  class Alert (line 15) | class Alert
    method __construct (line 22) | protected function __construct()
    method success (line 37) | public static function success($message, $seconds = 3)
    method warning (line 62) | public static function warning($message, $seconds = 3)
    method error (line 87) | public static function error($message, $seconds = 3)

FILE: engine/Monstra.php
  class Monstra (line 14) | class Monstra
    method __clone (line 61) | protected function __clone()
    method __construct (line 69) | protected function __construct()
    method loadDefines (line 251) | protected static function loadDefines()
    method loadPluggable (line 271) | protected static function loadPluggable()
    method cleanTmp (line 311) | public static function cleanTmp()
    method init (line 333) | public static function init()

FILE: engine/Option.php
  class Option (line 15) | class Option
    method init (line 36) | public static function init()
    method __clone (line 49) | protected function __clone()
    method __construct (line 57) | protected function __construct()
    method add (line 74) | public static function add($option, $value = null)
    method update (line 103) | public static function update($option, $value = null)
    method get (line 127) | public static function get($option)
    method delete (line 149) | public static function delete($option)
    method exists (line 170) | public static function exists($option)

FILE: engine/Plugin/Action.php
  class Action (line 15) | class Action
    method __construct (line 29) | protected function __construct()
    method add (line 51) | public static function add($action_name, $added_function, $priority = ...
    method run (line 75) | public static function run($action_name, $args = array(), $return = fa...

FILE: engine/Plugin/Backend.php
  class Backend (line 14) | class Backend
    method main (line 16) | public static function main()

FILE: engine/Plugin/Filter.php
  class Filter (line 15) | class Filter
    method __construct (line 29) | protected function __construct()
    method apply (line 45) | public static function apply($filter_name, $value)
    method add (line 96) | public static function add($filter_name, $function_to_add, $priority =...

FILE: engine/Plugin/Frontend.php
  class Frontend (line 15) | class Frontend
    method main (line 17) | public static function main()
    method title (line 20) | public static function title()
    method description (line 24) | public static function description()
    method keywords (line 28) | public static function keywords()
    method template (line 32) | public static function template()
    method content (line 36) | public static function content()

FILE: engine/Plugin/I18n.php
  class I18n (line 15) | class I18n
    method init (line 76) | public static function init($locale)
    method __clone (line 89) | protected function __clone()
    method __construct (line 97) | protected function __construct($locale)
    method find (line 159) | public static function find($string, $namespace = null)
  function __ (line 193) | function __($string, $namespace = null, array $values = null)

FILE: engine/Plugin/Javascript.php
  class Javascript (line 15) | class Javascript
    method __construct (line 29) | protected function __construct()
    method add (line 47) | public static function add($file, $load = 'frontend', $priority = 10)
    method load (line 59) | public static function load()
    method javascriptVersionIncrement (line 133) | public static function javascriptVersionIncrement()

FILE: engine/Plugin/Navigation.php
  class Navigation (line 15) | class Navigation
    method add (line 48) | public static function add($name, $category, $id, $priority = 10, $typ...
    method draw (line 71) | public static function draw($category, $type = Navigation::LEFT)
    method get (line 125) | public static function get($category, $type = Navigation::LEFT)
    method getDropdown (line 177) | public static function getDropdown($category)

FILE: engine/Plugin/Plugin.php
  class Plugin (line 15) | class Plugin
    method init (line 43) | public static function init()
    method __clone (line 56) | protected function __clone()
    method __construct (line 64) | protected function __construct()
    method admin (line 92) | public static function admin($plug, $alt_folder = null)
    method register (line 143) | public static function register($file, $title, $description = null, $v...

FILE: engine/Plugin/Stylesheet.php
  class Stylesheet (line 15) | class Stylesheet
    method __construct (line 29) | protected function __construct()
    method add (line 47) | public static function add($file, $load = 'frontend', $priority = 10)
    method load (line 59) | public static function load()
    method parseVariables (line 135) | public static function parseVariables($frontend_buffer)
    method stylesVersionIncrement (line 149) | public static function stylesVersionIncrement()

FILE: engine/Plugin/View.php
  class View (line 15) | class View
    method __construct (line 65) | public function __construct($view, array $variables = array())
    method factory (line 99) | public static function factory($view, array $variables = array())
    method assign (line 116) | public function assign($key, $value, $global = false)
    method render (line 142) | public function render($filter = null)
    method display (line 177) | public function display()
    method __set (line 188) | public function __set($key, $value)
    method __get (line 199) | public function __get($key)
    method __isset (line 212) | public function __isset($key)
    method __unset (line 222) | public function __unset($key)
    method __toString (line 232) | public function __toString()

FILE: engine/Security.php
  class Security (line 15) | class Security
    method __construct (line 29) | protected function __construct()
    method token (line 53) | public static function token($new = false)
    method check (line 84) | public static function check($token)
    method encryptPassword (line 98) | public static function encryptPassword($password)
    method safeName (line 115) | public static function safeName($str, $delimiter = '-', $lowercase = f...
    method sanitizeURL (line 174) | public static function sanitizeURL($url)
    method runSanitizeURL (line 196) | public static function runSanitizeURL()
    method removeInvisibleCharacters (line 206) | public static function removeInvisibleCharacters($str)
    method xssClean (line 228) | public static function xssClean($str)

FILE: engine/Shortcode.php
  class Shortcode (line 15) | class Shortcode
    method __construct (line 29) | protected function __construct()
    method add (line 49) | public static function add($shortcode, $callback_function)
    method delete (line 69) | public static function delete($shortcode)
    method clear (line 88) | public static function clear()
    method exists (line 104) | public static function exists($shortcode)
    method parse (line 123) | public static function parse($content)
    method _handle (line 138) | protected static function _handle($matches)

FILE: engine/Site.php
  class Site (line 15) | class Site
    method init (line 29) | public static function init()
    method __clone (line 42) | protected function __clone()
    method __construct (line 50) | protected function __construct()
    method name (line 64) | public static function name()
    method theme (line 78) | public static function theme()
    method title (line 92) | public static function title()
    method description (line 106) | public static function description()
    method keywords (line 120) | public static function keywords()
    method slogan (line 134) | public static function slogan()
    method content (line 148) | public static function content()
    method template (line 163) | public static function template($theme = null)
    method url (line 204) | public static function url()
    method powered (line 218) | public static function powered()

FILE: engine/Uri.php
  class Uri (line 15) | class Uri
    method __construct (line 22) | protected function __construct()
    method segments (line 43) | public static function segments()
    method segment (line 85) | public static function segment($segment)
    method command (line 101) | public static function command()
    method params (line 128) | public static function params()

FILE: engine/Xmldb/DB.php
  class DB (line 15) | class DB
    method __construct (line 29) | protected function __construct()
    method configure (line 40) | public static function configure($setting, $value)
    method create (line 54) | public static function create($db_name, $chmod = 0775)
    method drop (line 72) | public static function drop($db_name)

FILE: engine/Xmldb/Table.php
  class Table (line 15) | class Table
    method configure (line 44) | public static function configure($setting, $value)
    method factory (line 61) | public static function factory($table_name)
    method __construct (line 75) | public function __construct($table_name)
    method create (line 110) | public static function create($table_name, $fields)
    method drop (line 147) | public static function drop($table_name)
    method get (line 170) | public static function get($table_name)
    method info (line 195) | public function info()
    method fields (line 217) | public function fields()
    method addField (line 241) | public function addField($name)
    method deleteField (line 278) | public function deleteField($name)
    method updateField (line 313) | public function updateField($old_name, $new_name)
    method existsField (line 339) | public function existsField($name)
    method insert (line 364) | public function insert(array $fields = null)
    method select (line 444) | public function select($query = null, $row_count = 'all', $offset = nu...
    method delete (line 572) | public function delete($id)
    method deleteWhere (line 601) | public function deleteWhere($query)
    method updateWhere (line 631) | public function updateWhere($query, array $fields = null)
    method update (line 688) | public function update($id, array $fields = null)
    method lastId (line 746) | public function lastId()
    method count (line 762) | public function count()
    method subvalSort (line 775) | protected static function subvalSort($a, $subkey, $order = null)
    method _selectOne (line 798) | protected static function _selectOne($table, $query)
    method _updateWhere (line 808) | protected static function _updateWhere($table, $query, $fields = array())
    method _generateUID (line 827) | protected static function _generateUID()
    method _save (line 837) | protected static function _save($table)

FILE: engine/Xmldb/XML.php
  class XML (line 15) | class XML
    method __construct (line 22) | protected function __construct()
    method safe (line 38) | public static function safe($str, $flag = true)
    method loadFile (line 71) | public static function loadFile($file, $force = false)

FILE: engine/boot/actions.php
  function setMetaGenerator (line 7) | function setMetaGenerator()

FILE: engine/boot/filters.php
  function obEval (line 9) | function obEval($mathes)
  function evalPHP (line 18) | function evalPHP($str)

FILE: engine/boot/shortcodes.php
  function returnSiteUrl (line 7) | function returnSiteUrl()

FILE: libraries/Gelato/Agent/Agent.php
  class Agent (line 18) | class Agent
    method __construct (line 87) | protected function __construct()
    method find (line 98) | protected static function find($agents)
    method isMobile (line 128) | public static function isMobile()
    method isRobot (line 144) | public static function isRobot()
    method is (line 165) | public static function is($device)

FILE: libraries/Gelato/Arr/Arr.php
  class Arr (line 18) | class Arr
    method __construct (line 25) | protected function __construct()
    method subvalSort (line 42) | public static function subvalSort($a, $subkey, $order = null)
    method get (line 72) | public static function get($array, $path, $default = null)
    method delete (line 105) | public static function delete(&$array, $path)
    method keyExists (line 140) | public static function keyExists($array, $path)
    method random (line 165) | public static function random($array)
    method isAssoc (line 182) | public static function isAssoc($array)

FILE: libraries/Gelato/Cache/Cache.php
  class Cache (line 18) | class Cache
    method __construct (line 46) | protected function __construct()
    method configure (line 61) | public static function configure($setting, $value)
    method get (line 77) | public static function get($namespace, $key)
    method put (line 127) | public static function put($namespace, $key, $data)
    method delete (line 157) | public static function delete($namespace, $key)
    method clean (line 175) | public static function clean($namespace)
    method getCacheFileID (line 190) | protected static function getCacheFileID($namespace, $key)
    method getNamespaceID (line 204) | protected static function getNamespaceID($namespace)

FILE: libraries/Gelato/ClassLoader/ClassLoader.php
  class ClassLoader (line 18) | class ClassLoader
    method __construct (line 54) | protected function __construct()
    method mapClass (line 70) | public static function mapClass($className, $classPath)
    method mapClasses (line 85) | public static function mapClasses(array $classes)
    method directory (line 102) | public static function directory($path)
    method registerNamespace (line 118) | public static function registerNamespace($namespace, $path)
    method alias (line 134) | public static function alias($alias, $className)
    method loadPSR0 (line 147) | protected static function loadPSR0($className, $directory = null)
    method load (line 183) | public static function load($className)
    method register (line 231) | public static function register()

FILE: libraries/Gelato/Cookie/Cookie.php
  class Cookie (line 18) | class Cookie
    method __construct (line 25) | protected function __construct()
    method set (line 46) | public static function set($key, $value, $expire = 86400, $domain = ''...
    method get (line 71) | public static function get($key)
    method delete (line 103) | public static function delete($key)

FILE: libraries/Gelato/Curl/Curl.php
  class Curl (line 18) | class Curl
    method get (line 48) | public static function get($url, array $options = null)
    method post (line 91) | public static function post($url, array $data = null, $multipart = fal...
    method getInfo (line 135) | public static function getInfo($value = null)

FILE: libraries/Gelato/Date/Date.php
  class Date (line 18) | class Date
    method __construct (line 25) | protected function __construct()
    method format (line 41) | public static function format($date, $format = 'j.n.Y')
    method seconds (line 62) | public static function seconds($step = 1, $start = 0, $end = 60)
    method minutes (line 84) | public static function minutes($step = 5, $start = 0, $end = 60)
    method hours (line 106) | public static function hours($step = 1, $long = false, $start = null)
    method months (line 127) | public static function months()
    method days (line 141) | public static function days()
    method daysInMonth (line 157) | public static function daysInMonth($month, $year = null)
    method years (line 187) | public static function years($start = 1980, $end = 2024)
    method season (line 205) | public static function season()
    method today (line 222) | public static function today($format = '')
    method yesterday (line 240) | public static function yesterday($format = '')
    method tomorrow (line 258) | public static function tomorrow($format = '')
    method unix2dos (line 276) | public static function unix2dos($timestamp = 0)
    method dos2unix (line 299) | public static function dos2unix($timestamp)
    method timezones (line 316) | public static function timezones()
    method _range (line 410) | protected static function _range($step, $start, $end, $flag = false)

FILE: libraries/Gelato/Debug/Debug.php
  class Debug (line 18) | class Debug
    method __construct (line 39) | protected function __construct()
    method elapsedTimeSetPoint (line 53) | public static function elapsedTimeSetPoint($point_name)
    method elapsedTime (line 68) | public static function elapsedTime($point_name)
    method memoryUsageSetPoint (line 82) | public static function memoryUsageSetPoint($point_name)
    method memoryUsage (line 97) | public static function memoryUsage($point_name)
    method dump (line 112) | public static function dump($data, $exit = false)

FILE: libraries/Gelato/ErrorHandler/ErrorHandler.php
  class ErrorHandler (line 18) | class ErrorHandler
    method __construct (line 45) | protected function __construct()
    method highlightCode (line 59) | protected static function highlightCode($file, $line, $padding = 6)
    method error (line 102) | public static function error($code, $message, $file, $line)
    method highlightString (line 143) | protected static function highlightString($string)
    method formatBacktrace (line 158) | protected static function formatBacktrace($backtrace)
    method fatal (line 236) | public static function fatal()
    method exception (line 253) | public static function exception($exception)

FILE: libraries/Gelato/FileSystem/Dir.php
  class Dir (line 18) | class Dir
    method __construct (line 25) | protected function __construct()
    method create (line 41) | public static function create($dir, $chmod = 0775)
    method exists (line 62) | public static function exists($dir)
    method checkPerm (line 85) | public static function checkPerm($dir)
    method delete (line 107) | public static function delete($dir)
    method scan (line 127) | public static function scan($dir)
    method writable (line 149) | public static function writable($path)
    method size (line 182) | public static function size($path)
    method copy (line 214) | public static function copy($src, $dst) {

FILE: libraries/Gelato/FileSystem/File.php
  class File (line 18) | class File
    method __construct (line 94) | protected function __construct()
    method exists (line 111) | public static function exists($filename)
    method delete (line 130) | public static function delete($filename)
    method rename (line 158) | public static function rename($from, $to)
    method copy (line 182) | public static function copy($from, $to)
    method ext (line 205) | public static function ext($filename)
    method name (line 224) | public static function name($filename)
    method scan (line 246) | public static function scan($folder, $type = null)
    method getContent (line 286) | public static function getContent($filename)
    method setContent (line 307) | public static function setContent($filename, $content, $create_file = ...
    method lastChange (line 362) | public static function lastChange($filename)
    method lastAccess (line 387) | public static function lastAccess($filename)
    method mime (line 412) | public static function mime($file, $guess = true)
    method download (line 457) | public static function download($file, $content_type = null, $filename...
    method display (line 520) | public static function display($file, $content_type = null, $filename ...
    method writable (line 562) | public static function writable($file)

FILE: libraries/Gelato/Form/Form.php
  class Form (line 18) | class Form
    method __construct (line 32) | protected function __construct()
    method macro (line 64) | public static function macro($name, $macro)
    method open (line 89) | public static function open($action = null, array $attributes = null)
    method input (line 128) | public static function input($name, $value = null, array $attributes =...
    method hidden (line 160) | public static function hidden($name, $value = null, array $attributes ...
    method password (line 181) | public static function password($name, $value = null, array $attribute...
    method file (line 201) | public static function file($name, array $attributes = null)
    method checkbox (line 223) | public static function checkbox($name, $value = null, $checked = false...
    method radio (line 250) | public static function radio($name, $value = null, $checked = null, ar...
    method textarea (line 276) | public static function textarea($name, $body = '', array $attributes =...
    method select (line 301) | public static function select($name, array $options = null, $selected ...
    method submit (line 332) | public static function submit($name, $value, array $attributes = null)
    method button (line 353) | public static function button($name, $body, array $attributes = null)
    method label (line 374) | public static function label($input, $text, array $attributes = null)
    method close (line 391) | public static function close()
    method __callStatic (line 403) | public static function __callStatic($method, $parameters)

FILE: libraries/Gelato/Html/Html.php
  class Html (line 17) | class Html
    method __construct (line 44) | protected function __construct()
    method macro (line 76) | public static function macro($name, $macro)
    method chars (line 93) | public static function chars($value, $double_encode = true)
    method attributes (line 109) | public static function attributes(array $attributes = null)
    method br (line 158) | public static function br($num = 1)
    method nbsp (line 173) | public static function nbsp($num = 1)
    method arrow (line 189) | public static function arrow($direction)
    method anchor (line 214) | public static function anchor($title, $url = null, array $attributes =...
    method heading (line 234) | public static function heading($title, $h = 1, array $attributes = null)
    method doctype (line 251) | public static function doctype($type = 'html5')
    method image (line 278) | public static function image($file, array $attributes = null)
    method email (line 301) | public static function email($email)
    method obfuscate (line 320) | public static function obfuscate($value)
    method toText (line 350) | public static function toText($str)
    method __callStatic (line 362) | public static function __callStatic($method, $parameters)

FILE: libraries/Gelato/Http/Request.php
  class Request (line 18) | class Request
    method __construct (line 25) | protected function __construct()
    method redirect (line 41) | public static function redirect($url, $status = 302, $delay = null)
    method setHeaders (line 84) | public static function setHeaders($headers)
    method get (line 106) | public static function get($key)
    method post (line 121) | public static function post($key)
    method isAjax (line 137) | public static function isAjax()
    method shutdown (line 150) | public static function shutdown()

FILE: libraries/Gelato/Http/Response.php
  class Response (line 18) | class Response
    method __construct (line 93) | protected function __construct()
    method status (line 107) | public static function status($status)

FILE: libraries/Gelato/Image/Image.php
  class Image (line 18) | class Image
    method __get (line 79) | public function __get($key)
    method __set (line 90) | public function __set($key, $value)
    method factory (line 105) | public static function factory($filename)
    method __construct (line 115) | public function __construct($file)
    method createImage (line 143) | protected function createImage($file, $type)
    method resize (line 173) | public function resize($width, $height = null, $aspect_ratio = null)
    method crop (line 267) | public function crop($width, $height, $x, $y)
    method watermark (line 309) | public function watermark($file, $position = null, $opacity = 100)
    method grayscale (line 382) | public function grayscale()
    method sepia (line 398) | public function sepia()
    method brightness (line 416) | public function brightness($level = 0)
    method colorize (line 435) | public function colorize($red, $green, $blue)
    method contrast (line 452) | public function contrast($level)
    method createColor (line 467) | protected function createColor($hex, $alpha = 100, $return_rgb = false)
    method rotate (line 516) | public function rotate($degrees)
    method border (line 571) | public function border($color = '#000', $thickness = 5)
    method save (line 616) | public function save($file, $quality = 100)
    method __destruct (line 656) | public function __destruct()

FILE: libraries/Gelato/Inflector/Inflector.php
  class Inflector (line 18) | class Inflector
    method __construct (line 87) | protected function __construct()
    method camelize (line 103) | public static function camelize($string)
    method underscore (line 122) | public static function underscore($string)
    method humanize (line 141) | public static function humanize($string)
    method ordinalize (line 160) | public static function ordinalize($number)
    method pluralize (line 188) | public static function pluralize($word)
    method singularize (line 212) | public static function singularize($word)

FILE: libraries/Gelato/Log/Log.php
  class Log (line 18) | class Log
    method __construct (line 33) | protected function __construct()
    method configure (line 45) | public static function configure($setting, $value)
    method write (line 57) | public static function write($message)

FILE: libraries/Gelato/Minify/MinifyCSS.php
  class MinifyCSS (line 19) | class MinifyCSS
    method __construct (line 39) | private function __construct($options)
    method process (line 53) | public static function process($css, $options = array())
    method _process (line 67) | protected function _process($css)
    method _selectorsCB (line 148) | protected function _selectorsCB($m)
    method _commentCB (line 161) | protected function _commentCB($m)
    method _fontFamilyCB (line 225) | protected function _fontFamilyCB($m)

FILE: libraries/Gelato/Minify/MinifyHTML.php
  class MinifyHTML (line 18) | class MinifyHTML
    method process (line 30) | public static function process($html)
    method _comments (line 42) | protected static function _comments($m)

FILE: libraries/Gelato/Minify/MinifyJS.php
  class MinifyJS (line 18) | class MinifyJS
    method process (line 30) | public static function process($js)

FILE: libraries/Gelato/Notification/Notification.php
  class Notification (line 18) | class Notification
    method __construct (line 39) | protected function __construct()
    method get (line 55) | public static function get($key)
    method set (line 75) | public static function set($key, $value)
    method setNow (line 94) | public static function setNow($key, $value)
    method clean (line 113) | public static function clean()
    method init (line 128) | public static function init()

FILE: libraries/Gelato/Number/Number.php
  class Number (line 18) | class Number
    method __construct (line 25) | protected function __construct()
    method byteFormat (line 40) | public static function byteFormat($size)
    method convertToBytes (line 60) | public static function convertToBytes( $num ) {
    method quantity (line 85) | public static function quantity($num, $decimals = 0)
    method between (line 116) | public static function between($minimum, $maximum, $value)
    method even (line 133) | public static function even($value)
    method greaterThan (line 151) | public static function greaterThan($minimum, $value)
    method smallerThan (line 169) | public static function smallerThan($maximum, $value)
    method maximum (line 187) | public static function maximum($maximum, $value)
    method minimum (line 205) | public static function minimum($minimum, $value)
    method odd (line 222) | public static function odd($value)

FILE: libraries/Gelato/Registry/Registry.php
  class Registry (line 18) | class Registry
    method exists (line 40) | public static function exists($name)
    method set (line 55) | public static function set($name, $value = null)
    method get (line 80) | public static function get($name)

FILE: libraries/Gelato/Security/Token.php
  class Token (line 18) | class Token
    method __construct (line 32) | protected function __construct()
    method generate (line 56) | public static function generate($new = false)
    method check (line 87) | public static function check($token)

FILE: libraries/Gelato/Session/Session.php
  class Session (line 18) | class Session
    method start (line 28) | public static function start()
    method delete (line 49) | public static function delete()
    method destroy (line 79) | public static function destroy()
    method exists (line 101) | public static function exists()
    method get (line 138) | public static function get($key)
    method getSessionId (line 163) | public static function getSessionId()
    method set (line 180) | public static function set($key, $value)

FILE: libraries/Gelato/Text/Text.php
  class Text (line 18) | class Text
    method __construct (line 25) | protected function __construct()
    method translitIt (line 40) | public static function translitIt($str)
    method trimSlashes (line 78) | public static function trimSlashes($str)
    method strpSlashes (line 96) | public static function strpSlashes($str)
    method stripQuotes (line 119) | public static function stripQuotes($str)
    method quotesToEntities (line 137) | public static function quotesToEntities($str)
    method random (line 156) | public static function random($type = 'alnum', $length = 16)
    method increment (line 232) | public static function increment($str, $first = 1, $separator = '_')
    method cut (line 252) | public static function cut($str, $length, $cut_msg = null)
    method lowercase (line 273) | public static function lowercase($str)
    method uppercase (line 292) | public static function uppercase($str)
    method length (line 311) | public static function length($str)
    method lorem (line 330) | public static function lorem($num = 1)
    method right (line 350) | public static function right($str, $num)
    method left (line 371) | public static function left($str, $num)
    method nl2br (line 392) | public static function nl2br($str, $xhtml = true)
    method br2nl (line 412) | public static function br2nl($str)
    method ampEncode (line 431) | public static function ampEncode($str)
    method ampDecode (line 450) | public static function ampDecode($str)
    method toHtml (line 469) | public static function toHtml($str)

FILE: libraries/Gelato/Url/Url.php
  class Url (line 18) | class Url
    method __construct (line 25) | protected function __construct()
    method tiny (line 40) | public static function tiny($url)
    method exists (line 57) | public static function exists($url)
    method base (line 88) | public static function base()
    method current (line 104) | public static function current()

FILE: libraries/Gelato/Validation/Valid.php
  class Valid (line 18) | class Valid
    method __construct (line 25) | protected function __construct()
    method email (line 42) | public static function email($email)
    method ip (line 59) | public static function ip($ip)
    method creditCard (line 82) | public static function creditCard($num, $type)
    method phone (line 110) | public static function phone($num)
    method url (line 128) | public static function url($url)
    method date (line 146) | public static function date($str)
    method digit (line 164) | public static function digit($str)
    method numeric (line 185) | public static function numeric($str)
    method regexp (line 199) | public static function regexp($regexp)

FILE: libraries/Gelato/Zip/Zip.php
  class Zip (line 18) | class Zip
    method __construct (line 36) | public function __construct()
    method factory (line 50) | public static function factory()
    method addDir (line 64) | public function addDir($directory)
    method _get_mod_time (line 86) | protected function _get_mod_time($dir)
    method _add_dir (line 104) | private function _add_dir($dir, $file_mtime, $file_mdate)
    method addData (line 157) | public function addData($filepath, $data = null)
    method _add_data (line 180) | private function _add_data($filepath, $data, $file_mtime, $file_mdate)
    method readFile (line 235) | public function readFile($path, $preserve_filepath = false)
    method readDir (line 273) | public function readDir($path, $preserve_filepath = true, $root_path =...
    method getZip (line 318) | public function getZip()
    method archive (line 347) | public function archive($filepath)
    method clearData (line 372) | public function clearData()
    method extract (line 381) | public function extract($zip_file, $target_dir = null)
    method _read_archive (line 427) | private function _read_archive($zip_file)
    method _read_file_list_by_eof (line 449) | private function _read_file_list_by_eof(&$fh)
    method _read_files_by_signatures (line 548) | private function _read_files_by_signatures(&$fh)
    method _get_file_header (line 573) | private function _get_file_header(&$fh, $start_offset = FALSE)
    method _extract_file (line 628) | private function _extract_file($compressed_file_name, $target_file_nam...
    method _uncompress (line 663) | private function _uncompress($content, $mode, $uncompressed_size, $tar...

FILE: libraries/Idiorm/ORM.php
  class ORM (line 41) | class ORM implements ArrayAccess {
    method configure (line 185) | public static function configure($key, $value = null, $connection_name...
    method get_config (line 210) | public static function get_config($key = null, $connection_name = self...
    method reset_config (line 221) | public static function reset_config() {
    method for_table (line 235) | public static function for_table($table_name, $connection_name = self:...
    method _setup_db (line 244) | protected static function _setup_db($connection_name = self::DEFAULT_C...
    method _setup_db_config (line 265) | protected static function _setup_db_config($connection_name) {
    method set_db (line 279) | public static function set_db($db, $connection_name = self::DEFAULT_CO...
    method reset_db (line 289) | public static function reset_db() {
    method _setup_identifier_quote_character (line 300) | protected static function _setup_identifier_quote_character($connectio...
    method _setup_limit_clause_style (line 313) | public static function _setup_limit_clause_style($connection_name) {
    method _detect_identifier_quote_character (line 326) | protected static function _detect_identifier_quote_character($connecti...
    method _detect_limit_clause_style (line 349) | protected static function _detect_limit_clause_style($connection_name) {
    method get_db (line 368) | public static function get_db($connection_name = self::DEFAULT_CONNECT...
    method raw_execute (line 384) | public static function raw_execute($query, $parameters = array(), $con...
    method get_last_statement (line 394) | public static function get_last_statement() {
    method _execute (line 407) | protected static function _execute($query, $parameters = array(), $con...
    method _log_query (line 429) | protected static function _log_query($query, $parameters, $connection_...
    method get_last_query (line 479) | public static function get_last_query($connection_name = null) {
    method get_query_log (line 497) | public static function get_query_log($connection_name = self::DEFAULT_...
    method get_connection_names (line 508) | public static function get_connection_names() {
    method __construct (line 520) | protected function __construct($table_name, $data = array(), $connecti...
    method create (line 536) | public function create($data=null) {
    method use_id_column (line 552) | public function use_id_column($id_column) {
    method _create_instance_from_row (line 561) | protected function _create_instance_from_row($row) {
    method find_one (line 577) | public function find_one($id=null) {
    method find_many (line 598) | public function find_many() {
    method _find_many (line 612) | protected function _find_many() {
    method find_result_set (line 623) | public function find_result_set() {
    method find_array (line 633) | public function find_array() {
    method count (line 642) | public function count($column = '*') {
    method max (line 650) | public function max($column)  {
    method min (line 658) | public function min($column)  {
    method avg (line 666) | public function avg($column)  {
    method sum (line 674) | public function sum($column)  {
    method _call_aggregate_db_function (line 684) | protected function _call_aggregate_db_function($sql_function, $column) {
    method hydrate (line 713) | public function hydrate($data=array()) {
    method force_all_dirty (line 722) | public function force_all_dirty() {
    method raw_query (line 734) | public function raw_query($query, $parameters = array()) {
    method table_alias (line 744) | public function table_alias($alias) {
    method _add_result_column (line 754) | protected function _add_result_column($expr, $alias=null) {
    method select (line 773) | public function select($column, $alias=null) {
    method select_expr (line 783) | public function select_expr($expr, $alias=null) {
    method select_many (line 801) | public function select_many() {
    method select_many_expr (line 829) | public function select_many_expr() {
    method _normalise_select_many_columns (line 854) | protected function _normalise_select_many_columns($columns) {
    method distinct (line 875) | public function distinct() {
    method _add_join_source (line 902) | protected function _add_join_source($join_operator, $table, $constrain...
    method join (line 929) | public function join($table, $constraint, $table_alias=null) {
    method inner_join (line 936) | public function inner_join($table, $constraint, $table_alias=null) {
    method left_outer_join (line 943) | public function left_outer_join($table, $constraint, $table_alias=null) {
    method right_outer_join (line 950) | public function right_outer_join($table, $constraint, $table_alias=nul...
    method full_outer_join (line 957) | public function full_outer_join($table, $constraint, $table_alias=null) {
    method _add_having (line 964) | protected function _add_having($fragment, $values=array()) {
    method _add_simple_having (line 971) | protected function _add_simple_having($column_name, $separator, $value) {
    method _add_where (line 978) | protected function _add_where($fragment, $values=array()) {
    method _add_simple_where (line 985) | protected function _add_simple_where($column_name, $separator, $value) {
    method _add_condition (line 992) | protected function _add_condition($type, $fragment, $values=array()) {
    method _add_simple_condition (line 1010) | protected function _add_simple_condition($type, $column_name, $separat...
    method _create_placeholders (line 1028) | protected function _create_placeholders($fields) {
    method where (line 1049) | public function where($column_name, $value) {
    method where_equal (line 1057) | public function where_equal($column_name, $value) {
    method where_not_equal (line 1064) | public function where_not_equal($column_name, $value) {
    method where_id_is (line 1071) | public function where_id_is($id) {
    method where_like (line 1078) | public function where_like($column_name, $value) {
    method where_not_like (line 1085) | public function where_not_like($column_name, $value) {
    method where_gt (line 1092) | public function where_gt($column_name, $value) {
    method where_lt (line 1099) | public function where_lt($column_name, $value) {
    method where_gte (line 1106) | public function where_gte($column_name, $value) {
    method where_lte (line 1113) | public function where_lte($column_name, $value) {
    method where_in (line 1120) | public function where_in($column_name, $values) {
    method where_not_in (line 1129) | public function where_not_in($column_name, $values) {
    method where_null (line 1138) | public function where_null($column_name) {
    method where_not_null (line 1146) | public function where_not_null($column_name) {
    method where_raw (line 1156) | public function where_raw($clause, $parameters=array()) {
    method limit (line 1163) | public function limit($limit) {
    method offset (line 1171) | public function offset($offset) {
    method _add_order_by (line 1179) | protected function _add_order_by($column_name, $ordering) {
    method order_by_desc (line 1188) | public function order_by_desc($column_name) {
    method order_by_asc (line 1195) | public function order_by_asc($column_name) {
    method order_by_expr (line 1202) | public function order_by_expr($clause) {
    method group_by (line 1210) | public function group_by($column_name) {
    method group_by_expr (line 1219) | public function group_by_expr($expr) {
    method having (line 1230) | public function having($column_name, $value) {
    method having_equal (line 1238) | public function having_equal($column_name, $value) {
    method having_not_equal (line 1245) | public function having_not_equal($column_name, $value) {
    method having_id_is (line 1252) | public function having_id_is($id) {
    method having_like (line 1259) | public function having_like($column_name, $value) {
    method having_not_like (line 1266) | public function having_not_like($column_name, $value) {
    method having_gt (line 1273) | public function having_gt($column_name, $value) {
    method having_lt (line 1280) | public function having_lt($column_name, $value) {
    method having_gte (line 1287) | public function having_gte($column_name, $value) {
    method having_lte (line 1294) | public function having_lte($column_name, $value) {
    method having_in (line 1301) | public function having_in($column_name, $values) {
    method having_not_in (line 1310) | public function having_not_in($column_name, $values) {
    method having_null (line 1319) | public function having_null($column_name) {
    method having_not_null (line 1327) | public function having_not_null($column_name) {
    method having_raw (line 1337) | public function having_raw($clause, $parameters=array()) {
    method _build_select (line 1345) | protected function _build_select() {
    method _build_select_start (line 1370) | protected function _build_select_start() {
    method _build_join (line 1394) | protected function _build_join() {
    method _build_where (line 1405) | protected function _build_where() {
    method _build_having (line 1412) | protected function _build_having() {
    method _build_group_by (line 1419) | protected function _build_group_by() {
    method _build_conditions (line 1431) | protected function _build_conditions($type) {
    method _build_order_by (line 1450) | protected function _build_order_by() {
    method _build_limit (line 1460) | protected function _build_limit() {
    method _build_offset (line 1477) | protected function _build_offset() {
    method _join_if_not_empty (line 1492) | protected function _join_if_not_empty($glue, $pieces) {
    method _quote_identifier (line 1510) | protected function _quote_identifier($identifier) {
    method _quote_identifier_part (line 1521) | protected function _quote_identifier_part($part) {
    method _create_cache_key (line 1538) | protected static function _create_cache_key($query, $parameters) {
    method _check_query_cache (line 1548) | protected static function _check_query_cache($cache_key, $connection_n...
    method clear_cache (line 1558) | public static function clear_cache() {
    method _cache_query_result (line 1565) | protected static function _cache_query_result($cache_key, $value, $con...
    method _run (line 1576) | protected function _run() {
    method as_array (line 1615) | public function as_array() {
    method get (line 1627) | public function get($key) {
    method _get_id_column_name (line 1635) | protected function _get_id_column_name() {
    method id (line 1648) | public function id() {
    method set (line 1659) | public function set($key, $value = null) {
    method set_expr (line 1672) | public function set_expr($key, $value = null) {
    method _set_orm_property (line 1682) | protected function _set_orm_property($key, $value = null, $expr = fals...
    method is_dirty (line 1702) | public function is_dirty($key) {
    method is_new (line 1710) | public function is_new() {
    method save (line 1718) | public function save() {
    method _build_update (line 1756) | protected function _build_update() {
    method _build_insert (line 1777) | protected function _build_insert() {
    method delete (line 1797) | public function delete() {
    method delete_many (line 1812) | public function delete_many() {
    method offsetExists (line 1828) | public function offsetExists($key) {
    method offsetGet (line 1832) | public function offsetGet($key) {
    method offsetSet (line 1836) | public function offsetSet($key, $value) {
    method offsetUnset (line 1843) | public function offsetUnset($key) {
    method __get (line 1851) | public function __get($key) {
    method __set (line 1855) | public function __set($key, $value) {
    method __unset (line 1859) | public function __unset($key) {
    method __isset (line 1864) | public function __isset($key) {
    method __call (line 1880) | public function __call($name, $arguments)
    method __callStatic (line 1899) | public static function __callStatic($name, $arguments)
  class IdiormString (line 1915) | class IdiormString {
    method value (line 1925) | public static function value($subject) {
    method str_replace_outside_quotes (line 1937) | public static function str_replace_outside_quotes($search, $replace, $...
    method __construct (line 1945) | public function __construct($subject) {
    method replace_outside_quotes (line 1956) | public function replace_outside_quotes($search, $replace) {
    method _str_replace_outside_quotes (line 1969) | protected function _str_replace_outside_quotes(){
    method _str_replace_outside_quotes_cb (line 2002) | protected function _str_replace_outside_quotes_cb($matches) {
  class IdiormResultSet (line 2015) | class IdiormResultSet implements Countable, IteratorAggregate, ArrayAcce...
    method __construct (line 2026) | public function __construct(array $results = array()) {
    method set_results (line 2034) | public function set_results(array $results) {
    method get_results (line 2042) | public function get_results() {
    method as_array (line 2050) | public function as_array() {
    method count (line 2058) | public function count() {
    method getIterator (line 2067) | public function getIterator() {
    method offsetExists (line 2076) | public function offsetExists($offset) {
    method offsetGet (line 2085) | public function offsetGet($offset) {
    method offsetSet (line 2094) | public function offsetSet($offset, $value) {
    method offsetUnset (line 2102) | public function offsetUnset($offset) {
    method serialize (line 2110) | public function serialize() {
    method unserialize (line 2119) | public function unserialize($serialized) {
    method __call (line 2132) | public function __call($method, $params = array()) {
  class IdiormStringException (line 2143) | class IdiormStringException extends Exception {}

FILE: libraries/PHPMailer/PHPMailer.php
  class PHPMailer (line 43) | class PHPMailer
    method mail_passthru (line 512) | private function mail_passthru($to, $subject, $body, $header, $params)
    method edebug (line 527) | private function edebug($str)
    method __construct (line 540) | public function __construct($exceptions = false)
    method IsHTML (line 550) | public function IsHTML($ishtml = true)
    method IsSMTP (line 563) | public function IsSMTP()
    method IsMail (line 572) | public function IsMail()
    method IsSendmail (line 581) | public function IsSendmail()
    method IsQmail (line 593) | public function IsQmail()
    method AddAddress (line 611) | public function AddAddress($address, $name = '')
    method AddCC (line 623) | public function AddCC($address, $name = '')
    method AddBCC (line 635) | public function AddBCC($address, $name = '')
    method AddReplyTo (line 646) | public function AddReplyTo($address, $name = '')
    method AddAnAddress (line 661) | protected function AddAnAddress($kind, $address, $name = '')
    method SetFrom (line 713) | public function SetFrom($address, $name = '', $auto = 1)
    method ValidateAddress (line 757) | public static function ValidateAddress($address)
    method Send (line 783) | public function Send()
    method PreSend (line 805) | public function PreSend()
    method PostSend (line 866) | public function PostSend()
    method SendmailSend (line 901) | protected function SendmailSend($header, $body)
    method MailSend (line 950) | protected function MailSend($header, $body)
    method SmtpSend (line 1001) | protected function SmtpSend($header, $body)
    method SmtpConnect (line 1079) | public function SmtpConnect()
    method SmtpClose (line 1147) | public function SmtpClose()
    method SetLanguage (line 1165) | public function SetLanguage($langcode = 'en', $lang_path = 'language/')
    method GetTranslations (line 1202) | public function GetTranslations()
    method AddrAppend (line 1218) | public function AddrAppend($type, $addr)
    method AddrFormat (line 1237) | public function AddrFormat($addr)
    method WrapText (line 1256) | public function WrapText($message, $length, $qp_mode = false)
    method UTF8CharBoundary (line 1341) | public function UTF8CharBoundary($encodedText, $maxLength)
    method SetWordWrap (line 1381) | public function SetWordWrap()
    method CreateHeader (line 1405) | public function CreateHeader()
    method GetMailMIME (line 1504) | public function GetMailMIME()
    method GetSentMIMEMessage (line 1543) | public function GetSentMIMEMessage()
    method CreateBody (line 1554) | public function CreateBody()
    method GetBoundary (line 1691) | protected function GetBoundary($boundary, $charSet, $contentType, $enc...
    method EndBoundary (line 1718) | protected function EndBoundary($boundary)
    method SetMessageType (line 1728) | protected function SetMessageType()
    method HeaderLine (line 1745) | public function HeaderLine($name, $value)
    method TextLine (line 1756) | public function TextLine($value)
    method AddAttachment (line 1776) | public function AddAttachment($path, $name = '', $encoding = 'base64',...
    method GetAttachments (line 1818) | public function GetAttachments()
    method AttachAll (line 1831) | protected function AttachAll($disposition_type, $boundary)
    method EncodeFile (line 1906) | protected function EncodeFile($path, $encoding = 'base64')
    method EncodeString (line 1951) | public function EncodeString($str, $encoding = 'base64')
    method EncodeHeader (line 1986) | public function EncodeHeader($str, $position = 'text')
    method HasMultiBytes (line 2048) | public function HasMultiBytes($str)
    method Base64EncodeWrapMB (line 2067) | public function Base64EncodeWrapMB($str, $lf=null)
    method EncodeQPphp (line 2113) | public function EncodeQPphp( $input = '', $line_max = 76, $space_conv ...
    method EncodeQP (line 2168) | public function EncodeQP($string, $line_max = 76, $space_conv = false)
    method EncodeQ (line 2201) | public function EncodeQ($str, $position = 'text')
    method AddStringAttachment (line 2245) | public function AddStringAttachment($string, $filename, $encoding = 'b...
    method AddEmbeddedImage (line 2273) | public function AddEmbeddedImage($path, $cid, $name = '', $encoding = ...
    method AddStringEmbeddedImage (line 2314) | public function AddStringEmbeddedImage($string, $cid, $name = '', $enc...
    method InlineImageExists (line 2334) | public function InlineImageExists()
    method AttachmentExists (line 2349) | public function AttachmentExists()
    method AlternativeExists (line 2364) | public function AlternativeExists()
    method ClearAddresses (line 2377) | public function ClearAddresses()
    method ClearCCs (line 2389) | public function ClearCCs()
    method ClearBCCs (line 2401) | public function ClearBCCs()
    method ClearReplyTos (line 2413) | public function ClearReplyTos()
    method ClearAllRecipients (line 2423) | public function ClearAllRecipients()
    method ClearAttachments (line 2436) | public function ClearAttachments()
    method ClearCustomHeaders (line 2445) | public function ClearCustomHeaders()
    method SetError (line 2460) | protected function SetError($msg)
    method RFCDate (line 2478) | public static function RFCDate()
    method ServerHostname (line 2494) | protected function ServerHostname()
    method Lang (line 2513) | protected function Lang($key)
    method IsError (line 2531) | public function IsError()
    method FixEOL (line 2542) | public function FixEOL($str)
    method AddCustomHeader (line 2562) | public function AddCustomHeader($name, $value=null)
    method MsgHTML (line 2579) | public function MsgHTML($message, $basedir = '')
    method _mime_types (line 2624) | public static function _mime_types($ext = '')
    method set (line 2732) | public function set($name, $value = '')
    method SecureHeader (line 2756) | public function SecureHeader($str)
    method Sign (line 2769) | public function Sign($cert_filename, $key_filename, $key_pass)
    method DKIM_QP (line 2783) | public function DKIM_QP($txt)
    method DKIM_Sign (line 2805) | public function DKIM_Sign($s)
    method DKIM_HeaderC (line 2827) | public function DKIM_HeaderC($s)
    method DKIM_BodyC (line 2849) | public function DKIM_BodyC($body)
    method DKIM_Add (line 2872) | public function DKIM_Add($headers_line, $subject, $body)
    method doCallback (line 2921) | protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body...
  class phpmailerException (line 2934) | class phpmailerException extends Exception
    method errorMessage (line 2940) | public function errorMessage()

FILE: plugins/box/backup/backup.admin.php
  class BackupAdmin (line 9) | class BackupAdmin extends Backend
    method main (line 14) | public static function main()

FILE: plugins/box/blocks/blocks.admin.php
  class BlocksAdmin (line 10) | class BlocksAdmin extends Backend
    method main (line 15) | public static function main()

FILE: plugins/box/blocks/blocks.plugin.php
  class Block (line 46) | class Block
    method _createInlineBlock (line 58) | public static function _createInlineBlock($attributes, $content)
    method _inlineBlock (line 70) | public static function _inlineBlock($attributes)
    method get (line 86) | public static function get($name)
    method _content (line 96) | public static function _content($attributes)

FILE: plugins/box/dashboard/dashboard.admin.php
  class DashboardAdmin (line 12) | class DashboardAdmin extends Backend
    method main (line 17) | public static function main()
  class Dashboard (line 82) | class Dashboard
    method addNewItem (line 96) | public static function addNewItem($id, $title, $url, $priority = 1)
    method drawItems (line 110) | public static function drawItems()

FILE: plugins/box/dashboard/js/ganalytics.js
  function glibOnloadHandle (line 3) | function glibOnloadHandle(){$.monstra.ganalytics.libOnloadHandle();}

FILE: plugins/box/editor/editor.plugin.php
  class Editor (line 30) | class Editor
    method render (line 37) | public static function render($val = null)

FILE: plugins/box/emails/emails.admin.php
  class EmailsAdmin (line 9) | class EmailsAdmin extends Backend
    method main (line 14) | public static function main()

FILE: plugins/box/filesmanager/filesmanager.admin.php
  class FilesmanagerAdmin (line 14) | class FilesmanagerAdmin extends Backend
    method main (line 19) | public static function main()
    method fdir (line 256) | protected static function fdir($dir, $type = null)
    method uploadSize (line 284) | public static function uploadSize()

FILE: plugins/box/information/information.admin.php
  class InformationAdmin (line 9) | class InformationAdmin extends Backend
    method main (line 14) | public static function main()

FILE: plugins/box/menu/menu.admin.php
  class MenuAdmin (line 9) | class MenuAdmin extends Backend
    method main (line 21) | public static function main()
    method getCategories (line 192) | public static function getCategories()
    method getPages (line 208) | protected static function getPages()
    method getComponents (line 260) | protected static function getComponents()

FILE: plugins/box/menu/menu.plugin.php
  class Menu (line 37) | class Menu
    method get (line 44) | public static function get($category = '')

FILE: plugins/box/pages/pages.admin.php
  class PagesAdmin (line 13) | class PagesAdmin extends Backend
    method _pageExpandAjax (line 25) | public static function _pageExpandAjax()
    method main (line 39) | public static function main()

FILE: plugins/box/pages/pages.plugin.php
  class Pages (line 37) | class Pages extends Frontend
    method main (line 63) | public static function main()
    method pageLoader (line 75) | public static function pageLoader($return_data = true)
    method lowLoader (line 90) | public static function lowLoader($data)
    method template (line 241) | public static function template()
    method content (line 251) | public static function content($slug = '')
    method title (line 284) | public static function title()
    method description (line 298) | public static function description()
    method keywords (line 312) | public static function keywords()
    method getPages (line 321) | public static function getPages()
  class Page (line 376) | class Page extends Pages
    method date (line 388) | public static function date($format = 'Y-m-d')
    method author (line 402) | public static function author()
    method children (line 417) | public static function children($parent)
    method available (line 430) | public static function available()
    method breadcrumbs (line 448) | public static function breadcrumbs()
    method url (line 481) | public static function url()
    method slug (line 494) | public static function slug()
    method robots (line 507) | public static function robots()
    method _date (line 520) | public static function _date($attributes)
    method _content (line 525) | public static function _content($attributes)

FILE: plugins/box/plugins/plugins.admin.php
  class PluginsAdmin (line 16) | class PluginsAdmin extends Backend
    method main (line 22) | public static function main()
    method _readmeLoadAjax (line 232) | public static function _readmeLoadAjax() {

FILE: plugins/box/sitemap/sitemap.plugin.php
  class Sitemap (line 33) | class Sitemap extends Frontend
    method title (line 47) | public static function title()
    method template (line 55) | public static function template()
    method content (line 63) | public static function content()
    method create (line 75) | public static function create()
    method getComponents (line 108) | protected static function getComponents()

FILE: plugins/box/snippets/snippets.admin.php
  class SnippetsAdmin (line 10) | class SnippetsAdmin extends Backend
    method main (line 15) | public static function main()

FILE: plugins/box/snippets/snippets.plugin.php
  class Snippet (line 40) | class Snippet
    method get (line 54) | public static function get($name, $vars = array())
    method _content (line 72) | public static function _content($attributes)

FILE: plugins/box/system/system.admin.php
  function checkMonstraVersion (line 11) | function checkMonstraVersion()
  class SystemAdmin (line 31) | class SystemAdmin extends Backend
    method main (line 36) | public static function main()

FILE: plugins/box/themes/themes.admin.php
  class ThemesAdmin (line 9) | class ThemesAdmin extends Backend
    method main (line 14) | public static function main()

FILE: plugins/box/themes/themes.plugin.php
  class Themes (line 34) | class Themes
    method getAdminThemes (line 39) | public static function getAdminThemes()
    method getSiteThemes (line 56) | public static function getSiteThemes()
    method getTemplates (line 76) | public static function getTemplates($theme = null)
    method getChunks (line 96) | public static function getChunks($theme = null)
    method getStyles (line 116) | public static function getStyles($theme = null)
    method getScripts (line 136) | public static function getScripts($theme = null)
  class Chunk (line 155) | class Chunk
    method get (line 163) | public static function get($name, $vars = array(), $theme = null)

FILE: plugins/box/users/users.admin.php
  class UsersAdmin (line 9) | class UsersAdmin extends Backend
    method main (line 14) | public static function main()

FILE: plugins/box/users/users.plugin.php
  class Users (line 37) | class Users extends Frontend
    method main (line 47) | public static function main()
    method route (line 60) | protected static function route()
    method getList (line 81) | public static function getList()
    method getProfile (line 91) | public static function getProfile($id)
    method getRegistration (line 101) | public static function getRegistration()
    method getPanel (line 190) | public static function getPanel()
    method isLoged (line 198) | public static function isLoged()
    method logout (line 210) | public static function logout()
    method getProfileEdit (line 219) | public static function getProfileEdit($id)
    method getPasswordReset (line 273) | public static function getPasswordReset()
    method getLogin (line 388) | public static function getLogin()
    method title (line 461) | public static function title()
    method content (line 476) | public static function content()
    method template (line 492) | public static function template()
    method getGravatarURL (line 507) | public static function getGravatarURL($email, $size)

FILE: plugins/captcha/captcha.plugin.php
  class CryptCaptcha (line 31) | class CryptCaptcha
    method draw (line 36) | public static function draw()
    method check (line 44) | public static function check($answer)

FILE: plugins/captcha/crypt/cryptographp.fct.php
  function dsp_crypt (line 10) | function dsp_crypt($cfg = 0, $reload = 1)
  function chk_crypt (line 20) | function chk_crypt($code)

FILE: plugins/captcha/crypt/cryptographp.inc.php
  function ecriture (line 127) | function ecriture()
  function noisecolor (line 161) | function noisecolor()
  function bruit (line 180) | function bruit()

FILE: plugins/markitup/markitup.plugin.php
  class MarkItUp (line 28) | class MarkItUp
    method headers (line 33) | public static function headers()

FILE: plugins/markitup/markitup/jquery.markitup.js
  function localize (line 126) | function localize(data, inText) {
  function init (line 134) | function init() {
  function dropMenus (line 200) | function dropMenus(markupSet) {
  function magicMarkups (line 247) | function magicMarkups(string) {
  function prepare (line 280) | function prepare(action) {
  function build (line 288) | function build(string) {
  function markup (line 336) | function markup(button) {
  function fixOperaBug (line 427) | function fixOperaBug(string) {
  function fixIeBug (line 434) | function fixIeBug(string) {
  function insert (line 442) | function insert(block) {
  function set (line 452) | function set(start, len) {
  function get (line 471) | function get() {
  function preview (line 497) | function preview() {
  function refreshPreview (line 534) | function refreshPreview() {
  function renderPreview (line 538) | function renderPreview() {
  function writeInPreview (line 571) | function writeInPreview(data) {
  function keyPressed (line 588) | function keyPressed(e) {
  function remove (line 636) | function remove() {

FILE: plugins/sandbox/sandbox.admin.php
  class SandboxAdmin (line 13) | class SandboxAdmin extends Backend
    method main (line 18) | public static function main()
    method formComponentSave (line 60) | public static function formComponentSave()
    method formComponent (line 73) | public static function formComponent()

FILE: plugins/sandbox/sandbox.plugin.php
  class Sandbox (line 33) | class Sandbox extends Frontend
    method main (line 38) | public static function main()
    method title (line 46) | public static function title()
    method keywords (line 54) | public static function keywords()
    method description (line 62) | public static function description()
    method content (line 70) | public static function content()
    method template (line 78) | public static function template()
Condensed preview — 540 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,682K chars).
[
  {
    "path": ".gitignore",
    "chars": 518,
    "preview": "# ignore os/app generated files\nThumbs.db\n.DS_Store\n*.esproj\n*.project\n*.sublime-project\n*.sublime-workspace\n\n# ignore u"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 15734,
    "preview": "Monstra 3.0.4, 2016-04-05\n------------------------\n- Fixed User Security by adding a check that compares POST id with SE"
  },
  {
    "path": "LICENSE.md",
    "chars": 1100,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2012 - 2016 Monstra Content Management\n\nPermission is hereby granted, free of charg"
  },
  {
    "path": "README.md",
    "chars": 2010,
    "preview": "# THIS PROJECT IS NOT SUPPORTED ANYMORE!<br>Check FLEXTYPE.ORG\n\n## Monstra\nMonstra is a modern and lightweight Content M"
  },
  {
    "path": "admin/index.php",
    "chars": 6619,
    "preview": "<?php\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Romanenko Sergey / Awilum <awilum@msn.com>\n * @link http://monst"
  },
  {
    "path": "admin/themes/default/css/default.css",
    "chars": 11128,
    "preview": "/************************************\n  Monstra\n  default.css\n*************************************\n  CONTENTS\n    1. GE"
  },
  {
    "path": "admin/themes/default/index.template.php",
    "chars": 9097,
    "preview": "<?php if ( ! defined('MONSTRA_ACCESS')) exit('No direct script access allowed'); ?><!DOCTYPE html>\n<html lang=\"en\">\n<hea"
  },
  {
    "path": "admin/themes/default/js/default.js",
    "chars": 681,
    "preview": "/**\n * Monstra JS module\n *\n * This source file is part of the Monstra Engine. More information,\n * documentation and tu"
  },
  {
    "path": "admin/themes/default/login.template.php",
    "chars": 7118,
    "preview": "<?php  if ( ! defined('MONSTRA_ACCESS')) exit('No direct script access allowed'); ?><!DOCTYPE html>\n<html lang=\"en\">\n   "
  },
  {
    "path": "boot/defines.php",
    "chars": 1871,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra Defines\n */\n\n/**\n * The filesystem p"
  },
  {
    "path": "engine/Alert.php",
    "chars": 2454,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/Monstra.php",
    "chars": 10317,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/Option.php",
    "chars": 4413,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/Plugin/Action.php",
    "chars": 3367,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/Plugin/Backend.php",
    "chars": 388,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/Plugin/Filter.php",
    "chars": 3770,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/Plugin/Frontend.php",
    "chars": 739,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/Plugin/I18n.php",
    "chars": 5488,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/Plugin/Javascript.php",
    "chars": 5047,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/Plugin/Navigation.php",
    "chars": 7006,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/Plugin/Plugin.php",
    "chars": 5226,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/Plugin/Stylesheet.php",
    "chars": 5837,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/Plugin/View.php",
    "chars": 5609,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/Security.php",
    "chars": 6546,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/Shortcode.php",
    "chars": 4498,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/Site.php",
    "chars": 5569,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/Uri.php",
    "chars": 3797,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/Xmldb/DB.php",
    "chars": 2096,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/Xmldb/Table.php",
    "chars": 23607,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/Xmldb/XML.php",
    "chars": 2285,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Ro"
  },
  {
    "path": "engine/_init.php",
    "chars": 838,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n *  Monstra requires PHP 5.3.2 or greater\n */\ni"
  },
  {
    "path": "engine/boot/actions.php",
    "chars": 271,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Set meta generator\n */\nAction::add('theme_me"
  },
  {
    "path": "engine/boot/defines.php",
    "chars": 1871,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Monstra Defines\n */\n\n/**\n * The filesystem p"
  },
  {
    "path": "engine/boot/filters.php",
    "chars": 510,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Evaluate a string as PHP code\n */\nif (MONSTR"
  },
  {
    "path": "engine/boot/shortcodes.php",
    "chars": 216,
    "preview": "<?php defined('MONSTRA_ACCESS') or die('No direct script access.');\n\n/**\n * Add new shortcode {siteurl}\n */\nShortcode::a"
  },
  {
    "path": "index.php",
    "chars": 1861,
    "preview": "<?php\n\n/**\n * Monstra\n *\n * @package Monstra\n * @author Romanenko Sergey / Awilum <awilum@msn.com>\n * @link http://monst"
  },
  {
    "path": "install.php",
    "chars": 28808,
    "preview": "<?php\n\n    /**\n     * Monstra :: Installator\n     */\n\n    // Main engine defines\n    if (! defined('DS')) {\n        defi"
  },
  {
    "path": "libraries/Gelato/Agent/Agent.php",
    "chars": 3630,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Arr/Arr.php",
    "chars": 4719,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Cache/Cache.php",
    "chars": 5416,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/ClassLoader/ClassLoader.php",
    "chars": 5879,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Cookie/Cookie.php",
    "chars": 3291,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Curl/Curl.php",
    "chars": 4228,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Date/Date.php",
    "chars": 14346,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Debug/Debug.php",
    "chars": 2750,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/ErrorHandler/ErrorHandler.php",
    "chars": 9415,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/ErrorHandler/Resources/Views/Errors/exception.php",
    "chars": 8877,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>Error</title>\n<style type=\"text/css\">\nbody {\n    b"
  },
  {
    "path": "libraries/Gelato/ErrorHandler/Resources/Views/Errors/production.php",
    "chars": 843,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>Error</title>\n<style type=\"text/css\">\nbody {\n    h"
  },
  {
    "path": "libraries/Gelato/FileSystem/Dir.php",
    "chars": 5288,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/FileSystem/File.php",
    "chars": 16907,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Form/Form.php",
    "chars": 11110,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Gelato.php",
    "chars": 3194,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Html/Html.php",
    "chars": 10251,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Http/Request.php",
    "chars": 3284,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Http/Response.php",
    "chars": 4043,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Image/Image.php",
    "chars": 18737,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Inflector/Inflector.php",
    "chars": 6990,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Log/Log.php",
    "chars": 1524,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Minify/MinifyCSS.php",
    "chars": 7482,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Minify/MinifyHTML.php",
    "chars": 1174,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Minify/MinifyJS.php",
    "chars": 1386,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Notification/Notification.php",
    "chars": 3520,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Number/Number.php",
    "chars": 5965,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/README.md",
    "chars": 240,
    "preview": "# Gelato Library\n\nGelato is a PHP5 library for kickass Web Applications.\n\n## Links\n- [Site](http://gelato.monstra.org)\n-"
  },
  {
    "path": "libraries/Gelato/Registry/Registry.php",
    "chars": 2178,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Security/Token.php",
    "chars": 2258,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Session/Session.php",
    "chars": 4031,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Text/Text.php",
    "chars": 12104,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Url/Url.php",
    "chars": 2896,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Validation/Valid.php",
    "chars": 5055,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/Zip/Zip.php",
    "chars": 24471,
    "preview": "<?php\n\n/**\n * Gelato Library\n *\n * This source file is part of the Gelato Library. More information,\n * documentation an"
  },
  {
    "path": "libraries/Gelato/_logs/.empty",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "libraries/Gelato/changelog.txt",
    "chars": 576,
    "preview": "Gelato 1.0.3, 2013-04-03\n------------------------\n- Html Class: obfuscate() method added.\n- Html Class: email() method a"
  },
  {
    "path": "libraries/Gelato/license.txt",
    "chars": 34436,
    "preview": "GNU GENERAL PUBLIC LICENSE\nVersion 3, 29 June 2007\n\nCopyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n"
  },
  {
    "path": "libraries/Idiorm/ORM.php",
    "chars": 79052,
    "preview": "<?php\n\n    /**\n     *\n     * Idiorm\n     *\n     * http://github.com/j4mie/idiorm/\n     *\n     * A single-class super-sim"
  },
  {
    "path": "libraries/PHPMailer/PHPMailer.php",
    "chars": 91107,
    "preview": "<?php\n/*~ class.phpmailer.php\n.---------------------------------------------------------------------------.\n|  Software:"
  },
  {
    "path": "plugins/box/backup/backup.admin.php",
    "chars": 3955,
    "preview": "<?php\n\n// Add plugin navigation link\nNavigation::add(__('Backups', 'backup'), 'system', 'backup', 3);\n\n/**\n * Backup Adm"
  },
  {
    "path": "plugins/box/backup/backup.plugin.php",
    "chars": 619,
    "preview": "<?php\n\n/**\n *\tBackup plugin\n *\n *\t@package Monstra\n *  @subpackage Plugins\n *\t@author Romanenko Sergey / Awilum\n *\t@copy"
  },
  {
    "path": "plugins/box/backup/install/backup.manifest.xml",
    "chars": 458,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<root>\n    <plugin_location>plugins/box/backup/backup.plugin.php</plugin_location"
  },
  {
    "path": "plugins/box/backup/languages/cs.lang.php",
    "chars": 530,
    "preview": "<?php\n\n    return array(\n        'backup' => array(\n            'Backups' => 'Zálohy',\n            'Backup' => 'Zálohy',"
  },
  {
    "path": "plugins/box/backup/languages/de.lang.php",
    "chars": 515,
    "preview": "<?php\n\n    return array(\n        'backup' => array(\n            'Backups' => 'Backups',\n            'Backup' => 'Backup'"
  },
  {
    "path": "plugins/box/backup/languages/en.lang.php",
    "chars": 970,
    "preview": "<?php\n\n    return array(\n        'backup' => array(\n    \t\t'Backups' => 'Backups',\n    \t\t'Backup' => 'Backup',\n          "
  },
  {
    "path": "plugins/box/backup/languages/es.lang.php",
    "chars": 1046,
    "preview": "<?php\n\n    return array(\n            'backup' => array(\n    \t       'Backups' => 'Backups',\n\t       'Backup' => 'Backup'"
  },
  {
    "path": "plugins/box/backup/languages/fa.lang.php",
    "chars": 507,
    "preview": "<?php\n\n    return array(\n        'backup' => array(\n    \t\t'Backups' => 'پشتیبان گیری',\n            'Backup Date' => 'تار"
  },
  {
    "path": "plugins/box/backup/languages/fr.lang.php",
    "chars": 549,
    "preview": "<?php\n\n    return array(\n        'backup' => array(\n            'Backups' => 'Sauvegardes',\n            'Backup date' =>"
  },
  {
    "path": "plugins/box/backup/languages/hu.lang.php",
    "chars": 546,
    "preview": "<?php\n\n    return array(\n        'backup' => array(\n    \t\t'Backups' => 'Biztonsági mentések',\n            'Backup date' "
  },
  {
    "path": "plugins/box/backup/languages/id.lang.php",
    "chars": 550,
    "preview": "<?php\n\n    return array(\n        'backup' => array(\n                    'Backups' => 'Cadangan',\n            'Backup dat"
  },
  {
    "path": "plugins/box/backup/languages/it.lang.php",
    "chars": 506,
    "preview": "<?php\n\n    return array(\n        'backup' => array(\n            'Backups' => 'Backup',\n            'Backup' => 'Backup',"
  },
  {
    "path": "plugins/box/backup/languages/ja.lang.php",
    "chars": 459,
    "preview": "<?php\n\n    return array(\n        'backup' => array(\n    \t\t'Backups' => 'バックアップ',\n            'Backup Date' => 'バックアップ日',"
  },
  {
    "path": "plugins/box/backup/languages/lt.lang.php",
    "chars": 540,
    "preview": "<?php\n\n    return array(\n        'backup' => array(\n            'Backups' => 'Atsarginės kopijos',\n            'Backup' "
  },
  {
    "path": "plugins/box/backup/languages/nl.lang.php",
    "chars": 523,
    "preview": "<?php\n\n    return array(\n        'backup' => array(\n            'Backups' => 'Backups',\n            'Backup' => 'Backup'"
  },
  {
    "path": "plugins/box/backup/languages/pl.lang.php",
    "chars": 558,
    "preview": "<?php\n\n    return array(\n        'backup' => array(\n        \t'Backups' => 'Kopie zapasowe',\n            'Backup Date' =>"
  },
  {
    "path": "plugins/box/backup/languages/pt-br.lang.php",
    "chars": 513,
    "preview": "<?php\n\n    return array(\n        'backup' => array(\n            'Backups' => 'Backups',\n            'Backup' => 'Backup'"
  },
  {
    "path": "plugins/box/backup/languages/ru.lang.php",
    "chars": 755,
    "preview": "<?php\n\n    return array(\n        'backup' => array(\n            'Backups' => 'Бекапы',\n            'Backup' => 'Бекап',\n"
  },
  {
    "path": "plugins/box/backup/languages/sk.lang.php",
    "chars": 531,
    "preview": "<?php\n\n    return array(\n        'backup' => array(\n            'Backups' => 'Zálohy',\n            'Backup' => 'Zálohy',"
  },
  {
    "path": "plugins/box/backup/languages/sr.lang.php",
    "chars": 513,
    "preview": "<?php\n\n    return array(\n        'backup' => array(\n            'Backups' => 'Bekapovi',\n            'Backup' => 'Backap"
  },
  {
    "path": "plugins/box/backup/languages/tr.lang.php",
    "chars": 995,
    "preview": "<?php\n\n    return array(\n        'backup' => array(\n    \t\t'Backups' => 'Yedekler',\n    \t\t'Backup' => 'Yedek',\n          "
  },
  {
    "path": "plugins/box/backup/languages/uk.lang.php",
    "chars": 755,
    "preview": "<?php\n\n    return array(\n        'backup' => array(\n            'Backups' => 'Бекапи',\n            'Backup' => 'Бекап',\n"
  },
  {
    "path": "plugins/box/backup/languages/zh-cn.lang.php",
    "chars": 432,
    "preview": "<?php\n\n    return array(\n        'backup' => array(\n    \t\t'Backups' => '备份',\n            'Backup Date' => '备份日期',\n    \t\t"
  },
  {
    "path": "plugins/box/backup/views/backend/index.view.php",
    "chars": 2361,
    "preview": "<script>$().ready(function(){$('[name=create_backup]').click(function(){$(this).button('loading');});});</script>\n\n<div "
  },
  {
    "path": "plugins/box/blocks/blocks.admin.php",
    "chars": 7291,
    "preview": "<?php\n\n// Add plugin navigation link\nNavigation::add(__('Blocks', 'blocks'), 'content', 'blocks', 2);\nDashboard::addNewI"
  },
  {
    "path": "plugins/box/blocks/blocks.plugin.php",
    "chars": 2992,
    "preview": "<?php\n\n/**\n *\tBlocks plugin\n *\n *\t@package Monstra\n *  @subpackage Plugins\n *\t@author Romanenko Sergey / Awilum\n *\t@copy"
  },
  {
    "path": "plugins/box/blocks/install/blocks.manifest.xml",
    "chars": 466,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<root>\n    <plugin_location>plugins/box/blocks/blocks.plugin.php</plugin_location"
  },
  {
    "path": "plugins/box/blocks/js/.htaccess",
    "chars": 31,
    "preview": "Options -Indexes\nAllow from all"
  },
  {
    "path": "plugins/box/blocks/js/blocks.js",
    "chars": 379,
    "preview": "if (typeof $.monstra == 'undefined') $.monstra = {};\n\n$.monstra.blocks = {\n\n    init: function() { },\n\n    showEmbedCode"
  },
  {
    "path": "plugins/box/blocks/languages/cs.lang.php",
    "chars": 1281,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'Bloky',\n            'Blocks manager' => 'Sp"
  },
  {
    "path": "plugins/box/blocks/languages/de.lang.php",
    "chars": 1339,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'Blöcke',\n            'Blocks manager' => 'B"
  },
  {
    "path": "plugins/box/blocks/languages/en.lang.php",
    "chars": 1275,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'Blocks',\n            'Blocks manager' => 'B"
  },
  {
    "path": "plugins/box/blocks/languages/es.lang.php",
    "chars": 1335,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'Bloques',\n            'Blocks manager' => '"
  },
  {
    "path": "plugins/box/blocks/languages/fa.lang.php",
    "chars": 1249,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'بلوک',\n            'Blocks manager' => 'مدی"
  },
  {
    "path": "plugins/box/blocks/languages/fr.lang.php",
    "chars": 1354,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'Blocs',\n            'Blocks manager' => 'Ge"
  },
  {
    "path": "plugins/box/blocks/languages/hu.lang.php",
    "chars": 1296,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'Blokkok',\n            'Blocks manager' => '"
  },
  {
    "path": "plugins/box/blocks/languages/id.lang.php",
    "chars": 1237,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'Block',\n            'Blocks manager' => 'Pe"
  },
  {
    "path": "plugins/box/blocks/languages/it.lang.php",
    "chars": 1317,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'Blocchi',\n            'Blocks manager' => '"
  },
  {
    "path": "plugins/box/blocks/languages/ja.lang.php",
    "chars": 1116,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'ブロック',\n            'Blocks manager' => 'ブロッ"
  },
  {
    "path": "plugins/box/blocks/languages/ka-ge.lang.php",
    "chars": 1328,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'ბლოკები',\n            'Blocks manager' => '"
  },
  {
    "path": "plugins/box/blocks/languages/lt.lang.php",
    "chars": 1286,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'Blokai',\n            'Blocks manager' => 'B"
  },
  {
    "path": "plugins/box/blocks/languages/nl.lang.php",
    "chars": 1285,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'Blokken',\n            'Blocks manager' => '"
  },
  {
    "path": "plugins/box/blocks/languages/pl.lang.php",
    "chars": 1317,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'Bloki',\n            'Blocks manager' => 'Za"
  },
  {
    "path": "plugins/box/blocks/languages/pt-br.lang.php",
    "chars": 1281,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'Blocos',\n            'Blocks manager' => 'G"
  },
  {
    "path": "plugins/box/blocks/languages/ru.lang.php",
    "chars": 1315,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'Блоки',\n            'Blocks manager' => 'Ме"
  },
  {
    "path": "plugins/box/blocks/languages/sk.lang.php",
    "chars": 1281,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'Bloky',\n            'Blocks manager' => 'Ma"
  },
  {
    "path": "plugins/box/blocks/languages/sr.lang.php",
    "chars": 1294,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'Blokovi',\n            'Blocks manager' => '"
  },
  {
    "path": "plugins/box/blocks/languages/tr.lang.php",
    "chars": 1283,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'Bloklar',\n            'Blocks manager' => '"
  },
  {
    "path": "plugins/box/blocks/languages/uk.lang.php",
    "chars": 1294,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => 'Блоки',\n            'Blocks manager' => 'Ме"
  },
  {
    "path": "plugins/box/blocks/languages/zh-cn.lang.php",
    "chars": 1047,
    "preview": "<?php\n\n    return array(\n        'blocks' => array(\n            'Blocks' => '版块',\n            'Blocks manager' => '版块管理'"
  },
  {
    "path": "plugins/box/blocks/views/backend/add.view.php",
    "chars": 1453,
    "preview": "<h2 class=\"margin-bottom-1\"><?php echo __('New Block', 'blocks'); ?></h2>\n\n<?php if (isset($errors['blocks_empty_name'])"
  },
  {
    "path": "plugins/box/blocks/views/backend/edit.view.php",
    "chars": 1765,
    "preview": "<h2 class=\"margin-bottom-1\"><?php echo __('Edit Block', 'blocks'); ?></h2>\n\n<?php\n    if ($content !== null) {\n\n        "
  },
  {
    "path": "plugins/box/blocks/views/backend/index.view.php",
    "chars": 2939,
    "preview": "<div class=\"vertical-align margin-bottom-1\">\n    <div class=\"text-left row-phone\">\n        <h2><?php echo __('Blocks', '"
  },
  {
    "path": "plugins/box/dashboard/dashboard.admin.php",
    "chars": 3161,
    "preview": "<?php\n\n// Add Plugin Javascript\nStylesheet::add('public/assets/css/daterangepicker-bs3.css', 'backend', 11);\nJavascript:"
  },
  {
    "path": "plugins/box/dashboard/dashboard.plugin.php",
    "chars": 678,
    "preview": "<?php\n\n/**\n *  Dashboard plugin\n *\n *  @package Monstra\n *  @subpackage Plugins\n *  @author Romanenko Sergey / Awilum\n *"
  },
  {
    "path": "plugins/box/dashboard/install/dashboard.manifest.xml",
    "chars": 478,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<root>\n    <plugin_location>plugins/dashboard/dashboard.plugin.php</plugin_locati"
  },
  {
    "path": "plugins/box/dashboard/js/.htaccess",
    "chars": 31,
    "preview": "Options -Indexes\nAllow from all"
  },
  {
    "path": "plugins/box/dashboard/js/ganalytics.js",
    "chars": 6497,
    "preview": "if (typeof $.monstra == 'undefined') $.monstra = {};\n\nfunction glibOnloadHandle(){$.monstra.ganalytics.libOnloadHandle()"
  },
  {
    "path": "plugins/box/dashboard/languages/cs.lang.php",
    "chars": 327,
    "preview": "<?php\n\n    return array(\n        'dashboard' => array(\n            'Dashboard' => 'Dashboard',\n            'Dashboard pl"
  },
  {
    "path": "plugins/box/dashboard/languages/de.lang.php",
    "chars": 334,
    "preview": "<?php\n\n    return array(\n        'dashboard' => array(\n            'Dashboard' => 'Dashboard',\n            'Dashboard pl"
  },
  {
    "path": "plugins/box/dashboard/languages/en.lang.php",
    "chars": 322,
    "preview": "<?php\n\n    return array(\n        'dashboard' => array(\n            'Dashboard' => 'Dashboard',\n            'Dashboard pl"
  },
  {
    "path": "plugins/box/dashboard/languages/es.lang.php",
    "chars": 335,
    "preview": "<?php\n\n    return array(\n        'dashboard' => array(\n            'Dashboard' => 'Escritorio',\n            'Dashboard p"
  },
  {
    "path": "plugins/box/dashboard/languages/ka-ge.lang.php",
    "chars": 312,
    "preview": "<?php\n\n    return array(\n        'dashboard' => array(\n            'Dashboard' => 'პანელი',\n            'Dashboard plugi"
  },
  {
    "path": "plugins/box/dashboard/languages/pl.lang.php",
    "chars": 331,
    "preview": "<?php\n\n    return array(\n        'dashboard' => array(\n            'Dashboard' => 'Kokpit',\n            'Dashboard plugi"
  },
  {
    "path": "plugins/box/dashboard/languages/ru.lang.php",
    "chars": 314,
    "preview": "<?php\n\n    return array(\n        'dashboard' => array(\n            'Dashboard' => 'Панель',\n            'Dashboard plugi"
  },
  {
    "path": "plugins/box/dashboard/languages/sr.lang.php",
    "chars": 339,
    "preview": "<?php\n    return array(\n        'dashboard' => array(\n            'Dashboard' => 'Komandna tabla',\n            'Dashboar"
  },
  {
    "path": "plugins/box/dashboard/languages/tr.lang.php",
    "chars": 313,
    "preview": "<?php\n\n    return array(\n        'dashboard' => array(\n            'Dashboard' => 'Pano',\n            'Dashboard plugin "
  },
  {
    "path": "plugins/box/dashboard/languages/uk.lang.php",
    "chars": 313,
    "preview": "<?php\n\n    return array(\n        'dashboard' => array(\n            'Dashboard' => 'Панель',\n            'Dashboard plugi"
  },
  {
    "path": "plugins/box/dashboard/views/backend/ga.view.php",
    "chars": 4045,
    "preview": "\n<script type=\"text/javascript\" src=\"https://www.google.com/jsapi\"></script>\n<script type=\"text/javascript\">\n    google."
  },
  {
    "path": "plugins/box/dashboard/views/backend/index.view.php",
    "chars": 2038,
    "preview": "<div class=\"well dashboard-well\">\n\t<div class=\"row\">\n\t\t<div class=\"col-xs-6\">\n\t\t\t<a class=\"btn btn-link welcome-back\"><?"
  },
  {
    "path": "plugins/box/editor/editor.plugin.php",
    "chars": 871,
    "preview": "<?php\n\n/**\n *  Editor plugin\n *\n *\t@package Monstra\n *  @subpackage Plugins\n *\t@author Romanenko Sergey / Awilum\n *\t@cop"
  },
  {
    "path": "plugins/box/editor/install/editor.manifest.xml",
    "chars": 458,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<root>\n    <plugin_location>plugins/box/editor/editor.plugin.php</plugin_location"
  },
  {
    "path": "plugins/box/editor/languages/cs.lang.php",
    "chars": 151,
    "preview": "<?php\n\n    return array(\n        'Editor' => array(\n            'Editor' => 'Editor',\n            'Editor plugin' => 'Ed"
  },
  {
    "path": "plugins/box/editor/languages/de.lang.php",
    "chars": 151,
    "preview": "<?php\n\n    return array(\n        'Editor' => array(\n            'Editor' => 'Editor',\n            'Editor plugin' => 'Ed"
  },
  {
    "path": "plugins/box/editor/languages/en.lang.php",
    "chars": 151,
    "preview": "<?php\n\n    return array(\n        'Editor' => array(\n            'Editor' => 'Editor',\n            'Editor plugin' => 'Ed"
  },
  {
    "path": "plugins/box/editor/languages/es.lang.php",
    "chars": 151,
    "preview": "<?php\n\n    return array(\n        'Editor' => array(\n            'Editor' => 'Editor',\n            'Editor plugin' => 'Ed"
  },
  {
    "path": "plugins/box/editor/languages/fa.lang.php",
    "chars": 157,
    "preview": "<?php\n\n    return array(\n        'Editor' => array(\n            'Editor' => 'ویرایشگر',\n            'Editor plugin' => '"
  },
  {
    "path": "plugins/box/editor/languages/fr.lang.php",
    "chars": 154,
    "preview": "<?php\n\n    return array(\n        'Editor' => array(\n            'Editor' => 'Editeur',\n            'Editor plugin' => 'P"
  },
  {
    "path": "plugins/box/editor/languages/hu.lang.php",
    "chars": 162,
    "preview": "<?php\n\n    return array(\n        'Editor' => array(\n            'Editor' => 'Szerkesztő',\n            'Editor plugin' =>"
  },
  {
    "path": "plugins/box/editor/languages/it.lang.php",
    "chars": 151,
    "preview": "<?php\n\n    return array(\n        'Editor' => array(\n            'Editor' => 'Editor',\n            'Editor plugin' => 'Ed"
  },
  {
    "path": "plugins/box/editor/languages/ja.lang.php",
    "chars": 143,
    "preview": "<?php\n\n    return array(\n        'Editor' => array(\n            'Editor' => 'GfB^',\n            'Editor plugin' => 'GfB^"
  },
  {
    "path": "plugins/box/editor/languages/ka-ge.lang.php",
    "chars": 157,
    "preview": "<?php\n    return array(\n        'Editor' => array(\n            'Editor' => 'რედაქტორი',\n            'Editor plugin' => '"
  },
  {
    "path": "plugins/box/editor/languages/lt.lang.php",
    "chars": 166,
    "preview": "<?php\n\n    return array(\n        'Editor' => array(\n            'Editor' => 'Redaktorius',\n            'Editor plugin' ="
  },
  {
    "path": "plugins/box/editor/languages/nl.lang.php",
    "chars": 151,
    "preview": "<?php\n\n    return array(\n        'Editor' => array(\n            'Editor' => 'Editor',\n            'Editor plugin' => 'Ed"
  },
  {
    "path": "plugins/box/editor/languages/pl.lang.php",
    "chars": 153,
    "preview": "<?php\n\n    return array(\n        'Editor' => array(\n            'Editor' => 'Edytor',\n            'Editor plugin' => 'Wt"
  },
  {
    "path": "plugins/box/editor/languages/pt-br.lang.php",
    "chars": 154,
    "preview": "<?php\n\n    return array(\n        'Editor' => array(\n            'Editor' => 'Editor',\n            'Editor plugin' => 'Pl"
  },
  {
    "path": "plugins/box/editor/languages/ru.lang.php",
    "chars": 155,
    "preview": "<?php\n\n    return array(\n        'Editor' => array(\n            'Editor' => 'Редактор',\n            'Editor plugin' => '"
  },
  {
    "path": "plugins/box/editor/languages/sk.lang.php",
    "chars": 151,
    "preview": "<?php\n\n    return array(\n        'Editor' => array(\n            'Editor' => 'Editor',\n            'Editor plugin' => 'Ed"
  },
  {
    "path": "plugins/box/editor/languages/sr.lang.php",
    "chars": 155,
    "preview": "\n<?php\n\n    return array(\n        'Editor' => array(\n            'Editor' => 'Editor',\n            'Editor plugin' => 'E"
  },
  {
    "path": "plugins/box/editor/languages/tr.lang.php",
    "chars": 164,
    "preview": "<?php\n\n    return array(\n        'Editor' => array(\n            'Editor' => 'Düzenleyici',\n            'Editor plugin' ="
  },
  {
    "path": "plugins/box/editor/languages/uk.lang.php",
    "chars": 156,
    "preview": "<?php\n\n    return array(\n        'Editor' => array(\n            'Editor' => 'Редактор',\n            'Editor plugin' => '"
  },
  {
    "path": "plugins/box/editor/languages/zh-cn.lang.php",
    "chars": 140,
    "preview": "<?php\n\n    return array(\n        'Editor' => array(\n            'Editor' => '编辑器',\n            'Editor plugin' => '编辑器插件"
  },
  {
    "path": "plugins/box/emails/css/.htaccess",
    "chars": 31,
    "preview": "Options -Indexes\nAllow from all"
  },
  {
    "path": "plugins/box/emails/css/inc.css",
    "chars": 13346,
    "preview": "/**********************************************\n* Ink v1.0.5 - Copyright 2013 ZURB Inc        *\n************************"
  },
  {
    "path": "plugins/box/emails/emails.admin.php",
    "chars": 2516,
    "preview": "<?php\n\n// Admin Navigation: add new item\nNavigation::add(__('Emails', 'emails'), 'system', 'emails', 5);\n\n/**\n * Emails "
  },
  {
    "path": "plugins/box/emails/emails.plugin.php",
    "chars": 658,
    "preview": "<?php\n\n/**\n *  Emails plugin\n *\n *  @package Monstra\n *  @subpackage Plugins\n *  @author Romanenko Sergey / Awilum\n *  @"
  },
  {
    "path": "plugins/box/emails/install/emails.manifest.xml",
    "chars": 470,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<root>\n    <plugin_location>plugins/box/emails/emails.plugin.php</plugin_location"
  },
  {
    "path": "plugins/box/emails/languages/cs.lang.php",
    "chars": 794,
    "preview": "<?php\n\n    return array(\n        'emails' => array(\n            'Emails' => 'Emaily',\n            'Emails plugin for Mon"
  },
  {
    "path": "plugins/box/emails/languages/de.lang.php",
    "chars": 843,
    "preview": "<?php\n\n    return array(\n        'emails' => array(\n            'Emails' => 'Emails',\n            'Emails plugin for Mon"
  },
  {
    "path": "plugins/box/emails/languages/en.lang.php",
    "chars": 809,
    "preview": "<?php\n\n    return array(\n        'emails' => array(\n            'Emails' => 'Emails',\n            'Emails plugin for Mon"
  },
  {
    "path": "plugins/box/emails/languages/es.lang.php",
    "chars": 848,
    "preview": "<?php\n\n    return array(\n        'emails' => array(\n            'Emails' => 'Emails',\n            'Emails plugin for Mon"
  },
  {
    "path": "plugins/box/emails/languages/ka-ge.lang.php",
    "chars": 864,
    "preview": "<?php\n    return array(\n        'emails' => array(\n            'Emails' => 'ელ-ფოსტები',\n            'Emails plugin for "
  },
  {
    "path": "plugins/box/emails/languages/pl.lang.php",
    "chars": 840,
    "preview": "<?php\n\n    return array(\n        'emails' => array(\n            'Emails' => 'Wiadomości e-mail',\n            'Emails plu"
  },
  {
    "path": "plugins/box/emails/languages/ru.lang.php",
    "chars": 838,
    "preview": "<?php\n\n    return array(\n        'emails' => array(\n            'Emails' => 'Письма',\n            'Emails plugin for Mon"
  },
  {
    "path": "plugins/box/emails/languages/sr.lang.php",
    "chars": 795,
    "preview": "<?php\n    return array(\n        'emails' => array(\n            'Emails' => 'Email',\n            'Emails plugin for Monst"
  },
  {
    "path": "plugins/box/emails/languages/tr.lang.php",
    "chars": 833,
    "preview": "<?php\n\n    return array(\n        'emails' => array(\n            'Emails' => 'E-postalar',\n            'Emails plugin for"
  },
  {
    "path": "plugins/box/emails/languages/uk.lang.php",
    "chars": 816,
    "preview": "<?php\n\n    return array(\n        'emails' => array(\n            'Emails' => 'Листи',\n            'Emails plugin for Mons"
  },
  {
    "path": "plugins/box/emails/views/backend/edit.view.php",
    "chars": 1413,
    "preview": "<h2 class=\"margin-bottom-1\"><?php echo __('Edit Email Template', 'emails'); ?></h2>\n\n<?php   \nif ($content !== null) {\n "
  },
  {
    "path": "plugins/box/emails/views/backend/index.view.php",
    "chars": 1400,
    "preview": "<div class=\"vertical-align margin-bottom-1\">\n    <div class=\"text-left row-phone\">\n        <h2><?php echo __('Emails', '"
  },
  {
    "path": "plugins/box/emails/views/emails/email_layout.view.php",
    "chars": 67,
    "preview": "<?php include STORAGE . DS . 'emails' . DS . 'layout.email.php'; ?>"
  },
  {
    "path": "plugins/box/filesmanager/css/.htaccess",
    "chars": 31,
    "preview": "Options -Indexes\nAllow from all"
  },
  {
    "path": "plugins/box/filesmanager/css/style.css",
    "chars": 900,
    "preview": ".upload-area {\n    border:2px dashed #DEDEDE;\n    width:200px;\n    color:#DEDEDE;\n    text-align: center;\n    height: 34"
  },
  {
    "path": "plugins/box/filesmanager/filesmanager.admin.php",
    "chars": 11041,
    "preview": "<?php\n\n// Add Plugin Javascript\nStylesheet::add('plugins/box/filesmanager/css/style.css', 'backend', 11);\nJavascript::ad"
  },
  {
    "path": "plugins/box/filesmanager/filesmanager.plugin.php",
    "chars": 652,
    "preview": "<?php\n\n/**\n *\tFiles manager plugin\n *\n *\t@package Monstra\n *  @subpackage Plugins\n *\t@author Romanenko Sergey / Awilum\n "
  },
  {
    "path": "plugins/box/filesmanager/install/filesmanager.manifest.xml",
    "chars": 493,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<root>\n    <plugin_location>plugins/box/filesmanager/filesmanager.plugin.php</plu"
  },
  {
    "path": "plugins/box/filesmanager/js/.htaccess",
    "chars": 31,
    "preview": "Options -Indexes\nAllow from all"
  },
  {
    "path": "plugins/box/filesmanager/js/filesmanager.js",
    "chars": 1853,
    "preview": "if (typeof $.monstra == 'undefined') $.monstra = {};\n\n$.monstra.filesmanager = {\n\n\tinit: function(){\n\t\t$('#filesDirsList"
  },
  {
    "path": "plugins/box/filesmanager/js/fileuploader.js",
    "chars": 4471,
    "preview": "if (typeof $.monstra == 'undefined') $.monstra = {};\n\n$.monstra.fileuploader = {\n    \n    conf: {\n        uploadUrl: '',"
  },
  {
    "path": "plugins/box/filesmanager/languages/cs.lang.php",
    "chars": 1917,
    "preview": "<?php\n\n    return array(\n        'filesmanager' => array(\n            'Files' => 'Soubory',\n            'Files manager' "
  },
  {
    "path": "plugins/box/filesmanager/languages/de.lang.php",
    "chars": 606,
    "preview": "<?php\n\n    return array(\n        'filesmanager' => array(\n            'Files' => 'Dateien',\n            'Files manager' "
  },
  {
    "path": "plugins/box/filesmanager/languages/en.lang.php",
    "chars": 1688,
    "preview": "<?php\n\n    return array(\n        'filesmanager' => array(\n            'Files' => 'Files',\n            'Files manager' =>"
  },
  {
    "path": "plugins/box/filesmanager/languages/es.lang.php",
    "chars": 2065,
    "preview": "<?php\n\n    return array(\n        'filesmanager' => array(\n            'Files' => 'Archivos',\n            'Files manager'"
  },
  {
    "path": "plugins/box/filesmanager/languages/fa.lang.php",
    "chars": 1917,
    "preview": "<?php\n\n    return array(\n        'filesmanager' => array(\n            'Files' => 'فایلها',\n            'Files manager' ="
  },
  {
    "path": "plugins/box/filesmanager/languages/fr.lang.php",
    "chars": 1975,
    "preview": "<?php\n\n    return array(\n        'filesmanager' => array(\n            'Files' => 'Fichiers',\n            'Files manager'"
  }
]

// ... and 340 more files (download for full content)

About this extraction

This page contains the full source code of the monstra-cms/monstra GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 540 files (1.5 MB), approximately 400.2k tokens, and a symbol index with 824 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!