1
0
mirror of https://github.com/monstra-cms/monstra.git synced 2025-08-06 05:07:49 +02:00

3 Commits

Author SHA1 Message Date
Sergey Romanenko
4b4b78e554 Update plugins/box/snippets/js/snippets.js 2013-01-16 09:20:47 +02:00
Sergey Romanenko
3f420f2406 Update plugins/box/snippets/views/backend/index.view.php 2013-01-14 16:38:36 +02:00
Sergey Romanenko
b499f2a1da Update plugins/box/snippets/js/snippets.js 2013-01-14 16:37:40 +02:00
833 changed files with 12740 additions and 80110 deletions

View File

@@ -19,16 +19,8 @@ Options -Indexes
# Setting rewrite rules.
<IfModule mod_rewrite.c>
RewriteEngine on
# Update code bellow for SEO improvements
# RewriteCond %{HTTP_HOST} ^www.example.org [NC]
# RewriteRule ^(.*)$ http://example.org/$1 [R=301,L]
RewriteBase /%siteurlhere%/
RewriteBase /projects/monstra-cms/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
# Update code bellow for SEO improvements
# Redirect 301 /home http://example.org/
</IfModule>
</IfModule>

View File

@@ -1,10 +1,15 @@
# Monstra CMS
Monstra is a modern and lightweight Content Management System.
Fast and small content management system written in PHP!
## System Requirements
Operation system: Unix, Linux, Windows, Mac OS
Middleware: PHP 5.2.3 or higher with PHP's [SimpleXML module](http://php.net/simplexml) and [Multibyte String module](http://php.net/mbstring)
Webserver: Apache with [Mod Rewrite](http://httpd.apache.org/docs/current/mod/mod_rewrite.html) or Ngnix with [Rewrite Module](http://wiki.nginx.org/HttpRewriteModule)
- UNIX/Linux host
- PHP 5.2.0 or higher
- SimpleXML Module
- Apache Mod Rewrite
- Multibyte String
## Steps to Install
1. [Download the latest version.](http://monstra.org/download)
@@ -14,18 +19,21 @@ Webserver: Apache with [Mod Rewrite](http://httpd.apache.org/docs/current/mod/mo
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)
2. Donate to keep Monstra free. We will add you to Monstra [Sponsors Page.](http://monstra.org/about/sponsors)
3. Develop a new plugin.
4. Create a new theme.
5. Find and [report issues.](https://github.com/Awilum/monstra-cms/issues)
5. Find and [report issues.](https://github.com/Monstra/monstra-cms/issues)
6. Link back to [Monstra](http://monstra.org).
## Links
- [Site](http://monstra.org)
- [Forum](http://forum.monstra.org)
- [Documentation](http://monstra.org/documentation)
- [Github Repository](https://github.com/Awilum/monstra-cms)
- [Github Repository](https://github.com/Monstra/monstra-cms)
Copyright (C) 2012-2014 Romanenko Sergey / Awilum [awilum@msn.com]
Copyright (C) 2012-2013 Romanenko Sergey / Awilum [awilum@msn.com]

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -33,58 +33,24 @@ $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');
$user = $users->select("[login='" . trim(Request::post('login')) . "']", null);
if (count($user) !== 0) {
if ($user['login'] == Request::post('login')) {
if (trim($user['password']) == Security::encryptPassword(Request::post('password'))) {
if ($user['role'] == 'admin' || $user['role'] == 'editor') {
Session::set('admin', true);
Session::set('user_id', (int) $user['id']);
Session::set('user_login', (string) $user['login']);
Session::set('user_role', (string) $user['role']);
Request::redirect('index.php');
}
} else {
Cookie::set('login_attempts', 1, 600);
$login_error = __('Wrong <b>username</b> or <b>password</b>', 'users');
}
}
} else {
$login_error = __('Wrong <b>username</b> or <b>password</b>', 'users');
}
Notification::setNow('error', $login_error);
}
// Errors
@@ -113,29 +79,24 @@ if (Request::post('reset_password_submit')) {
// 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')
// Message
$message = View::factory('box/users/views/frontend/reset_password_email')
->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();
->render();
// Send
@mail($user['email'], __('Your login details for :site_name', 'users', array(':site_name' => $site_name)), $message);
// Set notification
Notification::set('success', __('Your login details for :site_name has been sent', 'users', array(':site_name' => $site_name)));
Notification::set('reset_password', 'reset_password');
// Redirect to password-reset page
Request::redirect(Site::url().'/admin');
Request::redirect(Site::url().'admin');
}
@@ -161,7 +122,7 @@ if ($is_admin) {
if (Request::get('id')) {
$area = Request::get('id');
} else {
Request::redirect('index.php?id=dashboard');
Request::redirect('index.php?id=pages');
}
$plugins_registered = Plugin::$plugins;

View File

@@ -1,387 +1,207 @@
/************************************
Monstra
default.css
styles.css
*************************************
CONTENTS
1. GENERAL
2. COMPONENTS
3. MEDIA QUERIES
1. GENERAL
2. HEADER
3. CONTENT
4. LEFT MENU
5. AUTHORIZATION
6. MISC
*************************************
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;
padding-top: 60px;
margin: 0;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 13px;
line-height: 18px;
color: #333333;
background-color: #ffffff;
}
h1,h2,h3,h4,h5 {
color: #222;
h1,
h2,
h3,
h4,
h5,
h6 {
margin: 0;
font-family: inherit;
font-weight: bold;
color: inherit;
text-rendering: optimizelegibility;
}
.error-none {
display: none;
h1 small,
h2 small,
h3 small,
h4 small,
h5 small,
h6 small {
font-weight: normal;
color: #999999;
}
.error-field {
border:1px solid red!important;
h1 {
font-size: 30px;
line-height: 36px;
}
.error-message {
color: red;
h1 small {
font-size: 18px;
}
a.btn-expand {
color: #333;
font-weight: bold;
font-size:14px;
text-decoration: none;
padding-left:4px;
padding-right:4px;
h2 {
font-size: 24px;
line-height: 36px;
}
.btn:active,
.btn.active {
background-image: none;
outline: 0;
box-shadow: none;
h2 small {
font-size: 18px;
}
.login-footer,
.login-footer a {
color:#777;
font-size:12px;
}
footer {
margin-top: 40px;
}
footer,
footer a {
color:#777;
font-size:12px;
}
footer span {
border-top: 1px solid #E0E0E0;
padding-top: 10px;
}
/*************************************
2. COMPONENTS
*************************************/
/* Well */
.well {
border: none;
border-radius: 0px;
background: #fff;
color: #555;
-webkit-font-smoothing: subpixel-antialiased;
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,.13);
box-shadow: 0 1px 3px rgba(0,0,0,.13);
}
.dashboard-well {
padding-top: 6px;
padding-bottom: 6px;
}
.dashboard-well a.welcome-back {
text-decoration: none;
color: #333;
h3 {
line-height: 27px;
font-size: 16px;
padding-left: 0;
}
/* Admin Form */
.form-signin {
max-width: 400px;
h3 small {
font-size: 14px;
}
.form-signin {
margin-top: 40px;
h4,
h5,
h6 {
line-height: 18px;
}
.form-signin .administration-area,
.form-signin .reset-password-area {
margin-top: 40px;
h4 {
font-size: 14px;
}
/* Dropdown Menu */
.dropdown-menu .divider {
background-color: #555454;
h4 small {
font-size: 12px;
}
.dropdown-menu {
border: 1px solid #333;
background: #333;
box-shadow: none;
h5 {
font-size: 12px;
}
.dropdown-menu > li > a {
color: #eee;
}
/* Navbar */
.navbar-inverse .navbar-nav > li > a {
color: #eee;
}
.navbar-inverse {
background: #222;
}
.navbar-default {
border-radius: 0px;
}
ul.navbar-nav {
min-height: 60px;
}
.navbar-nav > li {
min-height: 60px;
}
.navbar-nav > li > a {
line-height: 30px;
}
.navbar-brand {
font-size: 24px;
padding: 13px 15px;
line-height: inherit;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .open > a:hover,
.navbar-inverse .navbar-nav > .open > a:focus {
background: #333;
}
.navbar-inverse .navbar-nav > .active > a,
.navbar-inverse .navbar-nav > .active > a:hover,
.navbar-inverse .navbar-nav > .active > a:focus {
background: #333;
}
a.navbar-brand {
font-weight: bold;
color: #FAFAFA!important;
}
.navbar-nav .dropdown-menu {
padding-top: 0;
padding-bottom: 0;
}
.navbar-nav .dropdown-menu > li > a {
padding: 7px 20px;
}
.nav > li > a {
padding-top: 15px;
padding-bottom: 15px;
padding-left: 20px;
padding-right: 20px;
}
.nav > li > a > img {
width: 28px;
height: 28px;
border: 1px solid #888;
margin: 0 0 0 4px;
}
/* Flat Elements */
.form-control,
.btn,
.dropdown-menu,
.modal-content,
.badge,
.label,
.input-group-addon,
.alert,
.tooltip,
.tooltip-inner,
pre,
code {
border-radius: 0px;
}
.badge,
.tooltip,
.tooltip-inner,
.label,
pre,
code {
font-weight: normal;
text-shadow: none;
}
pre {
border: none;
h6 {
font-size: 11px;
color: #999999;
text-transform: uppercase;
}
/* 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;
}
input[type=text]:focus,
input[type=email]:focus,
input[type=url]:focus,
input[type=phone]:focus,
input[type=password]:focus,
select:focus,
textarea:focus,
input[type="text"]:focus,
input[type="password"]:focus,
input[type="datetime"]:focus,
input[type="datetime-local"]:focus,
input[type="date"]:focus,
input[type="month"]:focus,
input[type="time"]:focus,
input[type="week"]:focus,
input[type="number"]:focus,
input[type="email"]:focus,
input[type="url"]:focus,
input[type="search"]:focus,
input[type="tel"]:focus,
input[type="color"]:focus,
.form-control:focus,
.uneditable-input:focus {
border-color: #aaaaaa;
-webkit-box-shadow: 0 0 8px #dce1e5;
-moz-box-shadow: 0 0 8px #dce1e5;
box-shadow: 0 0 8px #dce1e5;
}
/* Datapicker */
.datapicker {
width: 200px;
}
/* Breadcrumb */
.breadcrumb {
background: #fff;
border-radius: 0px;
}
/* Tabs */
.nav-tabs > li > a {
border-radius: 0px;
}
.tab-page {
background: #fff;
}
.tab-pane > table {
border-top:none!important;
}
.tab-content {
overflow: visible;
}
.tab-page {
border-bottom: 1px solid #DDDDDD;
border-left: 1px solid #DDDDDD;
border-right: 1px solid #DDDDDD;
padding: 20px 10px 10px;
textarea:focus {
border-color: #999;
box-shadow: none;
}
/* Tables */
table {
max-width: 100%;
border-collapse: collapse;
border-spacing: 0;
background-color: transparent;
max-width: 100%;
border-collapse: collapse;
border-spacing: 0;
background-color: transparent;
}
.table {
width: 100%;
margin-bottom: 18px;
width: 100%;
margin-bottom: 18px;
}
.table th,
.table td {
padding: 8px;
line-height: 18px;
text-align: left;
border-top: 1px solid #dddddd;
background: #fff;
padding: 8px;
line-height: 18px;
text-align: left;
border-top: 1px solid #dddddd;
}
.table th {
font-weight: bold;
font-weight: bold;
}
.table thead th {
vertical-align: bottom;
vertical-align: bottom;
}
.table colgroup + thead tr:first-child th,
.table colgroup + thead tr:first-child td,
.table thead:first-child tr:first-child th,
.table thead:first-child tr:first-child td {
border-top: 0;
border-top: 0;
}
.table tbody + tbody {
border-top: 2px solid #dddddd;
border-top: 2px solid #dddddd;
}
.table-condensed th,
.table-condensed td {
padding: 4px 5px;
padding: 4px 5px;
}
.table-bordered {
border: 1px solid #dddddd;
border-left: 0;
border-collapse: separate;
*border-collapse: collapsed;
border: 1px solid #dddddd;
border-left: 0;
border-collapse: separate;
*border-collapse: collapsed;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.table-bordered th:first-child,
.table-bordered td:first-child {
border-left: 1px solid #dddddd;
border-left: 1px solid #dddddd;
}
.table-bordered td:first-child {
padding-left:15px;
padding-left:15px;
}
.table-bordered thead:first-child tr:first-child th,
.table-bordered tbody:first-child tr:first-child th,
.table-bordered tbody:first-child tr:first-child td {
border-top: 0;
border-top: 0;
}
.table-bordered thead:first-child tr:first-child th:first-child,
.table-bordered tbody:first-child tr:first-child td:first-child {
-webkit-border-radius: 4px 0 0 0;
-moz-border-radius: 4px 0 0 0;
border-radius: 4px 0 0 0;
}
.table-bordered thead:first-child tr:first-child th:last-child,
.table-bordered tbody:first-child tr:first-child td:last-child {
-webkit-border-radius: 0 4px 0 0;
-moz-border-radius: 0 4px 0 0;
border-radius: 0 4px 0 0;
}
.table-bordered thead:last-child tr:last-child th:first-child,
.table-bordered tbody:last-child tr:last-child td:first-child {
-webkit-border-radius: 0 0 0 4px;
-moz-border-radius: 0 0 0 4px;
border-radius: 0 0 0 4px;
}
.table-bordered thead tr th {
font-weight:bold;
background-color: #fff;
font-weight:bold;
background-color: #f5f5f5;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5));
background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);
background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5));
background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);
background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);
background-image: linear-gradient(top, #ffffff, #f5f5f5);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);
border-top: 1px solid #fff;
}
.table-bordered thead:first-child tr:first-child > th:first-child,
.table-bordered tbody:first-child tr:first-child > td:first-child {
.table-bordered thead:last-child tr:last-child th:last-child,
.table-bordered tbody:last-child tr:last-child td:last-child {
-webkit-border-radius: 0 0 4px 0;
-moz-border-radius: 0 0 4px 0;
border-radius: 0 0 4px 0;
}
.table-bordered thead:first-child tr:first-child > th:first-child, .table-bordered tbody:first-child tr:first-child > td:first-child {
border-top-left-radius: 0px;
}
@@ -392,22 +212,15 @@ table {
.table-striped tbody tr:nth-child(odd) td,
.table-striped tbody tr:nth-child(odd) th {
background-color: #f9f9f9;
background-color: #f9f9f9;
}
.table tbody tr:hover td,
.table tbody tr:hover th {
background-color: #f5f5f5;
background-color: #f5f5f5;
}
.table-bordered th,
.table-bordered td {
.table-bordered th, .table-bordered td {
border-left: none;
height: 50px;
}
.table-bordered > thead > tr {
height: 45px;
}
td, th {
@@ -415,203 +228,254 @@ td, th {
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;
/* Buttons */
.btn-toolbar {
margin:0;
}
.vertical-align {
display: table;
width: 100%;
.btn-group .btn {
margin-left: 5px;
}
.vertical-align > div {
display: table-cell;
vertical-align: middle;
.btn-actions-default {
-webkit-border-top-left-radius: 4px!important;
-moz-border-radius-topleft: 4px!important;
border-top-left-radius: 4px!important;
-webkit-border-bottom-left-radius: 4px!important;
-moz-border-radius-bottomleft: 4px!important;
border-bottom-left-radius: 4px!important;
}
.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;
/* Tabs */
.tab-pane > table {
margin-top:-20px;
}
.margin-top-1 {
margin-top: 1em;
.tab-pane > table {
border-top:none!important;
}
.margin-top-2 {
margin-top: 2em;
.tab-content {
overflow: visible;
}
.margin-bottom-1 {
margin-bottom: 1em;
.tab-page {
border-bottom: 1px solid #DDDDDD;
border-left: 1px solid #DDDDDD;
border-right: 1px solid #DDDDDD;
margin-top: -20px;
padding: 20px 10px 10px;
}
.margin-bottom-2 {
margin-bottom: 2em;
/**************************************
2. HEADER
*************************************/
.monstra-header {
top: 0;
left: 0;
right: 0;
margin-top:-60px;
position: relative;
z-index:999;
}
.monstra-header h3 a:hover, .monstra-header .brand:hover, .monstra-header ul .active > a {
color: #ffffff;
text-decoration: none;
}
.monstra-header h3 {
position: relative;
}
.monstra-header h3 a, .monstra-header .brand {
float: left;
display: block;
padding-top:15px;
padding-left:10px;
margin-left: 0px;
color: #fdfdfd;
font-family: arial;
font-weight: 600;
line-height: 1;
font-size: 24px;
text-shadow: 0 1px 2px rgba(0,0,0,.5);
width:188px;
}
.monstra-header p {
margin: 0;
line-height: 60px;
}
/* Editor */
#editor_area {
height: 400px!important;
border: 1px solid #ccc;
color: #555;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
line-height: 1.428571429;
padding: 6px 9px;
}
.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 {
padding: 5px 40px;
background: #ccc;
margin-left: 4px;
background: #f7f7f7;
border: 3px dashed #D5D5D5;
color: #ccc;
}
.modal-backdrop {
background-color: #000;
}
.modal-backdrop.in {
opacity: 0.8;
}
.modal-content {
box-shadow: none;
border: none;
}
#readme .modal-dialog {
width: 70%;
}
#readme .modal-body {
padding-top: 0px;
}
#Choco_container_via {
display: none;
.monstra-header-inner, .topbar .fill {
background-color: #ccc;
background: url('@theme_admin_url/img/noisy_grid_dark.png');
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
}
/*************************************
3. MEDIA QUERIES
3. CONTENT
*************************************/
@media (max-width: 480px) {
/* MarkItUp */
.markItUpButton11,
.markItUpButton12,
.markItUpButton13,
.markItUpButton14,
.markItUpButton15,
.markItUpButton16,
.markItUpButton17,
.markItUpButton18 {
display: none;
}
.markItUpSeparator{
display: none;
}
/* Dashboard */
.dashboard-well .col-xs-6 {
width: 100%;
}
.dashboard-well .col-xs-6 .pull-right {
float: left!important;
}
.btn-phone {
width: 100%;
}
.row-phone {
display: block!important;
width: 100%!important;
text-align: left!important;
}
/* Users */
.users-btns > div {
display: block;
text-align: left;
margin-top: 10px;
width: 100%;
}
.users-btns > div:nth-child(2) {
margin-top: 15px;
}
.page-users .btn-cancel {
margin-bottom: 20px;
}
.monstra-content {
padding-top:20px;
}
@media (max-width: 768px) {
.nav > li > a {
padding: 15px 9px!important;
}
/*************************************
4. LEFT MENU
*************************************/
.monstra-menu-category-separator {
border: 0;
border-bottom: 1px solid #ccc;
margin-top:5px;
margin-bottom:8px;
}
@media (max-width: 320px) {
.mobile-nav-tabs .nav-tabs > li {
width: 100%;
height: 46px;
margin: 0px;
}
.mobile-nav-tabs .nav-tabs > li > a {
background: #fff;
border: 0;
}
.mobile-nav-tabs .nav-tabs > li.active > a,
.mobile-nav-tabs .nav-tabs > li.active > a:hover,
.mobile-nav-tabs .nav-tabs > li.active > a:focus {
border: 0;
color: #fff;
background-color: #428bca;
}
.mobile-nav-tabs .nav-tabs {
margin-top: 10px;
margin-bottom: 10px;
border: 0;
}
.mobile-nav-tabs .tab-pane > table {
border-top: 1px solid #ddd!important;
}
.monstra-menu-sidebar {
background: url('@theme_admin_url/img/noisy_grid.png');
background-color:#ccc;
max-width:192px!important;
min-width:136px!important;
margin-bottom: 20px;
padding: 19px;
border-bottom:2px solid #ccc;
border-right:2px solid #ccc;
}
.monstra-menu-sidebar ul {
clear: both;
margin: 0;
padding: 0;
font-family: 'lucida grande','Lucida Sans Unicode', Tahoma, sans-serif;
}
.monstra-menu-sidebar li {
list-style: none;
margin: 0 0 0 -22px;
padding: 0;
}
.monstra-menu-sidebar li a {
width:97%;
color: #333;
padding-left: 23px;
text-decoration: none;
display: inline-block;
height: 20px;
line-height: 20px;
text-shadow: 0 1px 0 #fff;
margin: 2px 0;
}
.monstra-menu-sidebar li a.current {
color: #000;
padding-top:3px;
cursor: pointer;
display: inline-block;
background-color: #e6e6e6;
background-repeat: no-repeat;
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));
background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);
background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
line-height: normal;
border: 1px solid #ccc;
border-bottom-color: #bbb;
border-right:2px solid #ccc;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-webkit-transition: 0.1s linear all;
-moz-transition: 0.1s linear all;
-ms-transition: 0.1s linear all;
-o-transition: 0.1s linear all;
transition: 0.1s linear all;
margin-left: 1px;
}
.monstra-menu-sidebar li a:hover {
color: #000;
background:#fff;
}
.nav-list > .active > a,
.nav-list > .active > a:hover {
color: #ffffff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
background-color: #0088cc;
}
/*************************************
5. AUTHORIZATION
*************************************/
.login-body {
background-color: #FBFBFB;
}
.form-signin {
max-width: 290px;
padding: 19px 29px 29px;
margin: 0 auto 20px;
background: none repeat scroll 0 0 #fff;
-webkit-box-shadow: 0 1px 5px rgba(0,0,0,.15);
-moz-box-shadow: 0 1px 5px rgba(0,0,0,.15);
box-shadow: 0 1px 5px rgba(0,0,0,.15);
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
/*************************************
6. MISC
*************************************/
.small-grey-text {
color:#333;
font-size: 10px;
}
.small-grey-text:hover {
color:#000;
}
.small-white-text {
color:#fff;
font-size: 10px;
}
.small-white-text:hover {
color:#fdfdfd;
}
.error-none {display:none;}
.error-field {border:1px solid red!important;}
.container-fluid {padding-left:0px;}
img {max-width:none;}
a.btn-expand{
color: #333;
font-weight:bold;
font-size:14px;
text-decoration: none;
padding-left:4px;
padding-right:4px;
}
footer a , footer{
color:#333;
font-size:10px;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -2,169 +2,112 @@
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="x-dns-prefetch-control" content="on">
<link rel="dns-prefetch" href="<?php echo Site::url(); ?>" />
<link rel="dns-prefetch" href="//www.google-analytics.com" />
<link rel="dns-prefetch" href="//www.gravatar.com" />
<title>Monstra :: <?php echo __('Administration', 'system'); ?></title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Monstra Admin Area" />
<link rel="icon" href="<?php echo Option::get('siteurl'); ?>/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="<?php echo Option::get('siteurl'); ?>/favicon.ico" type="image/x-icon" />
<meta name="description" content="Monstra admin area" />
<link rel="icon" href="<?php echo Option::get('siteurl'); ?>favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="<?php echo Option::get('siteurl'); ?>favicon.ico" type="image/x-icon" />
<!-- Styles -->
<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::add('public/assets/css/bootstrap.css', 'backend', 1); ?>
<?php Stylesheet::add('public/assets/css/bootstrap-responsive.css', 'backend', 2); ?>
<?php Stylesheet::add('admin/themes/default/css/default.css', 'backend', 3); ?>
<?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::add('public/assets/js/jquery.js', 'backend', 1); ?>
<?php Javascript::add('public/assets/js/bootstrap.js', 'backend', 2); ?>
<?php Javascript::add('admin/themes/default/js/default.js', 'backend', 3); ?>
<?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>
<link rel="stylesheet" href="css/ie.css" type="text/css" media="screen" />
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body class="page-<?php echo Request::get('id'); ?>">
</head>
<body>
<nav class="navbar navbar-default navbar-inverse" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="<?php echo Site::url(); ?>/admin/index.php?id=dashboard">MONSTRA</a>
</div>
<!-- Block_topbar -->
<div class="monstra-header">
<div class="monstra-header-inner">
<div class="container-fluid">
<a class="brand" href="<?php echo Option::get('siteurl'); ?>admin"><img src="<?php echo Option::get('siteurl'); ?>public/assets/img/monstra-logo.png" height="27" width="171"></a>
<p class="pull-right">
<?php Navigation::draw('top', Navigation::TOP); ?>
</p>
</div>
</div>
</div>
<!-- /Block_topbar -->
<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">
<!-- Block_container -->
<div class="container-fluid">
<div class="row-fluid">
<!-- Block_sidebar -->
<div class="span2 monstra-menu-sidebar hidden-phone">
<h3><?php echo __('Content', 'pages'); ?></h3>
<ul>
<?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'); ?>
<div class="monstra-menu-category-separator"></div>
<?php if (Session::exists('user_role') && in_array(Session::get('user_role'), array('admin'))) { ?>
<h3><?php echo __('Extends', 'system'); ?></h3>
<ul>
<?php Navigation::draw('extends'); ?>
</ul>
</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'); ?>
<div class="monstra-menu-category-separator"></div>
<?php } ?>
<h3><?php echo __('System', 'system'); ?></h3>
<ul>
<?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>
<!-- /Block_sidebar -->
<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'));
?>
<!-- Block_content -->
<div class="span10 monstra-content">
<div id="update-monstra"></div>
<div><?php Action::run('admin_pre_template'); ?></div>
<div>
<?php
if ($plugin_admin_area) {
if (is_callable(ucfirst(Plugin::$plugins[$area]['id']).'Admin::main')) {
call_user_func(ucfirst(Plugin::$plugins[$area]['id']).'Admin::main');
} else {
echo '<div class="message-error">'.__('Plugin main admin function does not exist', 'system').'</div>';
}
} else {
echo '<div class="message-error">'.__('Plugin does not exist', 'system').'</div>';
}
?>
</div>
<div><?php Action::run('admin_post_template'); ?></div>
</div>
<!-- /Block_content -->
<div 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>
<?php if (Option::get('language') == 'ru') { ?>
<a href="http://ru.forum.monstra.org" target="_blank"><?php echo __('Official Support Forum', 'system'); ?></a> /
<?php } else { ?>
<a href="http://forum.monstra.org" target="_blank"><?php echo __('Official Support Forum', 'system'); ?></a> /
<?php } ?>
<a href="http://monstra.org/documentation" target="_blank"><?php echo __('Documentation', 'system'); ?></a> /
© 2012 - 2014 <a href="http://monstra.org" target="_blank">Monstra</a> <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?>
</span>
</p>
</footer>
<!-- Block_footer -->
<footer>
<p align="right">
<span style="border-top:1px solid #E0E0E0; padding-top:10px;">
<a href="http://forum.monstra.org" target="_blank"><?php echo __('Official Support Forum', 'system'); ?></a> /
<a href="http://monstra.org/documentation" target="_blank"><?php echo __('Documentation', 'system'); ?></a> /
© 2012 - 2013 <a href="http://monstra.org" target="_blank">Monstra</a> <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?>
</span>
</p>
</footer>
<!-- /Block_footer -->
</div>
<!-- /Block_container -->
</body>
</html>

View File

@@ -1,23 +1,19 @@
/**
* 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.
* Monstra JS module
* @package Monstra
* @author Romanenko Sergey / Awilum
* @copyright 2012 Romanenko Sergey / Awilum
* @version $Id$
* @since 1.0.0
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* Monstra is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYING.txt for copyright notices and details.
* @filesource
*/
/* 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'
}

View File

@@ -5,28 +5,20 @@
<title>Monstra :: <?php echo __('Administration', 'system'); ?></title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Monstra Admin Area">
<link rel="icon" href="<?php echo Option::get('siteurl'); ?>/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="<?php echo Option::get('siteurl'); ?>/favicon.ico" type="image/x-icon" />
<link rel="icon" href="<?php echo Option::get('siteurl'); ?>favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="<?php echo Option::get('siteurl'); ?>favicon.ico" type="image/x-icon" />
<!-- Styles -->
<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::add('public/assets/css/bootstrap.css', 'backend', 1); ?>
<?php Stylesheet::add('public/assets/css/bootstrap-responsive.css', 'backend', 2); ?>
<?php Stylesheet::add('admin/themes/default/css/default.css', 'backend', 3); ?>
<?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::add('public/assets/js/jquery.js', 'backend', 1); ?>
<?php Javascript::add('public/assets/js/bootstrap.js', 'backend', 2); ?>
<?php Javascript::add('admin/themes/default/js/default.js', 'backend', 3); ?>
<?php Javascript::load(); ?>
<script type="text/javascript">
$().ready(function () {
<?php if (Notification::get('reset_password') == 'reset_password') { ?>
@@ -51,56 +43,47 @@
<?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]-->
<!--[if lt IE 9]>
<link rel="stylesheet" href="css/ie.css" type="text/css" media="screen" />
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</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 style="text-align:center;"><a class="brand" href="<?php echo Option::get('siteurl'); ?>admin"><img src="<?php echo Option::get('siteurl'); ?>public/assets/img/monstra-logo.png" height="27" width="171"></a></div>
<div class="administration-area">
<hr>
<div>
<h2 style="text-align:center;"><?php echo __('Administration', 'system'); ?></h2><br />
<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>
<label><?php echo __('Username', 'users'); ?></label>
<input class="input-xlarge" name="login" type="text" />
<label><?php echo __('Password', 'users'); ?></label>
<input class="input-xlarge" name="password" type="password" />
<br />
<?php if (isset($login_error) && $login_error !== '') { ?><div class="alert alert-error"><?php echo $login_error; ?></div><?php } ?>
<input type="submit" name="login_submit" class="btn" value="<?php echo __('Enter', 'users'); ?>" />
</form>
</div>
</div>
<div class="reset-password-area well">
<div class="reset-password-area">
<hr>
<div>
<h2 style="text-align:center;"><?php echo __('Reset Password', 'users'); ?></h2><br />
<?php if (Notification::get('success')) Alert::success(Notification::get('success')); ?>
<form method="post">
<div class="form-group">
<label><?php echo __('Username', 'users'); ?></label>
<input name="login" class="form-control" type="text" value="<?php echo $user_login; ?>" />
</div>
<input name="login" class="input-xlarge" type="text" value="<?php echo $user_login; ?>" />
<?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>
<label><?php echo __('Captcha'); ?><label>
<input type="text" name="answer" class="input-xlarge">
<?php CryptCaptcha::draw(); ?>
</div>
<?php } ?>
<br>
<?php
@@ -110,29 +93,24 @@
}
}
?>
<div class="form-group">
<input type="submit" name="reset_password_submit" class="btn btn-primary" value="<?php echo __('Send New Password', 'users')?>" />
</div>
<input type="submit" name="reset_password_submit" class="btn" value="<?php echo __('Send New Password', 'users')?>" />
</form>
</div>
</div>
<hr>
<div>
<div style="text-align:center;">
<a class="small-grey-text" href="<?php echo Option::get('siteurl'); ?>"><?php echo __('< Back to Website', 'system');?></a> -
<a class="small-grey-text reset-password-btn" href="javascript:;"><?php echo __('Forgot your password? >', 'system');?></a>
<a class="small-grey-text administration-btn" href="javascript:;"><?php echo __('Administration >', 'system');?></a>
</div>
</div>
</div>
<div class="login-footer">
<div class="text-center">
<a href="<?php echo Option::get('siteurl'); ?>"><?php echo __('Back to Website', 'system');?></a> -
<a class="reset-password-btn" href="javascript:;"><?php echo __('Forgot your password ?', 'system');?></a>
<a class="administration-btn" href="javascript:;"><?php echo __('Log In', 'users');?></a>
</div>
<div class="text-center">
<span>© 2012 - 2014 <a href="http://monstra.org" class="small-grey-text" target="_blank">Monstra</a> <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?></span>
</div>
<div style="text-align:center">
<span class="small-grey-text">© 2012 <a href="http://monstra.org" class="small-grey-text" target="_blank">Monstra</a> <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?></span>
</div>
</body>
</html>

View File

@@ -1,126 +1,3 @@
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.
@@ -298,7 +175,7 @@ Monstra 1.1.4, 2012-06-09
------------------------
- Improve Monstra Error Handler
Monstra 1.1.3, 2012-06-06
Monstra 1.1.3, 2012-06-06
------------------------
- Improve Monstra Error Handler
@@ -334,4 +211,4 @@ Monstra 1.0.1, 2012-04-26
Monstra 1.0.0, 2012-04-24
------------------------
- Initial release
- Initial release

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -35,21 +35,16 @@ class Alert
* </code>
*
* @param string $message Message
* @param integer $seconds Seconds
* @param integer $time Time
*/
public static function success($message, $seconds = 3)
public static function success($message, $time = 3000)
{
// Redefine vars
$message = (string) $message;
$seconds = (int) $seconds;
$time = (int) $time;
echo '<script type="text/javascript">
Messenger().post({
type: "success",
message : "'.$message.'",
hideAfter: '.$seconds.'
});
</script>';
echo '<div class="alert alert-info">'.$message.'</div>
<script type="text/javascript">setTimeout(\'$(".alert").slideUp("slow")\', '.$time.'); </script>';
}
/**
@@ -60,21 +55,16 @@ class Alert
* </code>
*
* @param string $message Message
* @param integer $seconds Seconds
* @param integer $time Time
*/
public static function warning($message, $seconds = 3)
public static function warning($message, $time = 3000)
{
// Redefine vars
$message = (string) $message;
$seconds = (int) $seconds;
$time = (int) $time;
echo '<script type="text/javascript">
Messenger().post({
type: "info",
message : "'.$message.'",
hideAfter: '.$seconds.'
});
</script>';
echo '<div class="alert alert-warning">'.$message.'</div>
<script type="text/javascript">setTimeout(\'$(".alert").slideUp("slow")\', '.$time.'); </script>';
}
/**
@@ -85,21 +75,16 @@ class Alert
* </code>
*
* @param string $message Message
* @param integer $seconds Seconds
* @param integer $time Time
*/
public static function error($message, $seconds = 3)
public static function error($message, $time = 3000)
{
// Redefine vars
$message = (string) $message;
$seconds = (int) $seconds;
$time = (int) $time;
echo '<script type="text/javascript">
Messenger().post({
type: "error",
message : "'.$message.'",
hideAfter: '.$seconds.'
});
</script>';
echo '<div class="alert alert-error">'.$message.'</div>
<script type="text/javascript">setTimeout(\'$(".alert").slideUp("slow")\', '.$time.'); </script>';
}
}

View File

@@ -5,7 +5,7 @@
*
* Monstra - Content Management System.
* Site: www.mostra.org
* Copyright (C) 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* Copyright (C) 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* This source file is part of the Monstra Engine. More information,
* documentation and tutorials can be found at http://monstra.org
@@ -13,7 +13,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -39,8 +39,7 @@ class Monstra
/**
* The version of Monstra
*/
const VERSION = '3.0.0';
const VERSION = '2.1.3';
/**
* Monstra environment
@@ -114,24 +113,14 @@ class Monstra
* Set Gelato Display Errors to False for Production environment.
*/
if (Monstra::$environment == Monstra::PRODUCTION) {
define('GELATO_DEVELOPMENT', false);
define('GELATO_DISPLAY_ERRORS', 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
*/
@@ -168,9 +157,6 @@ class Monstra
// Idiorm
'ORM' => ROOT . DS .'libraries'. DS . 'Idiorm'. DS .'ORM.php',
// PHPMailer
'PHPMailer' => ROOT . DS .'libraries'. DS . 'PHPMailer'. DS .'PHPMailer.php',
));
/**
@@ -185,14 +171,18 @@ class Monstra
ORM::configure(MONSTRA_DB_DSN);
ORM::configure('username', MONSTRA_DB_USER);
ORM::configure('password', MONSTRA_DB_PASSWORD);
ORM::configure('driver_options', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
}
/**
* Auto cleanup if DEVELOPMENT environment
* Auto cleanup if MONSTRA_DEBUG is TRUE
*/
if (Monstra::$environment == Monstra::DEVELOPMENT) {
Monstra::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);
}
/**
@@ -303,18 +293,6 @@ class Monstra
}
/**
* Clean Monstra TMP folder.
*/
public static function cleanTmp()
{
// Cleanup minify
if (count($files = File::scan(MINIFY, array('css', 'js', 'php'))) > 0) foreach ($files as $file) File::delete(MINIFY . DS . $file);
// Cleanup cache
if (count($namespaces = Dir::scan(CACHE)) > 0) foreach ($namespaces as $namespace) Dir::delete(CACHE . DS . $namespace);
}
/**
* Initialize Monstra Engine
*

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -47,7 +47,7 @@ class Action
* </code>
*
* @param string $action_name Action name
* @param mixed $added_function Added function
* @param string $added_function Added function
* @param integer $priority Priority. Default is 10
* @param array $args Arguments
*/
@@ -56,7 +56,7 @@ class Action
// Hooks a function on to a specific action.
Action::$actions[] = array(
'action_name' => (string) $action_name,
'function' => $added_function,
'function' => (string) $added_function,
'priority' => (int) $priority,
'args' => $args
);

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -91,7 +91,7 @@ class Filter
* </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 string $function_to_add The name of the function to be called when the filter is applied.
* @param integer $priority Function to add priority - default is 10.
* @param integer $accepted_args The number of arguments the function accept default is 1.
* @return boolean
@@ -100,7 +100,7 @@ class Filter
{
// Redefine arguments
$filter_name = (string) $filter_name;
$function_to_add = $function_to_add;
$function_to_add = (string) $function_to_add;
$priority = (int) $priority;
$accepted_args = (int) $accepted_args;

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -32,13 +32,11 @@ class I18n
'el' => 'Ελληνικά',
'en' => 'English',
'es' => 'Español',
'fa' => 'Farsi',
'fi' => 'Suomi',
'fr' => 'Français',
'gl' => 'Galego',
'hu' => 'Magyar',
'it' => 'Italiano',
'id' => 'Bahasa Indonesia',
'ja' => '日本語',
'lt' => 'Lietuvių',
'nl' => 'Nederlands',
@@ -53,7 +51,7 @@ class I18n
'sr-yu' => 'Serbian',
'tr' => 'Türkçe',
'uk' => 'Українська',
'zh-cn' => '中文',
'zh' => '中文',
);
/**

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -92,7 +92,7 @@ class Javascript
if ($backend_regenerate) {
foreach ($javascripts as $javascript) {
if ((file_exists(ROOT . DS . $javascript['file'])) and (($javascript['load'] == 'backend') or ($javascript['load'] == 'both')) ) {
$backend_buffer .= file_get_contents(ROOT . DS . $javascript['file'])."\n";
$backend_buffer .= file_get_contents(ROOT . DS . $javascript['file']);
}
}
file_put_contents($backend_site_js_path, $backend_buffer);
@@ -115,7 +115,7 @@ class Javascript
if ($frontend_regenerate) {
foreach ($javascripts as $javascript) {
if ((file_exists(ROOT . DS . $javascript['file'])) and (($javascript['load'] == 'frontend') or ($javascript['load'] == 'both')) ) {
$frontend_buffer .= file_get_contents(ROOT . DS . $javascript['file'])."\n";
$frontend_buffer .= file_get_contents(ROOT . DS . $javascript['file']);
}
}
file_put_contents($frontend_site_js_path, $frontend_buffer);
@@ -126,19 +126,11 @@ class Javascript
// Render
if (BACKEND) {
echo '<script type="text/javascript" src="'.Option::get('siteurl').'/tmp/minify/backend_site.minify.js?'.Option::get('javascript_version').'"></script>';
echo '<script type="text/javascript" src="'.Option::get('siteurl').'tmp/minify/backend_site.minify.js"></script>';
} else {
echo '<script type="text/javascript" src="'.Option::get('siteurl').'/tmp/minify/frontend_site.minify.js?'.Option::get('javascript_version').'"></script>'."\n";
echo '<script type="text/javascript" src="'.Option::get('siteurl').'tmp/minify/frontend_site.minify.js"></script>';
}
}
}
/**
* javascriptVersionIncrement
*/
public static function javascriptVersionIncrement() {
Option::update('javascript_version', (int) Option::get('javascript_version') + 1);
}
}

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -110,86 +110,4 @@ class Navigation
}
}
/**
* Draw items
*
* <code>
* Navigation::draw('content');
* Navigation::draw('top', Navigation::TOP);
* <code>
*
* @param string $category Category
* @param integer $type Type. Default is LEFT
*/
public static function get($category, $type = Navigation::LEFT)
{
// Sort items by priority
$items = Arr::subvalSort(Navigation::$items, 'priority');
// Draw left navigation
if ($type == Navigation::LEFT) {
// Loop trough the items
foreach ($items as $item) {
// If current plugin id == selected item id then set class to current
if (Request::get('id') == $item['id'] && $item['external'] == false) $class = 'class = "current" '; else $class = '';
// If current category == item category and navigation type is left them draw this item
if ($item['category'] == $category && $item['type'] == Navigation::LEFT) {
// Is external item id or not ?
if ($item['external'] == false) {
echo '<li><a '.$class.'href="index.php?id='.$item['id'].'">'.$item['name'].'</a></li>';
} else {
echo '<li><a target="_blank" href="'.$item['id'].'">'.$item['name'].'</a></li>';
}
}
}
} elseif ($type == Navigation::TOP) {
// Draw top navigation
foreach ($items as $item) {
if ($item['category'] == $category && $item['type'] == Navigation::TOP) {
if ($item['external'] == false) {
echo '<a class="btn btn-small btn-inverse" href="index.php?id='.$item['id'].'">'.$item['name'].'</a>'.Html::nbsp(2);
} else {
echo '<a target="_blank" class="btn btn-small btn-inverse" href="'.$item['id'].'">'.$item['name'].'</a>'.Html::nbsp(2);
}
}
}
}
}
/**
* Draw dropdown items
*
* <code>
* Navigation::getDropdown('content');
* <code>
*
* @param string $category Category
*/
public static function getDropdown($category)
{
// Sort items by priority
$items = Arr::subvalSort(Navigation::$items, 'priority');
// Loop trough the items
foreach ($items as $item) {
// If current plugin id == selected item id then set class to current
if (Request::get('id') == $item['id'] && $item['external'] == false) $class = 'selected = "selected" '; else $class = '';
// If current category == item category and navigation type is left them draw this item
if ($item['category'] == $category && $item['type'] == Navigation::LEFT) {
// Is external item id or not ?
if ($item['external'] == false) {
echo '<option '.$class.'rel="index.php?id='.$item['id'].'">'.$item['name'].'</option>';
}
}
}
}
}

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -68,7 +68,7 @@ class Plugin
$plugins = new Table('plugins');
// Select all plugins
$records = $plugins->select(null, 'all', null, array('location', 'status', 'priority'), 'priority', 'ASC');
$records = $plugins->select(null, 'all', null, array('location', 'frontend', 'backend', 'status', 'priority'), 'priority', 'ASC');
// Now include plugins from $records plugins array
// If plugin is active then load it to the system.

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -96,7 +96,7 @@ class Stylesheet
}
}
$backend_buffer = Stylesheet::parseVariables($backend_buffer);
file_put_contents($backend_site_css_path, MinifyCSS::process($backend_buffer));
file_put_contents($backend_site_css_path, Minify::css($backend_buffer));
$backend_regenerate = false;
}
@@ -120,7 +120,7 @@ class Stylesheet
}
}
$frontend_buffer = Stylesheet::parseVariables($frontend_buffer);
file_put_contents($frontend_site_css_path, MinifyCSS::process($frontend_buffer));
file_put_contents($frontend_site_css_path, Minify::css($frontend_buffer));
$frontend_regenerate = false;
}
@@ -128,9 +128,9 @@ class Stylesheet
// Render
if (BACKEND) {
echo '<link rel="stylesheet" href="'.Option::get('siteurl').'/tmp/minify/backend_site.minify.css?'.Option::get('styles_version').'" type="text/css" />';
echo '<link rel="stylesheet" href="'.Option::get('siteurl').'tmp/minify/backend_site.minify.css'.'" type="text/css" />';
} else {
echo '<link rel="stylesheet" href="'.Option::get('siteurl').'/tmp/minify/frontend_site.minify.css?'.Option::get('styles_version').'" type="text/css" />'."\n";
echo '<link rel="stylesheet" href="'.Option::get('siteurl').'tmp/minify/frontend_site.minify.css'.'" type="text/css" />';
}
}
}
@@ -144,16 +144,9 @@ class Stylesheet
'@theme_site_url',
'@theme_admin_url'),
array(Option::get('siteurl'),
Option::get('siteurl').'/public/themes/'.Option::get('theme_site_name'),
Option::get('siteurl').'/admin/themes/'.Option::get('theme_admin_name')),
Option::get('siteurl').'public/themes/'.Option::get('theme_site_name'),
Option::get('siteurl').'admin/themes/'.Option::get('theme_admin_name')),
$frontend_buffer);
}
/**
* stylesVersionIncrement
*/
public static function stylesVersionIncrement() {
Option::update('styles_version', (int) Option::get('styles_version') + 1);
}
}

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -22,7 +22,7 @@ class Security
*
* @var string
*/
protected static $token_name = 'security_token';
public static $token_name = 'security_token';
/**
* Protected constructor since this is a static class.
@@ -111,7 +111,7 @@ class Security
* </code>
*
* @param string $str String
* @param mixed $delimiter String delimiter
* @param string $delimiter String delimiter
* @param boolean $lowercase String Lowercase
* @return string
*/
@@ -119,9 +119,9 @@ class Security
{
// Redefine vars
$str = (string) $str;
$delimiter = $delimiter;
$delimiter = (string) $delimiter;
$lowercase = (bool) $lowercase;
$delimiter = $delimiter;
$delimiter = (string) $delimiter;
// Remove tags
$str = filter_var($str, FILTER_SANITIZE_STRING);
@@ -149,11 +149,9 @@ class Security
$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);
}
$str = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $str );
$str = preg_replace("/[\/_|+ -]+/", $delimiter, $str );
$str = trim($str, $delimiter);
// Lowercase
if ($lowercase === true) $str = Text::lowercase($str);

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -176,7 +176,7 @@ class Site
if ( ! file_exists(MINIFY . DS . 'theme.' . $current_theme . '.minify.' . $template . '.template.php') or
filemtime(THEMES_SITE . DS . $current_theme . DS . $template .'.template.php') > filemtime(MINIFY . DS . 'theme.' . $current_theme . '.minify.' . $template . '.template.php')) {
$buffer = file_get_contents(THEMES_SITE. DS . $current_theme . DS . $template .'.template.php');
$buffer = MinifyHTML::process($buffer);
$buffer = Minify::html($buffer);
file_put_contents(MINIFY . DS . 'theme.' . $current_theme . '.minify.' . $template . '.template.php', $buffer);
}
@@ -185,7 +185,7 @@ class Site
if ( ! File::exists(MINIFY . DS . 'theme.' . $current_theme . '.' . 'minify.index.template.php') or
filemtime(THEMES_SITE . DS . $current_theme . DS . 'index.template.php') > filemtime(MINIFY . DS . 'theme.' . $current_theme . '.' . 'minify.index.template.php')) {
$buffer = file_get_contents(THEMES_SITE . DS . $current_theme . DS . 'index.template.php');
$buffer = MinifyHTML::process($buffer);
$buffer = Minify::html($buffer);
file_put_contents(MINIFY . DS . 'theme.' . $current_theme . '.' . 'minify.index.template.php', $buffer);
}

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -137,11 +137,14 @@ class Uri
// param1/param2
if ($uri[0] !== Uri::$default_component) {
if (isset($uri[1])) {
foreach ($uri as $part) {
$data[] = $part;
}
$data[0] = $uri[0];
$data[1] = $uri[1];
// Some more uri parts :)
// site.ru/part1/part2/part3/part4/part5/part6/
if (isset($uri[2])) $data[2] = $uri[2];
if (isset($uri[3])) $data[3] = $uri[3];
if (isset($uri[4])) $data[4] = $uri[4];
if (isset($uri[5])) $data[5] = $uri[5];
} else { // default
$data[0] = $uri[0];
}

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -546,7 +546,7 @@ class Table
if ($order_by == 'id') {
$records[$count]['sort'] = (int) $vars['id'];
} else {
$records[$count]['sort'] = (string) $vars[$order_by];
$records[$count]['sort'] = (string) $value;
}
}
@@ -807,7 +807,6 @@ class Table
return $c;
}
return $a;
}
/**
@@ -854,7 +853,7 @@ class Table
*/
protected static function _save($table)
{
$dom = new DOMDocument('1.0', 'utf-8');
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
// Save new xml data to xml file only if loadXML successful.

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -1,10 +1,19 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/**
* Monstra requires PHP 5.2.3 or greater
* Report All Errors
*
* By setting error reporting to -1, we essentially force PHP to report
* every error, and this is guranteed to show every error on future
* releases of PHP. This allows everything to be fixed early!
*/
if (version_compare(PHP_VERSION, "5.2.3", "<")) {
exit("Monstra requires PHP 5.2.3 or greater.");
error_reporting(-1);
/**
* Monstra requires PHP 5.2.0 or greater
*/
if (version_compare(PHP_VERSION, "5.2.0", "<")) {
exit("Monstra requires PHP 5.2.0 or greater.");
}
/**
@@ -21,16 +30,7 @@ include ROOT . DS .'engine'. DS .'Monstra.php';
* 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);
}
Monstra::$environment = Monstra::DEVELOPMENT;
/**
* Initialize Monstra

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -9,7 +9,7 @@
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -21,6 +21,16 @@ define('ROOT', rtrim(dirname(__FILE__), '\\/'));
define('BACKEND', false);
define('MONSTRA_ACCESS', true);
/* TEMP CODE BEGIN */
function byteFormat($size)
{
$unit = array('b', 'kb', 'mb', 'gb', 'tb', 'pb');
return @round($size/pow(1024, ($i=floor(log($size, 1024)))), 2).' '.$unit[$i];
}
$_start = memory_get_usage();
/* TEMP CODE END */
// First check for installer then go
if (file_exists('install.php')) {
if (isset($_GET['install'])) {
@@ -45,9 +55,6 @@ if (file_exists('install.php')) {
if ((Session::exists('user_role')) and (Session::get('user_role') == 'admin' or Session::get('user_role') == 'editor')) {
// Monstra show this page :)
} else {
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
header('Retry-After: 600');
die (Text::toHtml(Option::get('maintenance_message')));
}
}
@@ -64,3 +71,7 @@ if (file_exists('install.php')) {
// Flush (send) the output buffer and turn off output buffering
ob_end_flush();
}
/* TEMP CODE BEGIN */
echo byteFormat(memory_get_usage() - $_start);
/* TEMP CODE END */

View File

@@ -10,20 +10,17 @@
if ( ! defined('BACKEND')) define('BACKEND', false);
if ( ! defined('MONSTRA_ACCESS')) define('MONSTRA_ACCESS', true);
// Set default timezone
$system_timezone = date_default_timezone_get();
// Load bootstrap file
require_once(ROOT . DS . 'engine' . DS . '_init.php');
// Get array with the names of all modules compiled and loaded
$php_modules = get_loaded_extensions();
// Get server port
if ($_SERVER["SERVER_PORT"] == "80") $port = ""; else $port = ':'.$_SERVER["SERVER_PORT"];
// Get site URL
$site_url = 'http://'.$_SERVER["SERVER_NAME"].$port.str_replace(array("index.php", "install.php"), "", $_SERVER['PHP_SELF']);
// Replace last slash in site_url
$site_url = rtrim($site_url, '/');
$site_url = 'http://'.$_SERVER["SERVER_NAME"].str_replace(array("index.php", "install.php"), "", $_SERVER['PHP_SELF']);
// Rewrite base
$rewrite_base = str_replace(array("index.php", "install.php"), "", $_SERVER['PHP_SELF']);
@@ -35,21 +32,16 @@
$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-yu', 'id', 'ja', 'zh-cn', 'tr');
$languages_array = array('en', 'ru', 'lt', 'it', 'de', 'pt-br', 'uk');
// 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);
Request::redirect($site_url);
}
} else {
Request::redirect($site_url.$action);
Request::redirect($site_url);
}
}
@@ -85,7 +77,6 @@
'slogan' => __('Site slogan', 'system'),
'defaultpage' => 'home',
'timezone' => Request::post('timezone'),
'system_email' => Request::post('email'),
'theme_site_name' => 'default',
'theme_admin_name' => 'default'));
@@ -110,8 +101,6 @@
// Installation done :)
header("location: index.php?install=done");
} else {
Notification::setNow('errors', $errors);
}
}
?>
@@ -122,119 +111,89 @@
<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" />
<link rel="icon" href="<?php echo $site_url; ?>favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="<?php echo $site_url; ?>favicon.ico" type="image/x-icon" />
<link rel="stylesheet" href="<?php echo $site_url; ?>public/assets/css/bootstrap.css" media="all" type="text/css" />
<link rel="stylesheet" href="<?php echo $site_url; ?>public/assets/css/bootstrap-responsive.css" media="all" type="text/css" />
<link rel="stylesheet" href="<?php echo $site_url; ?>admin/themes/default/css/default.css" media="all" type="text/css" />
<style>
.install-body {
margin-top: 40px;
background: #FAFAFA;
.input-xlarge {
width: 285px;
}
.install-languages {
margin: 20px auto 20px;
text-align: center;
width: 600px;
margin: 0 auto;
float: none!important;
margin-bottom:5px;
padding-right:20px;
max-width: 300px;
}
.install-block {
margin: 0 auto;
float: none!important;
max-width: 300px;
padding: 19px 29px 29px;
background: none repeat scroll 0 0 #fff;
-webkit-box-shadow: 0 1px 5px rgba(0,0,0,.15);
-moz-box-shadow: 0 1px 5px rgba(0,0,0,.15);
box-shadow: 0 1px 5px rgba(0,0,0,.15);
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.install-block,
.monstra-dialog,
.install-block-footer {
margin: 0 auto;
width: 600px;
float: none!important;
margin-top:10px;
margin-bottom:10px;
max-width: 300px;
}
.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;
.install-body {
background-color: #FBFBFB;
padding-top:40px;
}
.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 {
color:#7A7A7C;
}
.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+.language-link:before {
color: #ccc;
content: ' | ';
}
.language-link-current img {
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
filter: alpha(opacity=100);
-moz-opacity:1.0;
-khtml-opacity: 1.0;
opacity: 1.0;
.language-link:hover {
color:#000;
text-decoration: none;
}
.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;
.language-link-current {
color:#000;
font-weight: 700;
}
.continue {
width: 100%;
}
</style>
<script src="<?php echo $site_url; ?>/public/assets/js/jquery.min.js"></script>
<script src="<?php echo $site_url; ?>/public/assets/js/bootstrap.min.js"></script>
</head>
<body class="install-body">
<?php
if (version_compare(PHP_VERSION, "5.2.3", "<")) {
if (version_compare(PHP_VERSION, "5.2.0", "<")) {
$errors['php'] = 'error';
} else {
$errors['php'] = '';
@@ -282,260 +241,211 @@
$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 class="install-languages">
<?php foreach ($languages_array as $lang_code) {?>
<a class="language-link<?php if (Option::get('language') == $lang_code) echo ' language-link-current';?>" href="<?php echo $site_url.'?language=' . $lang_code; ?>"><?php echo $lang_code?></a>
<?php } ?>
</div>
</div>
<div class="install-block">
<div style="text-align:center;"><a class="brand" href="<?php echo Html::toText($site_url); ?>"><img src="<?php echo $site_url; ?>public/assets/img/monstra-logo.png" height="27" width="171" alt="Monstra"></a></div>
<hr>
<div>
<form action="install.php" method="post">
<input type="hidden" name="php" value="<?php echo $errors['php']; ?>" />
<input type="hidden" name="simplexml" value="<?php echo $errors['simplexml']; ?>" />
<input type="hidden" name="mod_rewrite" value="<?php echo $errors['mod_rewrite']; ?>" />
<input type="hidden" name="install" value="<?php echo $errors['install']; ?>" />
<input type="hidden" name="sitemap" value="<?php echo $errors['sitemap']; ?>" />
<input type="hidden" name="htaccess" value="<?php echo $errors['htaccess']; ?>" />
<input type="hidden" name="public" value="<?php echo $errors['public']; ?>" />
<input type="hidden" name="storage" value="<?php echo $errors['storage']; ?>" />
<input type="hidden" name="backups" value="<?php echo $errors['backups']; ?>" />
<input type="hidden" name="tmp" value="<?php echo $errors['tmp']; ?>" />
<div class="monstra-dialog <?php if(Request::get('action') && Request::get('action') == 'install') { ?>hide<?php } ?>">
<ul class="list-unstyled">
<?php
<label><?php echo __('Site name', 'system'); ?></label>
<input class="input-xlarge" name="sitename" type="text" value="<?php if (Request::post('sitename')) echo Html::toText(Request::post('sitename')); ?>" />
<br />
<label><?php echo __('Site url', 'system'); ?></label>
<input class="input-xlarge" name="siteurl" type="text" value="<?php echo Html::toText($site_url); ?>" />
<br />
<label><?php echo __('Username', 'users'); ?></label>
<input class="input-xlarge" class="login" name="login" value="<?php if(Request::post('login')) echo Html::toText(Request::post('login')); ?>" type="text" />
<br />
<label><?php echo __('Password', 'users'); ?></label>
<input class="input-xlarge" name="password" type="password" />
<br />
<label><?php echo __('Time zone', 'system'); ?></label>
<select class="input-xlarge" name="timezone">
<option value="Kwajalein">(GMT-12:00) International Date Line West</option>
<option value="Pacific/Samoa">(GMT-11:00) Midway Island, Samoa</option>
<option value="Pacific/Honolulu">(GMT-10:00) Hawaii</option>
<option value="America/Anchorage">(GMT-09:00) Alaska</option>
<option value="America/Los_Angeles">(GMT-08:00) Pacific Time (US &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>
if (version_compare(PHP_VERSION, "5.2.0", "<")) {
echo '<li class="error alert alert-danger">'.__('PHP 5.2 or greater is required', 'system').'</li>';
} else {
echo '<li class="ok alert alert-success">'.__('PHP Version', 'system').' '.PHP_VERSION.'</li>';
}
<label><?php echo __('Email', 'users'); ?></label>
<input name="email" class="input-xlarge" value="<?php if (Request::post('email')) echo Html::toText(Request::post('email')); ?>" type="text" />
<br /><br />
<input type="submit" class="btn" name="install_submit" value="<?php echo __('Install', 'system'); ?>" />
</form>
</div>
<hr>
<p align="center"><strong><?php echo __('...Monstra says...', 'system'); ?></strong></p>
<div>
<ul>
<?php
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 (version_compare(PHP_VERSION, "5.2.0", "<")) {
echo '<span class="error"><li>'.__('PHP 5.2 or greater is required', 'system').'</li></span>';
} else {
echo '<span class="ok"><li>'.__('PHP Version', 'system').' '.PHP_VERSION.'</li></span>';
}
if (in_array('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 (in_array('SimpleXML', $php_modules)) {
echo '<span class="ok"><li>'.__('Module SimpleXML is installed', 'system').'</li></span>';
} else {
echo '<span class="error"><li>'.__('SimpleXML module is required', 'system').'</li></span>';
}
if (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>';
}
if (in_array('dom', $php_modules)) {
echo '<span class="ok"><li>'.__('Module DOM is installed', 'system').'</li></span>';
} else {
echo '<span class="error"><li>'.__('Module DOM is required', 'system').'</li></span>';
}
foreach ($dir_array as $dir) {
if (is_writable($dir.'/')) {
echo '<li class="ok alert alert-success">'.__('Directory: <b> :dir </b> writable', 'system', array(':dir' => $dir)).'</li>';
} else {
echo '<li class="error alert alert-danger">'.__('Directory: <b> :dir </b> not writable', 'system', array(':dir' => $dir)).'</li>';
}
}
if (function_exists('apache_get_modules')) {
if ( ! in_array('mod_rewrite',apache_get_modules())) {
echo '<span class="error"><li>'.__('Apache Mod Rewrite is required', 'system').'</li></span>';
} else {
echo '<span class="ok"><li>'.__('Module Mod Rewrite is installed', 'system').'</li></span>';
}
} else {
echo '<span class="ok"><li>'.__('Module Mod Rewrite is installed', 'system').'</li></span>';
}
if (is_writable(__FILE__)) {
echo '<li class="ok alert alert-success">'.__('Install script writable', 'system').'</li>';
} else {
echo '<li class="error alert alert-danger">'.__('Install script not writable', 'system').'</li>';
}
foreach ($dir_array as $dir) {
if (is_writable($dir.'/')) {
echo '<span class="ok"><li>'.__('Directory: <b> :dir </b> writable', 'system', array(':dir' => $dir)).'</li></span>';
} else {
echo '<span class="error"><li>'.__('Directory: <b> :dir </b> not writable', 'system', array(':dir' => $dir)).'</li></span>';
}
}
if (is_writable('sitemap.xml')) {
echo '<li class="ok alert alert-success">'.__('Sitemap file writable', 'system').'</li>';
} else {
echo '<li class="error alert alert-danger">'.__('Sitemap file not writable', 'system').'</li>';
}
if (is_writable(__FILE__)) {
echo '<span class="ok"><li>'.__('Install script writable', 'system').'</li></span>';
} else {
echo '<span class="error"><li>'.__('Install script not writable', 'system').'</li></span>';
}
if (is_writable('.htaccess')) {
echo '<li class="ok alert alert-success">'.__('Main .htaccess file writable', 'system').'</li>';
} else {
echo '<li class="error alert alert-danger">'.__('Main .htaccess file not writable', 'system').'</li>';
}
if (is_writable('sitemap.xml')) {
echo '<span class="ok"><li>'.__('Sitemap file writable', 'system').'</li></span>';
} else {
echo '<span class="error"><li>'.__('Sitemap file not writable', 'system').'</li></span>';
}
if (isset($errors['sitename'])) echo '<li class="error">'.$errors['sitename'].'</li>';
if (isset($errors['siteurl'])) echo '<li class="error">'.$errors['siteurl'].'</li>';
if (isset($errors['login'])) echo '<li class="error">'.$errors['login'].'</li>';
if (isset($errors['password'])) echo '<li class="error">'.$errors['password'].'</li>';
if (isset($errors['email'])) echo '<li class="error">'.$errors['email'].'</li>';
if (isset($errors['email_valid'])) echo '<li class="error">'.$errors['email_valid'].'</li>';
?>
</ul>
<a href="install.php?action=install" class="btn btn-primary continue"><?php echo __('Continue', 'system'); ?></a>
</div>
<div class="install-block-footer login-footer">
<div class="text-center">
<span>© 2012 - 2014 <a href="http://monstra.org" class="small-grey-text" target="_blank">Monstra</a> <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?></span>
if (is_writable('.htaccess')) {
echo '<span class="ok"><li>'.__('Main .htaccess file writable', 'system').'</li></span>';
} else {
echo '<span class="error"><li>'.__('Main .htaccess file not writable', 'system').'</li></span>';
}
if (isset($errors['sitename'])) echo '<span class="error"><li>'.$errors['sitename'].'</li></span>';
if (isset($errors['siteurl'])) echo '<span class="error"><li>'.$errors['siteurl'].'</li></span>';
if (isset($errors['login'])) echo '<span class="error"><li>'.$errors['login'].'</li></span>';
if (isset($errors['password'])) echo '<span class="error"><li>'.$errors['password'].'</li></span>';
if (isset($errors['email'])) echo '<span class="error"><li>'.$errors['email'].'</li></span>';
if (isset($errors['email_valid'])) echo '<span class="error"><li>'.$errors['email_valid'].'</li></span>';
?>
</ul>
</div>
</div>
<div class="install-block-footer">
<div style="text-align:center">
<span class="small-grey-text">© 2012 - 2013 <a href="http://monstra.org" class="small-grey-text" target="_blank">Monstra</a> <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?></span>
</div>
</div>
</div>
<script type="text/javascript">
$('.language-link').tooltip();
$(document).ready(function() {
$('.continue').click(function() {
$('.monstra-dialog').addClass('hide');
$('.install-block').removeClass('hide');
});
});
</script>
</body>
</html>

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -71,12 +71,6 @@ class Agent
'infoseek',
'lycos',
'ia_archiver',
'yandex',
'mail.ru',
'ask.com',
'Copyscape.com',
'bing.com',
);
/**

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -22,14 +22,14 @@ class Cache
*
* @var string
*/
protected static $cache_dir = '';
public static $cache_dir = '';
/**
* Cache file ext
*
* @var string
*/
protected static $cache_file_ext = 'txt';
public static $cache_file_ext = 'txt';
/**
* Cache life time (in seconds)

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -58,7 +58,7 @@ class ClassLoader
/**
* Add class to mapping.
*
*
* <code>
* ClassLoader::mapClass('ClassName', 'path/to/class');
* </code>
@@ -74,7 +74,7 @@ class ClassLoader
/**
* Add multiple classes to mapping.
*
*
* <code>
* ClassLoader::mapClasses(array('ClassName' => 'path/to/class','ClassName' => 'path/to/class'));
* </code>
@@ -91,7 +91,7 @@ class ClassLoader
/**
* Adds a PSR-0 directory path.
*
*
* <code>
* ClassLoader::directory('path/to/classes');
* </code>
@@ -106,7 +106,7 @@ class ClassLoader
/**
* Registers a namespace.
*
*
* <code>
* ClassLoader::registerNamespace('Namespace', '/path/to/namespace/');
* </code>
@@ -122,9 +122,9 @@ class ClassLoader
/**
* Set an alias for a class.
*
*
* <code>
* ClassLoader::alias('ClassNameAlias', 'ClassName');
* ClassLoader::registerNamespace('ClassNameAlias', 'ClassName');
* </code>
*
* @access public
@@ -171,7 +171,7 @@ class ClassLoader
/**
* Autoloader.
*
*
* <code>
* ClassLoader::load();
* </code>
@@ -222,15 +222,4 @@ class ClassLoader
return false;
}
/**
* Register the Gelato ClassLoader to the SPL autoload stack.
*
* @return void
*/
public static function register()
{
spl_autoload_register('ClassLoader::load', true);
}
}

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -18,25 +18,6 @@
class ErrorHandler
{
/**
* Error Levels
*/
public static $levels = array (
E_ERROR => 'Fatal Error',
E_PARSE => 'Parse Error',
E_COMPILE_ERROR => 'Compile Error',
E_COMPILE_WARNING => 'Compile Warning',
E_STRICT => 'Strict Mode Error',
E_NOTICE => 'Notice',
E_WARNING => 'Warning',
E_RECOVERABLE_ERROR => 'Recoverable Error',
E_USER_NOTICE => 'Notice',
E_USER_WARNING => 'Warning',
E_USER_ERROR => 'Error',
/*E_DEPRECATED => 'Deprecated',*/ /* PHP 5.3 only */
/*E_USER_DEPRECATED => 'Deprecated'*/ /* PHP 5.3 only */
);
/**
* Protected constructor since this is a static class.
*
@@ -99,35 +80,11 @@ class ErrorHandler
* @param integer $line The line number where the error occurred
* @return boolean
*/
public static function error($code, $message, $file, $line)
public static function errorHandler($code, $message, $file, $line)
{
// If isset error_reporting and $code then throw new error exception
if ((error_reporting() & $code) !== 0) {
/**
* Dont thow NOTICE exception for PRODUCTION Environment. Just write to log.
*/
if (GELATO_DEVELOPMENT == false && $code == 8) {
// Get exception info
$error['code'] = $code;
$error['message'] = $message;
$error['file'] = $file;
$error['line'] = $line;
$error['type'] = 'ErrorException: ';
$codes = array (
E_USER_NOTICE => 'Notice',
);
$error['type'] .= in_array($error['code'], array_keys($codes)) ? $codes[$error['code']] : 'Unknown Error';
// Write to log
Log::write("{$error['type']}: {$error['message']} in {$error['file']} at line {$error['line']}");
} else {
throw new ErrorException($message, $code, 0, $file, $line);
}
throw new ErrorException($message, $code, 0, $file, $line);
}
// Don't execute PHP internal error handler
@@ -213,7 +170,7 @@ class ErrorHandler
if (isset($entry['file'])) {
$location['file'] = $entry['file'];
$location['line'] = $entry['line'];
$location['code'] = self::highlightCode($entry['file'], $entry['line']);
$location['code'] = static::highlightCode($entry['file'], $entry['line']);
}
/**
@@ -231,9 +188,9 @@ class ErrorHandler
}
/**
* Convert errors not caught by the error handler to ErrorExceptions.
* Convert errors not caught by the errorHandler to ErrorExceptions.
*/
public static function fatal()
public static function fatalErrorHandler()
{
$e = error_get_last();
@@ -253,54 +210,70 @@ class ErrorHandler
public static function exception($exception)
{
try {
// Empty output buffers
while(ob_get_level() > 0) ob_end_clean();
// Get exception info
$error['code'] = $exception->getCode();
$error['message'] = $exception->getMessage();
$error['file'] = $exception->getFile();
$error['line'] = $exception->getLine();
// Determine error type
if ($exception instanceof ErrorException) {
$error['type'] = 'ErrorException: ';
$error['type'] .= in_array($error['code'], array_keys(ErrorHandler::$levels)) ? ErrorHandler::$levels[$error['code']] : 'Unknown Error';
$codes = array
(
E_ERROR => 'Fatal Error',
E_PARSE => 'Parse Error',
E_COMPILE_ERROR => 'Compile Error',
E_COMPILE_WARNING => 'Compile Warning',
E_STRICT => 'Strict Mode Error',
E_NOTICE => 'Notice',
E_WARNING => 'Warning',
E_RECOVERABLE_ERROR => 'Recoverable Error',
/*E_DEPRECATED => 'Deprecated',*/
E_USER_NOTICE => 'Notice',
E_USER_WARNING => 'Warning',
E_USER_ERROR => 'Error',
/*E_USER_DEPRECATED => 'Deprecated'*/
);
$error['type'] .= in_array($error['code'], array_keys($codes)) ? $codes[$error['code']] : 'Unknown Error';
} else {
$error['type'] = get_class($exception);
}
// Write to log
Log::write("{$error['type']}: {$error['message']} in {$error['file']} at line {$error['line']}");
// @todo Write to error log
/*if () {
Write here
}*/
// Send headers and output
@header('Content-Type: text/html; charset=UTF-8');
if (GELATO_DEVELOPMENT) {
if (GELATO_DISPLAY_ERRORS) {
$error['backtrace'] = $exception->getTrace();
if ($exception instanceof ErrorException) {
$error['backtrace'] = array_slice($error['backtrace'], 1); //Remove call to error handler from backtrace
}
$error['backtrace'] = self::formatBacktrace($error['backtrace']);
$error['highlighted'] = self::highlightCode($error['file'], $error['line']);
$error['backtrace'] = static::formatBacktrace($error['backtrace']);
$error['highlighted'] = static::highlightCode($error['file'], $error['line']);
@header('HTTP/1.1 500 Internal Server Error');
Response::status(500);
include 'Resources/Views/Errors/exception.php';
} else {
@header('HTTP/1.1 500 Internal Server Error');
Response::status(500);
include 'Resources/Views/Errors/production.php';
}
} catch (Exception $e) {
// Empty output buffers
while(ob_get_level() > 0) ob_end_clean();
echo $e->getMessage() . ' in ' . $e->getFile() . ' (line ' . $e->getLine() . ').';

View File

@@ -4,17 +4,13 @@
<meta charset="utf-8">
<title>Error</title>
<style type="text/css">
body {
background: #F5F5F5;
padding: 0;
margin: 0;
}
#gelato-error {
background:#F5F5F5;
background:#eee;
color:0;
width:100%;
width:95%;
font-size:14px;
font-family:Verdana, Arial, Helvetica, "Nimbus Sans", FreeSans, Malayalam, sans-serif;
margin:20px auto;
}
#gelato-error pre {
@@ -25,17 +21,16 @@ body {
}
#gelato-error a {
color:#DC143C;
color:#cc0a0a;
text-decoration:none;
}
#gelato-error .error {
background:#DC143C;
background:#cc0a0a;
color:#fff;
font-size:24px;
font-weight:700;
padding:10px;
}
#gelato-error .body {
@@ -276,10 +271,7 @@ body {
<?php endforeach; ?>
</table>
</div>
<div style="padding-top:20px;padding-bottom:20px; padding-left:10px;">
<a href="http://monstra.org">MONSTRA</a>
<a href="http://gelato.monstra.org">GELATO</a>
</div>
<div style="padding-top:20px;padding-bottom:20px; padding-left:10px;"><a href="http://gelato.monstra.org">Gelato Library</a></div>
</div>
<script type="text/javascript">

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -203,26 +203,4 @@ class Dir
return $total_size;
}
/**
* Copy directory.
* <code>
* Dir::copy('source_folder_path', 'destination_folder_path);
* </code>
* @param $src
* @param $dst
*/
public static function copy($src, $dst) {
$dir = opendir($src);
@mkdir($dst);
while(false !== ( $file = readdir($dir)) ) {
if (( $file != '.' ) && ( $file != '..' )) {
if ( is_dir($src .'/'. $file) ) {
self::copy($src .'/'. $file, $dst .'/'. $file);
} else {
copy($src .'/'. $file,$dst .'/'. $file);
}
}
}
closedir($dir);
}
}

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -141,7 +141,7 @@ class Form
$attributes['type'] = 'text';
}
return '<input'.Html::attributes($attributes).'>';
return '<input'.Html::attributes($attributes).' />';
}
/**

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -18,46 +18,22 @@
/**
* The version of Gelato
*/
define('GELATO_VERSION', '1.0.3');
/**
* Define __DIR__ constant for PHP 5.2.x
*/
if ( ! defined('__DIR__')) {
define('__DIR__', dirname(__FILE__));
}
define('GELATO_VERSION', '1.0.0');
/**
* Display Gelato Errors or not ?
*/
if ( ! defined('GELATO_DEVELOPMENT')) {
define('GELATO_DEVELOPMENT', true);
if ( ! defined('GELATO_DISPLAY_ERRORS')) {
define('GELATO_DISPLAY_ERRORS', true);
}
/**
* Use Gelato Class Loader or not ?
* Display Gelato Autoloader or not ?
*/
if ( ! defined('GELATO_CLASS_LOADER')) {
define('GELATO_CLASS_LOADER', true);
if ( ! defined('GELATO_AUTOLOADER')) {
define('GELATO_AUTOLOADER', true);
}
/**
* Load Gelato Logger
*/
require_once __DIR__ . '/Log/Log.php';
/**
* Use Gelato Logger default path or not ?
*/
if ( ! defined('GELATO_LOGS_PATH')) {
define('GELATO_LOGS_PATH', __DIR__. '/_logs');
}
/**
* Configure Gelato Logger
*/
Log::configure('path', GELATO_LOGS_PATH);
/**
* Load Gelato Error Handler
*/
@@ -66,12 +42,12 @@ require_once __DIR__ . '/ErrorHandler/ErrorHandler.php';
/**
* Set Error Handler
*/
set_error_handler('ErrorHandler::error');
set_error_handler('ErrorHandler::errorHandler');
/**
* Set Fatal Error Handler
*/
register_shutdown_function('ErrorHandler::fatal');
register_shutdown_function('ErrorHandler::fatalErrorHandler');
/**
* Set Exception Handler
@@ -100,9 +76,7 @@ ClassLoader::mapClasses(array(
'Html' => __DIR__.'/Html/Html.php',
'Image' => __DIR__.'/Image/Image.php',
'Inflector' => __DIR__.'/Inflector/Inflector.php',
'MinifyCSS' => __DIR__.'/Minify/MinifyCSS.php',
'MinifyHTML' => __DIR__.'/Minify/MinifyHTML.php',
'MinifyJS' => __DIR__.'/Minify/MinifyJS.php',
'Minify' => __DIR__.'/Minify/Minify.php',
'Notification' => __DIR__.'/Notification/Notification.php',
'Number' => __DIR__.'/Number/Number.php',
'Registry' => __DIR__.'/Registry/Registry.php',
@@ -117,8 +91,8 @@ ClassLoader::mapClasses(array(
));
/**
* Register Gelato Class Loader
* Register Gelato Autoloader
*/
if (GELATO_CLASS_LOADER) {
ClassLoader::register();
if (GELATO_AUTOLOADER) {
spl_autoload_register('ClassLoader::load');
}

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -28,13 +28,6 @@ class Html
'accept', 'tabindex', 'accesskey', 'alt', 'title', 'class',
'style', 'selected', 'checked', 'readonly', 'disabled',
);
/**
* The registered custom macros.
*
* @var array
*/
public static $macros = array();
/**
* Protected constructor since this is a static class.
@@ -51,7 +44,7 @@ class Html
*
* <code>
*
* // Registering a Html macro
* // Registering a Htmlk macro
* Html::macro('my_element', function() {
* return '<element id="monstra">';
* });
@@ -61,7 +54,7 @@ class Html
*
*
* // Registering a Html macro with parameters
* Html::macro('my_element', function($id = '') {
* Html::macro('my_element', function(id = '') {
* return '<element id="'.$id.'">';
* });
*
@@ -157,7 +150,7 @@ class Html
*/
public static function br($num = 1)
{
return str_repeat("<br>",(int) $num);
return str_repeat("<br />",(int) $num);
}
/**
@@ -285,57 +278,8 @@ class Html
$attributes['src'] = $file;
$attributes['alt'] = (isset($attributes['alt'])) ? $attributes['alt'] : pathinfo($file, PATHINFO_FILENAME);
return '<img'.Html::attributes($attributes).'>';
}
/**
* Obfuscate an e-mail address to prevent spam-bots from sniffing it.
*
* <code>
* echo Html::email('gelato@monstra.org');
* </code>
*
* @param string $email
* @return string
*/
public static function email($email)
{
return str_replace('@', '&#64;', Html::obfuscate($email));
}
/**
* Obfuscate a string to prevent spam-bots from sniffing it.
*
* This method obfuscate the value, randomly convert each
* letter to its entity or hexadecimal representation, keeping a
* bot from sniffing the randomly obfuscated letters.
*
* <code>
* echo Html::obfuscate('gelato@monstra.org');
* </code>
*
* @param string $value
* @return string
*/
public static function obfuscate($value)
{
$safe = '';
foreach (str_split($value) as $letter) {
switch (rand(1, 3)) {
case 1:
$safe .= '&#'.ord($letter).';';
break;
case 2:
$safe .= '&#x'.dechex(ord($letter)).';';
break;
case 3:
$safe .= $letter;
}
}
return $safe;
}
return '<img'.Html::attributes($attributes).' />';
}
/**
* Convert html to plain text

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -173,10 +173,9 @@ class Image
public function resize($width, $height = null, $aspect_ratio = null)
{
// Redefine vars
$width = (int) $width;
$height = ($height === null) ? null : (int) $height;
$width = (int) $width;
$height = ($height === null) ? null : (int) $height;
$aspect_ratio = ($aspect_ratio === null) ? null : (int) $aspect_ratio;
$xpos = $ypos = 0;
// Resizes the image to {$width}% of the original size
if ($height === null) {
@@ -187,18 +186,13 @@ class Image
} else {
// Resizes the image to the smalles possible dimension while maintaining aspect ratio
if ($aspect_ratio === Image::AUTO || $aspect_ratio === null) {
if ($aspect_ratio === Image::AUTO) {
// Calculate smallest size based on given height and width while maintaining aspect ratio
$percentage = min(($width / $this->width), ($height / $this->height));
$new_width = round($this->width * $percentage);
$new_height = round($this->height * $percentage);
if ($aspect_ratio === null) {
$xpos = (int)(($width - $new_width) / 2);
$ypos = (int)(($height - $new_height) / 2);
}
// Resizes the image using the width to maintain aspect ratio
} elseif ($aspect_ratio === Image::WIDTH) {
@@ -222,28 +216,24 @@ class Image
}
}
$old_image = $this->image;
if ($aspect_ratio === null) {
$this->image = imagecreatetruecolor($width, $height);
} else {
$this->image = imagecreatetruecolor($new_width, $new_height);
}
if ($this->type === IMAGETYPE_PNG) {
$bgcolor = imagecolorallocatealpha($this->image, 0, 0, 0, 127);
} else {
$bgcolor = imagecolorallocate($this->image, 255, 255, 255);
}
imagefill($this->image, 0, 0, $bgcolor);
// Create a new true color image width new width and height
$resized = imagecreatetruecolor($new_width, $new_height);
// Copy and resize part of an image with resampling
imagecopyresampled($this->image, $old_image, $xpos, $ypos, 0, 0, $new_width, $new_height, $this->width, $this->height);
imagecopyresampled($resized, $this->image, 0, 0, 0, 0, $new_width, $new_height, $this->width, $this->height);
// Destroy an image
imagedestroy($old_image);
imagedestroy($this->image);
// Create a new true color image width new width and height
$this->image = imagecreatetruecolor($new_width, $new_height);
// Copy and resize part of an image with resampling
imagecopyresampled($this->image, $resized, 0, 0, 0, 0, $new_width, $new_height, $new_width, $new_height);
// Destroy an image
imagedestroy($resized);
// Save new width and height
$this->width = $new_width;
$this->height = $new_height;
@@ -269,28 +259,32 @@ class Image
// Redefine vars
$width = (int) $width;
$height = (int) $height;
$x = (int) $x;
$y = (int) $y;
$x = (int) $x;
$y = (int) $y;
// Calculate
if ($x + $width > $this->width) $width = $this->width - $x;
if ($y + $height > $this->height) $height = $this->height - $y;
if ($width <= 0 || $height <= 0) return false;
$old_image = $this->image;
// Create a new true color image
$this->image = imagecreatetruecolor($width, $height);
$transparent = imagecolorallocatealpha($this->image, 0, 0, 0, 127);
imagefill($this->image, 0, 0, $transparent);
$crop = imagecreatetruecolor($width, $height);
// Copy and resize part of an image with resampling
imagecopyresampled($this->image, $old_image, 0, 0, $x, $y, $width, $height, $width, $height);
imagecopyresampled($crop, $this->image, 0, 0, $x, $y, $this->width, $this->height, $this->width, $this->height);
// Destroy an image
imagedestroy($old_image);
imagedestroy($this->image);
// Create a new true color image
$this->image = imagecreatetruecolor($width, $height);
// Copy and resize part of an image with resampling
imagecopyresampled($this->image, $crop, 0, 0, 0, 0, $width, $height, $width, $height);
// Destroy an image
imagedestroy($crop);
// Save new width and height
$this->width = $width;
$this->height = $height;

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -1,63 +0,0 @@
<?php
/**
* Gelato Library
*
* This source file is part of the Gelato Library. More information,
* documentation and tutorials can be found at http://gelato.monstra.org
*
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
class Log
{
/**
* Path to the logs.
*
* @var string
*/
protected static $path = '';
/**
* Protected constructor since this is a static class.
*
* @access protected
*/
protected function __construct()
{
// Nothing here
}
/**
* Configure Log
*
* @access public
* @param string $setting The setting
* @param string $value The value
*/
public static function configure($setting, $value)
{
if (property_exists("log", $setting)) Log::$$setting = $value;
}
/**
* Writes message to log.
*
* @access public
* @param string $message The message to write to the log
* @return boolean
*/
public static function write($message)
{
return (bool) file_put_contents(rtrim(Log::$path, '/') . '/' . gmdate('Y_m_d') . '.log',
'[' . gmdate('d-M-Y H:i:s') . '] ' . $message . PHP_EOL,
FILE_APPEND);
}
}

View File

@@ -0,0 +1,93 @@
<?php
/**
* Gelato Library
*
* This source file is part of the Gelato Library. More information,
* documentation and tutorials can be found at http://gelato.monstra.org
*
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
class Minify
{
/**
* Protected constructor since this is a static class.
*
* @access protected
*/
protected function __construct()
{
// Nothing here
}
/**
* Minify html
*
* <code>
* echo Minify::html($buffer);
* </code>
*
* @param string $buffer html
* @return string
*/
public static function html($buffer)
{
return preg_replace('/^\\s+|\\s+$/m', '', $buffer);
}
/**
* Minify css
*
* <code>
* echo Minify::css($buffer);
* </code>
*
* @param string $buffer css
* @return string
*/
public static function css($buffer)
{
// Remove comments
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
// Remove tabs, spaces, newlines, etc.
$buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
// Preserve empty comment after '>' http://www.webdevout.net/css-hacks#in_css-selectors
$buffer = preg_replace('@>/\\*\\s*\\*/@', '>/*keep*/', $buffer);
// Preserve empty comment between property and value
// http://css-discuss.incutio.com/?page=BoxModelHack
$buffer = preg_replace('@/\\*\\s*\\*/\\s*:@', '/*keep*/:', $buffer);
$buffer = preg_replace('@:\\s*/\\*\\s*\\*/@', ':/*keep*/', $buffer);
// Remove ws around { } and last semicolon in declaration block
$buffer = preg_replace('/\\s*{\\s*/', '{', $buffer);
$buffer = preg_replace('/;?\\s*}\\s*/', '}', $buffer);
// Remove ws surrounding semicolons
$buffer = preg_replace('/\\s*;\\s*/', ';', $buffer);
// Remove ws around urls
$buffer = preg_replace('/url\\(\\s*([^\\)]+?)\\s*\\)/x', 'url($1)', $buffer);
// Remove ws between rules and colons
$buffer = preg_replace('/\\s*([{;])\\s*([\\*_]?[\\w\\-]+)\\s*:\\s*(\\b|[#\'"])/x', '$1$2:$3', $buffer);
// Minimize hex colors
$buffer = preg_replace('/([^=])#([a-f\\d])\\2([a-f\\d])\\3([a-f\\d])\\4([\\s;\\}])/i', '$1#$2$3$4$5', $buffer);
// Replace any ws involving newlines with a single newline
$buffer = preg_replace('/[ \\t]*\\n+\\s*/', "\n", $buffer);
return $buffer;
}
}

View File

@@ -1,241 +0,0 @@
<?php
/**
* Gelato Library
*
* This source file is part of the Gelato Library. More information,
* documentation and tutorials can be found at http://gelato.monstra.org
*
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @author Stephen Clay <steve@mrclay.org>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
class MinifyCSS
{
/**
* @var array
*/
protected $_options = null;
/**
* Are we "in" a hack? I.e. are some browsers targetted until the next comment?
*
* @var bool
*/
protected $_inHack = false;
/**
* Constructor
*
* @param array $options (currently ignored)
*/
private function __construct($options)
{
$this->_options = $options;
}
/**
* Minify a CSS string
*
* @param string $css
*
* @param array $options (currently ignored)
*
* @return string
*/
public static function process($css, $options = array())
{
$obj = new MinifyCSS($options);
return $obj->_process($css);
}
/**
* Minify a CSS string
*
* @param string $css
*
* @return string
*/
protected function _process($css)
{
$css = str_replace("\r\n", "\n", $css);
// preserve empty comment after '>'
// http://www.webdevout.net/css-hacks#in_css-selectors
$css = preg_replace('@>/\\*\\s*\\*/@', '>/*keep*/', $css);
// preserve empty comment between property and value
// http://css-discuss.incutio.com/?page=BoxModelHack
$css = preg_replace('@/\\*\\s*\\*/\\s*:@', '/*keep*/:', $css);
$css = preg_replace('@:\\s*/\\*\\s*\\*/@', ':/*keep*/', $css);
// apply callback to all valid comments (and strip out surrounding ws
$css = preg_replace_callback('@\\s*/\\*([\\s\\S]*?)\\*/\\s*@'
,array($this, '_commentCB'), $css);
// remove ws around { } and last semicolon in declaration block
$css = preg_replace('/\\s*{\\s*/', '{', $css);
$css = preg_replace('/;?\\s*}\\s*/', '}', $css);
// remove ws surrounding semicolons
$css = preg_replace('/\\s*;\\s*/', ';', $css);
// remove ws around urls
$css = preg_replace('/
url\\( # url(
\\s*
([^\\)]+?) # 1 = the URL (really just a bunch of non right parenthesis)
\\s*
\\) # )
/x', 'url($1)', $css);
// remove ws between rules and colons
$css = preg_replace('/
\\s*
([{;]) # 1 = beginning of block or rule separator
\\s*
([\\*_]?[\\w\\-]+) # 2 = property (and maybe IE filter)
\\s*
:
\\s*
(\\b|[#\'"-]) # 3 = first character of a value
/x', '$1$2:$3', $css);
// minimize hex colors
/*$css = preg_replace('/([^=])#([a-f\\d])\\2([a-f\\d])\\3([a-f\\d])\\4([\\s;\\}])/i'
, '$1#$2$3$4$5', $css);*/
// remove spaces between font families
$css = preg_replace_callback('/font-family:([^;}]+)([;}])/'
,array($this, '_fontFamilyCB'), $css);
$css = preg_replace('/@import\\s+url/', '@import url', $css);
// replace any ws involving newlines with a single newline
$css = preg_replace('/[ \\t]*\\n+\\s*/', "\n", $css);
// separate common descendent selectors w/ newlines (to limit line lengths)
$css = preg_replace('/([\\w#\\.\\*]+)\\s+([\\w#\\.\\*]+){/', "$1\n$2{", $css);
// Use newline after 1st numeric value (to limit line lengths).
$css = preg_replace('/
((?:padding|margin|border|outline):\\d+(?:px|em)?) # 1 = prop : 1st numeric value
\\s+
/x'
,"$1\n", $css);
// prevent triggering IE6 bug: http://www.crankygeek.com/ie6pebug/
$css = preg_replace('/:first-l(etter|ine)\\{/', ':first-l$1 {', $css);
return trim($css);
}
/**
* Replace what looks like a set of selectors
*
* @param array $m regex matches
*
* @return string
*/
protected function _selectorsCB($m)
{
// remove ws around the combinators
return preg_replace('/\\s*([,>+~])\\s*/', '$1', $m[0]);
}
/**
* Process a comment and return a replacement
*
* @param array $m regex matches
*
* @return string
*/
protected function _commentCB($m)
{
$hasSurroundingWs = (trim($m[0]) !== $m[1]);
$m = $m[1];
// $m is the comment content w/o the surrounding tokens,
// but the return value will replace the entire comment.
if ($m === 'keep') {
return '/**/';
}
if ($m === '" "') {
// component of http://tantek.com/CSS/Examples/midpass.html
return '/*" "*/';
}
if (preg_match('@";\\}\\s*\\}/\\*\\s+@', $m)) {
// component of http://tantek.com/CSS/Examples/midpass.html
return '/*";}}/* */';
}
if ($this->_inHack) {
// inversion: feeding only to one browser
if (preg_match('@
^/ # comment started like /*/
\\s*
(\\S[\\s\\S]+?) # has at least some non-ws content
\\s*
/\\* # ends like /*/ or /**/
@x', $m, $n)) {
// end hack mode after this comment, but preserve the hack and comment content
$this->_inHack = false;
return "/*/{$n[1]}/**/";
}
}
if (substr($m, -1) === '\\') { // comment ends like \*/
// begin hack mode and preserve hack
$this->_inHack = true;
return '/*\\*/';
}
if ($m !== '' && $m[0] === '/') { // comment looks like /*/ foo */
// begin hack mode and preserve hack
$this->_inHack = true;
return '/*/*/';
}
if ($this->_inHack) {
// a regular comment ends hack mode but should be preserved
$this->_inHack = false;
return '/**/';
}
// Issue 107: if there's any surrounding whitespace, it may be important, so
// replace the comment with a single space
return $hasSurroundingWs // remove all other comments
? ' '
: '';
}
/**
* Process a font-family listing and return a replacement
*
* @param array $m regex matches
*
* @return string
*/
protected function _fontFamilyCB($m)
{
// Issue 210: must not eliminate WS between words in unquoted families
$pieces = preg_split('/(\'[^\']+\'|"[^"]+")/', $m[1], null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
$out = 'font-family:';
while (null !== ($piece = array_shift($pieces))) {
if ($piece[0] !== '"' && $piece[0] !== "'") {
$piece = preg_replace('/\\s+/', ' ', $piece);
$piece = preg_replace('/\\s?,\\s?/', ',', $piece);
}
$out .= $piece;
}
return $out . $m[2];
}
}

View File

@@ -1,47 +0,0 @@
<?php
/**
* Gelato Library
*
* This source file is part of the Gelato Library. More information,
* documentation and tutorials can be found at http://gelato.monstra.org
*
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
class MinifyHTML
{
/**
* Minify html
*
* <code>
* echo MinifyHTML::process($html);
* </code>
*
* @param string $buffer html
* @return string
*/
public static function process($html)
{
// Remove HTML comments (not containing IE conditional comments).
$html = preg_replace_callback('/<!--([\\s\\S]*?)-->/', 'MinifyHTML::_comments', $html);
// Trim each line.
$html = preg_replace('/^\\s+|\\s+$/m', '', $html);
// Return HTML
return $html;
}
protected static function _comments($m)
{
return (0 === strpos($m[1], '[') || false !== strpos($m[1], '<![')) ? $m[0] : '';
}
}

View File

@@ -1,50 +0,0 @@
<?php
/**
* Gelato Library
*
* This source file is part of the Gelato Library. More information,
* documentation and tutorials can be found at http://gelato.monstra.org
*
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
class MinifyJS
{
/**
* Minify js
*
* <code>
* echo MinifyJS::process($js);
* </code>
*
* @param string $buffer html
* @return string
*/
public static function process($js)
{
// newlines > linefeed
$js = str_replace(array("\r\n", "\r", "\n"), "\n", $js);
// empty lines > collapse
$js = preg_replace('/^[ \t]*|[ \t]*$/m', '', $js);
$js = preg_replace('/\n+/m', "\n", $js);
$js = trim($js);
// redundant whitespace > remove
$js = preg_replace('/(?<=[{}\[\]\(\)=><&\|;:,\?!\+-])[ \t]*|[ \t]*(?=[{}\[\]\(\)=><&\|;:,\?!\+-])/i', '', $js);
$js = preg_replace('/[ \t]+/', ' ', $js);
// redundant semicolons (followed by another semicolon or closing curly bracket) > remove
$js = preg_replace('/;\s*(?=[;}])/s', '', $js);
// Return JS
return $js;
}
}

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -28,7 +28,7 @@ class Number
}
/**
* Convert bytes in 'KB','MB','GB','TiB','PiB'
* Convert bytes in 'kb','mb','gb','tb','pb'
*
* <code>
* echo Number::byteFormat(10000);
@@ -42,31 +42,9 @@ class Number
// Redefine vars
$size = (int) $size;
$unit = array('B', 'KB', 'MB', 'GB', 'TiB', 'PiB');
$unit = array('b', 'kb', 'mb', 'gb', 'tb', 'pb');
return @round($size/pow(1024, ($i=floor(log($size, 1024)))), 2).' '.$unit[($i < 0 ? 0 : $i)];
}
/**
* Convert 'KB','MB','GB' in bytes
*
* <code>
* echo Number::convertToBytes('10MB');
* </code>
*
* @param string $num Number to convert
* @return int
*/
public static function convertToBytes( $num ) {
$num = strtolower( $num );
$bytes = (int) $num;
if ( strpos( $num, 'k' ) !== false )
$bytes = intval( $num ) * 1024;
elseif ( strpos( $num, 'm' ) !== false )
$bytes = intval($num) * 1024 * 1024;
elseif ( strpos( $num, 'g' ) !== false )
$bytes = intval( $num ) * 1024 * 1024 * 1024;
return $bytes;
return @round($size/pow(1024, ($i=floor(log($size, 1024)))), 2).' '.$unit[$i];
}
/**

View File

@@ -4,6 +4,6 @@ Gelato is a PHP5 library for kickass Web Applications.
## Links
- [Site](http://gelato.monstra.org)
- [Github Repository](https://github.com/MonstrLab/gelato)
- [Github Repository](https://github.com/Monstra/gelato-library)
Copyright (C) 2013 Romanenko Sergey / Awilum [awilum@msn.com]
Copyright (C) 2012-2013 Romanenko Sergey / Awilum [awilum@msn.com]

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -27,7 +27,7 @@ class Registry
/**
* Checks if an object with this name is in the registry.
*
*
* <code>
* if (Registry::exists('var')) {
* // Do something...
@@ -44,7 +44,7 @@ class Registry
/**
* Registers a given value under a given name.
*
*
* <code>
* Registry::set('var', 'value');
* </code>
@@ -69,7 +69,7 @@ class Registry
/**
* Fetch an item from the registry.
*
*
* <code>
* $var = Registry::get('var', 'value');
* </code>

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -22,7 +22,7 @@ class Token
*
* @var string
*/
protected static $token_name = 'security_token';
public static $token_name = 'security_token';
/**
* Protected constructor since this is a static class.

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

@@ -9,7 +9,7 @@
* @package Gelato
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2013 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.

View File

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

View File

@@ -1,21 +1,3 @@
Gelato 1.0.3, 2013-04-03
Gelato 1.0.0, XXXX-XX-XX
------------------------
- Html Class: obfuscate() method added.
- Html Class: email() method added.
- Html Class: missing $macros var added.
Gelato 1.0.2, 2013-03-17
------------------------
- Added support for PHP 5.2.3
Gelato 1.0.1, 2013-03-05
------------------------
- New constant GELATO_CLASS_LOADER instead of GELATO_AUTOLOADER
- ErrorHanler Class Improvements.
- Log Class Improvements.
- ClassLoader: new method register() added.
- Define __DIR__ constant for PHP 5.2.x
Gelato 1.0.0, 2013-02-26
------------------------
- Initial release
- Initial release

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -218,4 +218,4 @@ The hypothetical commands `show w' and `show c' should show the appropriate part
You should also get your employer (if you work as a programmer) or school, if any, to sign a <20>copyright disclaimer<65> for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.

View File

@@ -1,40 +0,0 @@
Blog
================
### Usage
#### Get Post
<?php echo Blog::getPost(); ?>
#### Get Posts
<?php echo Blog::getPosts(); ?>
#### Get 5 Posts (could be any amount, 5 or 1 or 25):
<?php echo Blog::getPosts(5); ?>
#### Get related Posts
<?php echo Blog::getRelatedPosts(); ?>
#### Get 4 latest posts from Blog
<?php echo Blog::getPostsBlock(4); ?>
#### Get Tags&Keywords
<?php Blog::getTags(); ?>
#### Get Tags&Keywords for current page
<?php Blog::getTags(Page::slug()); ?>
Get Post Title
<?php echo Blog::getPostTitle(); ?>
### Shortcode for content
#### Divided post into 2 parts (short and full)
{cut}
Example:
<p>Best free themes for Monstra CMS at monstrathemes.com</p>
{cut}
<p>There is going to display your content as blog post =)</p>

View File

@@ -1,399 +0,0 @@
<?php
/**
* Blog plugin
*
* @package Monstra
* @subpackage Plugins
* @author Romanenko Sergey / Awilum
* @copyright 2012 Romanenko Sergey / Awilum
* @version 1.7.3
*
*/
// Register plugin
Plugin::register( __FILE__,
__('Blog', 'blog'),
__('Blog plugin for Monstra', 'blog'),
'1.7.3',
'Awilum',
'http://monstra.org/');
// Add action
Action::add('frontend_pre_render', 'Blog::_rss');
/**
* Blog Class
*/
class Blog {
/**
* Parrent page name(slug)
*
* @var string
*/
public static $parent_page_name = 'blog';
/**
* Get tags
*
* <code>
* echo Blog::getTags();
* </code>
*
* @return string
*/
public static function getTags($slug = null) {
// Display view
return View::factory('blog/views/frontend/tags')
->assign('tags', Blog::getTagsArray($slug))
->render();
}
/**
* Get breadcrumbs
*
* <code>
* echo Blog::breadcrumbs();
* </code>
*
* @return string
*/
public static function breadcrumbs() {
$current_page = Pages::$requested_page;
$parent_page = '';
if ($current_page !== 'error404') {
$page = Pages::$pages->select('[slug="'.$current_page.'"]', null);
if (trim($page['parent']) !== '') {
$parent = true;
$parent_page = Pages::$pages->select('[slug="'.$page['parent'].'"]', null);
} else {
$parent = false;
}
// Display view
View::factory('blog/views/frontend/breadcrumbs')
->assign('current_page', $current_page)
->assign('page', $page)
->assign('parent', $parent)
->assign('parent_page', $parent_page)
->display();
}
}
/**
* Get tags array
*
* <code>
* echo Blog::getTagsArray();
* </code>
*
* @return array
*/
public static function getTagsArray($slug = null) {
// Init vars
$tags = array();
$tags_string = '';
if ($slug == null) {
$posts = Pages::$pages->select('[parent="'.Blog::$parent_page_name.'" and status="published"]', 'all');
} else {
$posts = Pages::$pages->select('[parent="'.Blog::$parent_page_name.'" and status="published" and slug="'.$slug.'"]', 'all');
}
foreach($posts as $post) {
if (isset($post['tags'])) {
$tags_string .= $post['tags'].',';
}
}
$tags_string = substr($tags_string, 0, strlen($tags_string)-1);
// Explode tags in tags array
$tags = explode(',', $tags_string);
// Remove empty array elementss
foreach ($tags as $key => $value) {
if ($tags[$key] == '') {
unset($tags[$key]);
}
}
// Trim tags
array_walk($tags, create_function('&$val', '$val = trim($val);'));
// Get unique tags
$tags = array_unique($tags);
// Return tags
return $tags;
}
/**
* Get posts
*
* <code>
* // Get all posts
* echo Blog::getPosts();
*
* // Get last 5 posts
* echo Blog::getPosts(5);
* </code>
*
* @param integer $num Number of posts to show
* @return string
*/
public static function getPosts($nums = 10) {
// Get page param
$page = (Request::get('page')) ? (int)Request::get('page') : 1;
if (Request::get('tag')) {
$query = '[parent="'.Blog::$parent_page_name.'" and status="published" and contains(tags, "'.Request::get('tag').'")]';
Notification::set('tag', Request::get('tag'));
} else {
$query = '[parent="'.Blog::$parent_page_name.'" and status="published"]';
Notification::clean();
}
// Get Elements Count
$elements = count(Pages::$pages->select($query, 'all'));
// Get Pages Count
$pages = ceil($elements/$nums);
if ($page < 1) {
$page = 1;
} elseif ($page > $pages) {
$page = $pages;
}
$start = ($page-1)*$nums;
// If there is no posts
if ($start < 0) $start = 0;
// Get posts and sort by DESC
$posts = Pages::$pages->select($query, $nums, $start, array('slug', 'title', 'author', 'date'), 'date', 'DESC');
// Loop
foreach($posts as $key => $post) {
$post_short = explode("{cut}", Text::toHtml(File::getContent(STORAGE . DS . 'pages' . DS . $post['id'] . '.page.txt')));
$posts[$key]['content'] = Filter::apply('content', $post_short[0]);
}
// Display view
return View::factory('blog/views/frontend/index')
->assign('posts', $posts)
->render().
View::factory('blog/views/frontend/pager')
->assign('pages', $pages)
->assign('page', $page)
->render();
}
/**
* Get posts block
*
* <code>
* // Get all posts
* echo Blog::getPostsBlock();
*
* // Get last 5 posts
* echo Blog::getPostsBlock(5);
* </code>
*
* @param integer $num Number of posts to show
* @return string
*/
public static function getPostsBlock($nums = 10) {
// XPath Query
$query = '[parent="'.Blog::$parent_page_name.'" and status="published"]';
// Get posts and sort by DESC
$posts = Pages::$pages->select($query, $nums, 0, array('slug', 'title', 'author', 'date'), 'date', 'DESC');
// Loop
foreach($posts as $key => $post) {
$post_short = explode("{cut}", Text::toHtml(File::getContent(STORAGE . DS . 'pages' . DS . $post['id'] . '.page.txt')));
$posts[$key]['content'] = Filter::apply('content', $post_short[0]);
}
// Display view
return View::factory('blog/views/frontend/block')
->assign('posts', $posts)
->render();
}
/**
* Get related posts
*
* <code>
* echo Blog::getRelatedPosts();
* </code>
*
* @return string
*/
public static function getRelatedPosts($limit = null) {
$related_posts = array();
$tags = Blog::getTagsArray(Page::slug());
foreach($tags as $tag) {
$query = '[parent="'.Blog::$parent_page_name.'" and status="published" and contains(tags, "'.$tag.'") and slug!="'.Page::slug().'"]';
if ($result = Arr::subvalSort(Pages::$pages->select($query, ($limit == null) ? 'all' : (int)$limit), 'date', 'DESC')) {
$related_posts = $result;
}
}
// Display view
return View::factory('blog/views/frontend/related_posts')
->assign('related_posts', $related_posts)
->render();
}
/**
* Get post content
*
* <code>
* echo Blog::getPost();
* </code>
*
* @return string
*/
public static function getPost() {
// Get post
$post = Text::toHtml(File::getContent(STORAGE . DS . 'pages' . DS . Pages::$page['id'] . '.page.txt'));
// Apply content filter
$post = Filter::apply('content', $post);
// Remove {cut} shortcode
$post = strtr($post, array('{cut}' => ''));
// Return post
return $post;
}
/**
* Get post content before cut
*
* <code>
* echo Blog::getPostBeforeCut('home');
* </code>
*
* @return string
*/
public static function getPostBeforeCut($slug) {
$page = Pages::$pages->select('[slug="'.$slug.'"]', null);
// Get post
$post = explode("{cut}", Text::toHtml(File::getContent(STORAGE . DS . 'pages' . DS . $page['id'] . '.page.txt')));
// Apply content filter
$post_content = Filter::apply('content', $post[0]);
// Return post
return $post_content;
}
/**
* Get post content after cut
*
* <code>
* echo Blog::getPostAfterCut('home');
* </code>
*
* @return string
*/
public static function getPostAfterCut($slug) {
$page = Pages::$pages->select('[slug="'.$slug.'"]', null);
// Get post
$post = explode("{cut}", Text::toHtml(File::getContent(STORAGE . DS . 'pages' . DS . $page['id'] . '.page.txt')));
// Apply content filter
$post_content = Filter::apply('content', $post[1]);
// Return post
return $post_content;
}
/**
* Get Blog Post title
*
* <code>
* echo Blog::getPostTitle();
* </code>
*
* @return string
*/
public static function getPostTitle() {
return Page::title();
}
/**
* Get Blog Post Date
*
* <code>
* echo Blog::getPostDate();
* </code>
*
* @param string $format Date format
* @return string
*/
public static function getPostDate($format = 'Y-m-d') {
return Page::date($format);
}
/**
* Get author of current post
*
* <code>
* echo Blog::getPostAuthor();
* </code>
*
* @return string
*/
public static function getPostAuthor()
{
return Page::author();
}
/**
* _rss
*/
public static function _rss() {
if (Uri::segment(0) == 'rss') {
include PLUGINS . DS . 'blog' . DS . 'rss.php';
Request::shutdown();
}
}
}

View File

@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<root>
<plugin_location>plugins/blog/blog.plugin.php</plugin_location>
<plugin_status>active</plugin_status>
<plugin_priority>15</plugin_priority>
<plugin_name>Blog</plugin_name>
<plugin_description>Blog plugin for Monstra</plugin_description>
<plugin_version>1.7.3</plugin_version>
<plugin_author>Awilum</plugin_author>
<plugin_author_uri>http://monstra.org/</plugin_author_uri>
</root>

View File

@@ -1,12 +0,0 @@
<?php
return array(
'blog' => array(
'Blog' => 'Blog',
'Blog plugin for Monstra' => 'Blog plugin for Monstra',
'begin' => 'begin',
'end' => 'end',
'prev' => 'prev',
'next' => 'next',
)
);

View File

@@ -1,12 +0,0 @@
<?php
return array(
'blog' => array(
'Blog' => 'Blog',
'Blog plugin for Monstra' => 'Wtyczka Blog dla systemu Monstra',
'begin' => 'początek',
'end' => 'koniec',
'prev' => 'poprzedni',
'next' => 'następny',
)
);

View File

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

View File

@@ -1,12 +0,0 @@
<?php
return array(
'blog' => array(
'Blog' => 'Günce',
'Blog plugin for Monstra' => 'Monstra için günce eklentisi',
'begin' => 'Baş',
'end' => 'Son',
'prev' => 'Önceki',
'next' => 'Sonraki',
)
);

View File

@@ -1,34 +0,0 @@
<?php
// Get all posts for blog parent page/post
$posts = Pages::$pages->select('[parent="'.Blog::$parent_page_name.'" and status="published"]', 5, 0, array('slug', 'title', 'author', 'date'), 'date', 'DESC');
// Date now
$now = date("D, d M Y H:i:s T");
ob_end_clean();
?>
<?php header('Content-type: text/xml; charset="utf-8"'); ?>
<?php echo'<?xml version="1.0" encoding="utf-8"?>'."\n"; ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>MonstraCMS::BLOG::RSS</title>
<link><?php echo Option::get('siteurl'); ?>/blog</link>
<description>The latest updates for <?php echo Option::get('sitename'); ?>.</description>
<language>en-us</language>
<pubDate><?php echo $now; ?></pubDate>
<lastBuildDate><?php echo $now; ?></lastBuildDate>
<atom:link href="<?php echo Option::get('siteurl'); ?>/rss.php" rel="self" type="application/rss+xml" />
<generator>Monstra</generator>
<?php foreach ($posts as $post) { ?>
<item>
<title><?php echo $post['title']; ?></title>
<link><?php echo Option::get('siteurl').'/blog/'.$post['slug']; ?></link>
<guid><?php echo Option::get('siteurl').'/blog/'.$post['slug']; ?></guid>
<pubDate><?php echo Date::format($post['date'], 'd M Y'); ?></pubDate>
<description><![CDATA[<?php echo Text::toHtml(Text::cut(File::getContent(STORAGE . DS . 'pages' . DS . $post['id'] . '.page.txt'), 300)); ?>]]></description>
<author><?php echo $post['author']; ?></author>
</item>
<?php } ?>
</channel>
</rss>
<?php Response::status(200); ?>

View File

@@ -1,7 +0,0 @@
<?php foreach($posts as $post) { ?>
<h3 class="monstra-blog-title"><a href="<?php echo Option::get('siteurl'); ?>/<?php echo Blog::$parent_page_name; ?>/<?php echo $post['slug'] ?>"><?php echo $post['title']; ?></a></h3>
<small class="monstra-blog-date"><?php echo Date::format($post['date'], 'd M Y'); ?></small>
<div class="monstra-blog-post">
<?php echo $post['content']; ?>
</div>
<?php } ?>

View File

@@ -1,5 +0,0 @@
<?php if ($parent) { ?>
<a href="<?php echo Site::url()."/".$page['parent']; ?><?php if(Notification::get('tag')) { ?>?tag=<?php echo Notification::get('tag'); ?><?php } ?>"><?php echo $parent_page['title']; ?></a>&nbsp;<span>&rarr;</span>&nbsp;<a href="<?php echo Site::url().$page['parent'].'/'.$page['slug']; ?>"><?php echo $page['title']; ?></a>
<?php } else { ?>
<a href="<?php echo Site::url()."/".$page['slug']; ?><?php if(Notification::get('tag')) { ?>?tag=<?php echo Notification::get('tag'); ?><?php } ?>"><?php echo $page['title']; ?></a>
<?php } ?>

View File

@@ -1,7 +0,0 @@
<?php foreach($posts as $post) { ?>
<h3 class="monstra-blog-title"><a href="<?php echo Option::get('siteurl'); ?>/<?php echo Blog::$parent_page_name; ?>/<?php echo $post['slug'] ?>"><?php echo $post['title']; ?></a></h3>
<small class="monstra-blog-date"><?php echo Date::format($post['date'], 'd M Y'); ?> / <?php echo $post['author']; ?></small>
<div class="monstra-blog-post">
<?php echo $post['content']; ?>
</div>
<?php } ?>

View File

@@ -1,29 +0,0 @@
<br><br>
<?php
if (Request::get('tag')) $tag = '&tag='.Request::get('tag'); else $tag = '';
$neighbours = 6;
$left_neighbour = $page - $neighbours;
if ($left_neighbour < 1) $left_neighbour = 1;
$right_neighbour = $page + $neighbours;
if ($right_neighbour > $pages) $right_neighbour = $pages;
if ($page > 1) {
echo ' <a href="?page=1'.$tag.'">'.__('begin', 'blog').'</a> ... <a href="?page=' . ($page-1) . $tag.'"> '.__('prev', 'blog').'</a> ';
}
for ($i=$left_neighbour; $i<=$right_neighbour; $i++) {
if ($i != $page) {
echo ' <a href="?page=' . $i . $tag.'">' . $i . '</a> ';
} else {
echo ' <b>' . $i . '</b> ';
}
}
if ($page < $pages) {
echo ' <a href="?page=' . ($page+1) . $tag.'">'.__('next', 'blog').'</a> ... <a href="?page=' . $pages . $tag.'">'.__('end', 'blog').'</a> ';
}
?>

View File

@@ -1,7 +0,0 @@
<br><br>
<b><?php echo __('Related posts', 'blog'); ?>:</b>
<div>
<?php foreach($related_posts as $related_post) { ?>
<a href="<?php echo Option::get('siteurl'); ?>/<?php echo Blog::$parent_page_name; ?>/<?php echo $related_post['slug']; ?>"><?php echo $related_post['title']; ?></a><br>
<?php } ?>
</div>

View File

@@ -1,3 +0,0 @@
<?php foreach($tags as $tag) { ?>
<a href="<?php echo Option::get('siteurl'); ?>/<?php echo Blog::$parent_page_name; ?>?tag=<?php echo $tag; ?>" class="monstra-blog-tag"><span class="label label-primary"><?php echo $tag; ?></span></a>
<?php } ?>

View File

@@ -15,6 +15,8 @@ class BackupAdmin extends Backend
{
$backups_path = ROOT . DS . 'backups';
$backups_list = array();
// Create backup
// -------------------------------------
if (Request::post('create_backup')) {
@@ -30,18 +32,12 @@ class BackupAdmin extends Backend
$zip->readDir(STORAGE . DS, false);
// Add public folder
$zip->readDir(ROOT . DS . 'public' . DS, false);
if (Request::post('add_public_folder')) $zip->readDir(ROOT . DS . 'public' . DS, false);
// Add plugins folder
$zip->readDir(PLUGINS . DS, false, null, array(PLUGINS . DS . 'box'));
if (Request::post('add_plugins_folder')) $zip->readDir(PLUGINS . DS, false);
if ($zip->archive($backups_path . DS . Date::format(time(), "Y-m-d-H-i-s").'.zip')) {
Notification::set('success', __('Backup was created', 'backup'));
} else {
Notification::set('error', __('Backup was not created', 'backup'));
}
Request::redirect(Option::get('siteurl').'/admin/index.php?id=backup');
$zip->archive($backups_path . DS . Date::format(time(), "Y-m-d-H-i-s").'.zip');
} else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
}
@@ -52,13 +48,8 @@ class BackupAdmin extends Backend
if (Security::check(Request::get('token'))) {
if (File::delete($backups_path . DS . Request::get('delete_file'))) {
Notification::set('success', __('Backup was deleted', 'backup'));
} else {
Notification::set('error', __('Backup was not deleted', 'backup'));
}
Request::redirect(Option::get('siteurl').'/admin/index.php?id=backup');
File::delete($backups_path . DS . Request::get('delete_file'));
Request::redirect(Option::get('siteurl').'admin/index.php?id=backup');
} else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
}
@@ -71,34 +62,12 @@ class BackupAdmin extends Backend
} else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
}
// Restore backup
// -------------------------------------
if (Request::get('restore')) {
if (Security::check(Request::get('token'))) {
$tmp_dir = ROOT . DS . 'tmp' . DS . uniqid('backup_');
if (Dir::create($tmp_dir)) {
$file_locations = Zip::factory()->extract($backups_path . DS . Request::get('restore'), $tmp_dir);
if (!empty($file_locations)) {
Dir::copy($tmp_dir, ROOT . DS);
Notification::set('success', __('Backup was restored', 'backup'));
} else {
Notification::set('error', __('Unzip error', 'backup'));
}
} else {
Notification::set('error', __('Backup was not restored', 'backup'));
}
Request::redirect(Option::get('siteurl').'/admin/index.php?id=backup');
} else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
}
// Get backup list
$backups_list = File::scan($backups_path, '.zip');
// Display view
View::factory('box/backup/views/backend/index')
->assign('backups_list', File::scan($backups_path, '.zip'))
->assign('backups_list', $backups_list)
->display();
}
}

View File

@@ -6,7 +6,7 @@
* @package Monstra
* @subpackage Plugins
* @author Romanenko Sergey / Awilum
* @copyright 2012-2014 Romanenko Sergey / Awilum
* @copyright 2012-2013 Romanenko Sergey / Awilum
* @version 1.0.0
*
*/

View File

@@ -3,8 +3,8 @@
return array(
'backup' => array(
'Backups' => 'Backups',
'Backup' => 'Backup',
'Create Backup' => 'Erstelle Backup',
'Backup date' => 'Backup Datum',
'Create backup' => 'Erstelle Backup',
'Delete' => 'Löschen',
'storage' => 'Speicher',
'public' => 'Öffentliche',

View File

@@ -2,12 +2,10 @@
return array(
'backup' => array(
'Backups' => 'Backups',
'Backup' => 'Backup',
'Backup Date' => 'Backup Date',
'Create Backup' => 'Create Backup',
'Restore' => 'Restore',
'Delete' => 'Delete',
'Backups' => 'Backups',
'Backup date' => 'Backup date',
'Create backup' => 'Create backup',
'Delete' => 'Delete',
'storage' => 'storage',
'public' => 'public',
'plugins' => 'plugins',
@@ -15,12 +13,5 @@
'Actions' => 'Actions',
'Delete backup: :backup' => 'Delete backup: :backup',
'Creating...' => 'Creating...',
'Backup was created' => 'Backup was created',
'Backup was not created' => 'Backup was not created',
'Backup was deleted' => 'Backup was deleted',
'Backup was not deleted' => 'Backup was not deleted',
'Backup was restored' => 'Backup was restored',
'Unzip error' => 'Unzip error',
'Backup was not restored' => 'Backup was not restored',
)
);
);

View File

@@ -1,17 +0,0 @@
<?php
return array(
'backup' => array(
'Backups' => 'Backup',
'Backup date' => 'Backup dia',
'Create Backup' => 'Crear Backup',
'Delete' => 'Borrar',
'storage' => 'Almacen',
'public' => 'publico',
'plugins' => 'plugins',
'Size' => 'Tamaño',
'Actions' => 'Acciones',
'Delete backup: :backup' => 'Borrar Backup: :backup',
'Creating...' => 'Creando...',
)
);

View File

@@ -1,17 +0,0 @@
<?php
return array(
'backup' => array(
'Backups' => 'پشتیبان گیری',
'Backup Date' => 'تاریخ پشتیبان گیری',
'Create Backup' => 'ایجاد نسخه پشتیبان',
'Delete' => 'حذف',
'storage' => 'ذخیره سازی',
'public' => 'عمومی',
'plugins' => 'پلاگین',
'Size' => 'اندازه',
'Actions' => 'عملیات',
'Delete backup: :backup' => 'حذف نسخه پشتیبان: :backup',
'Creating...' => 'ایجاد...',
)
);

View File

@@ -1,17 +0,0 @@
<?php
return array(
'backup' => array(
'Backups' => 'Sauvegardes',
'Backup date' => 'Date de la sauvegarde',
'Create backup' => 'Créer une sauvegarde',
'Delete' => 'Supprimer',
'storage' => 'stockage',
'public' => 'public',
'plugins' => 'plugins',
'Size' => 'Taille',
'Actions' => 'Actions',
'Delete backup: :backup' => 'Supprimer la sauvegarde: :backup',
'Creating...' => 'Création...',
)
);

View File

@@ -1,17 +0,0 @@
<?php
return array(
'backup' => array(
'Backups' => 'Biztonsági mentések',
'Backup date' => 'Biztonsági mentés dátuma',
'Create Backup' => 'Biztonsági mentés készítése',
'Delete' => 'Töröl',
'storage' => 'tárol',
'public' => 'nyilvános',
'plugins' => 'pluginok',
'Size' => 'Méret',
'Actions' => 'Műveletek',
'Delete backup: :backup' => 'Biztonsági mentés törlése: :backup',
'Creating...' => 'Készítés...',
)
);

View File

@@ -1,17 +0,0 @@
<?php
return array(
'backup' => array(
'Backups' => 'Cadangan',
'Backup date' => 'Tanggal Cadangan',
'Create Backup' => 'Buat Cadangan',
'Delete' => 'Hapus',
'storage' => 'Penyimpanan',
'public' => 'Umum',
'plugins' => 'Plugins',
'Size' => 'Ukuran',
'Actions' => 'Tindakan',
'Delete backup: :backup' => 'Hapus Cadangan: :backup',
'Creating...' => 'Dibuat...',
)
);

View File

@@ -3,8 +3,8 @@
return array(
'backup' => array(
'Backups' => 'Backup',
'Backup' => 'Backup',
'Create Backup' => 'Crea Backup',
'Backup date' => 'Backup',
'Create backup' => 'Crea backup',
'Delete' => 'Elimina',
'storage' => 'dati',
'public' => 'pubblica',

View File

@@ -1,17 +0,0 @@
<?php
return array(
'backup' => array(
'Backups' => 'バックアップ',
'Backup Date' => 'バックアップ日',
'Create Backup' => 'バックアップの作成',
'Delete' => '削除',
'storage' => 'ストレージ',
'public' => '公開',
'plugins' => 'プラグイン',
'Size' => 'サイズ',
'Actions' => 'アクション',
'Delete backup: :backup' => 'バックアップの削除: :backup',
'Creating...' => '作成中...',
)
);

View File

@@ -3,8 +3,8 @@
return array(
'backup' => array(
'Backups' => 'Atsarginės kopijos',
'Backup' => 'Atsarginės kopijos data',
'Create Backup' => 'Sukurti atsarginę kopiją',
'Backup date' => 'Atsarginės kopijos data',
'Create backup' => 'Sukurti atsarginę kopiją',
'Delete' => 'Ištrinti',
'storage' => 'storage',
'public' => 'public',

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