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

1 Commits

Author SHA1 Message Date
Awilum
dc8ef1c489 Monstra MultiLanguage Development Init Commit 2016-04-10 20:42:34 +03:00
119 changed files with 1451 additions and 1801 deletions

View File

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

View File

@@ -1,20 +1,6 @@
Monstra 3.0.3, 2016-01-29
------------------------
- Improved Monstra Security
- Minimum PHP version for Monstra is 5.3.2
- Admin: Fixed 404 error when using certain server configurations
- Localization: Major Fixes for SR, KA-GE, and ES
- Install Script Fixes
Monstra 3.0.2, 2015-10-16
------------------------
- Added Monstra MIT LICENSE instead of GNU GENERAL PUBLIC LICENSE v3
- Code standards fixes.
- Localization: Major Fixes for ES and SR
Monstra 3.0.1, 2014-08-10
------------------------
- Minimum php is 5.3
- Minimum php is 5.3
- Themes Plugin: Imposible to create new CSS - fixed
- Themes Plugin: js and css counter does not recalculate - fixed
- Error in Monstra Notifications - fixed
@@ -38,7 +24,7 @@ Monstra 3.0.0, 2014-08-01
- 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
- 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
@@ -92,7 +78,7 @@ Monstra 2.3.0, 2013-12-19
- 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
- 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
@@ -149,7 +135,7 @@ Monstra 2.1.3, 2012-12-09
- Pages Plugin: add ability to get content for specific page.
- XMLDB: New method factory() added.
- Twitter Bootstrap updated to Version 2.2.2
- Sitemap Plugin: `_blank` removed.
- Sitemap Plugin: _blank removed.
- Filesmanager Plugin: fixes.
- Backup Plugin: fixes.
@@ -244,7 +230,7 @@ Monstra 2.0.0, 2012-10-09
- Users Plugin: Admin - New User Registration Validation - Fixed
- Users Plugin: Added ability to set "about me" information.
- Improved Password Reset Logic.
- Information Plugin: Added new tab "Server" with common server information.
- Information Plugin: Added new tab "Server" with common server information.
- Box Plugins: CSRF vulnerability resolved.
- Sitemap Plugin: Basic search engine optimization.
- Improved Menu Plugin. Added ability to manage items categories.
@@ -254,12 +240,12 @@ Monstra 2.0.0, 2012-10-09
- Dir Helper: Fixed size() method.
- New Default Theme: built with best frontend optimization practice.
- Options API: Updated get() method. Return empty string if option value doesnt exists.
- CSS variables: Added - @theme_site_url @theme_admin_url
- CSS variables: Added - @theme_site_url @theme_admin_url
- CSS variables: Deleted - @theme_url
- Themes Plugin: Added ability to create/edit/clone JavaScripts. Added ability to change admin theme in one click.
- Apply filter 'content' to Blocks.
- Apply filter 'content' to Blocks.
- Array Helper: get() method improved. New methods keyExists() isAssoc() set() delete() random() added.
- Plugin API: Fixed Javascript and Stylesheet class.
- Plugin API: Fixed Javascript and Stylesheet class.
- Plugin API: Added ability to set view file from current theme folder.
- New options theme_admin_name, theme_site_name, users_frontend_registration added.
- Form Helper: Custom Macros - added
@@ -279,10 +265,10 @@ Monstra 1.3.0, 2012-09-01
- Improve Default Monstra theme.
- Security: Fix Script Insertion Vulnerability.
- Blocks and Snippets plugins code fix. Issue #35, Issue #34
- XMLDB: new method updateField()
- Plugin API: path updates.
- XMLDB: new method updateField()
- Plugin API: path updates.
- Dir Helper: new method size()
- Filesmanager: shows directory size.
- Filesmanager: shows directory size.
- Security Helper: update safeName() method.
- Pages Plugin: new method children() Get children pages for a specific parent page.
- Update translates.
@@ -290,11 +276,11 @@ Monstra 1.3.0, 2012-09-01
Monstra 1.2.1, 2012-08-09
------------------------
- Admin styles: add .error class
- Admin styles: add .error class
- Fix translates
- Security: fix Cross Site Request Forgery
- Site Module: fix template() function
- Html Helper: fix nbsp() function
- Html Helper: fix nbsp() function
- Site Module: fix template() function
Monstra 1.2.0, 2012-07-03

View File

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

View File

@@ -1,11 +1,9 @@
# Monstra
Monstra is a modern and lightweight Content Management System.
[![Join the chat at https://gitter.im/monstra-cms/monstra](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/monstra-cms/monstra?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
# Monstra CMS
Monstra is a modern and lightweight Content Management System.
## System Requirements
Operation system: Unix, Linux, Windows, Mac OS
Middleware: PHP 5.3.2 or higher with PHP's [SimpleXML module](http://php.net/simplexml) and [Multibyte String module](http://php.net/mbstring)
Middleware: PHP 5.3.0 or higher with PHP's [SimpleXML module](http://php.net/simplexml) and [Multibyte String module](http://php.net/mbstring)
Webserver: Apache with [Mod Rewrite](http://httpd.apache.org/docs/current/mod/mod_rewrite.html) or Ngnix with [Rewrite Module](http://wiki.nginx.org/HttpRewriteModule)
## Steps to Install
@@ -21,14 +19,13 @@ Webserver: Apache with [Mod Rewrite](http://httpd.apache.org/docs/current/mod/mo
2. Donate to keep Monstra free. We will add you to Monstra [Sponsors Page.](http://monstra.org/contribute/sponsors)
3. Develop a new plugin.
4. Create a new theme.
5. Find and [report issues.](https://github.com/monstra-cms/monstra/issues)
5. Find and [report issues.](https://github.com/Awilum/monstra-cms/issues)
6. Link back to [Monstra](http://monstra.org).
## Links
- [Site](http://monstra.org)
- [Forum](http://forum.monstra.org)
- [Documentation](http://monstra.org/documentation)
- [Github Repository](https://github.com/monstra-cms/monstra)
- [Github Repository](https://github.com/Awilum/monstra-cms)
## License
See [LICENSE](https://github.com/monstra-cms/monstra/blob/master/LICENSE.md)
Copyright (C) 2012-2014 Romanenko Sergey / Awilum [awilum@msn.com]

View File

@@ -1,17 +1,20 @@
<?php
/**
* Monstra
* Monstra Engine
*
* @package Monstra
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @link http://monstra.org
* This source file is part of the Monstra Engine. More information,
* documentation and tutorials can be found at http://monstra.org
*
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
// Main engine defines
define('DS', DIRECTORY_SEPARATOR);
define('ROOT', rtrim(str_replace(array('admin'), array(''), dirname(__FILE__)), '\\/'));
@@ -29,9 +32,13 @@ $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')) {
@@ -57,6 +64,7 @@ if (Request::post('login_submit')) {
} else {
Cookie::set('login_attempts', 1, 600);
}
}
}
} else {
@@ -76,6 +84,7 @@ if (Request::post('login_submit')) {
}
Notification::setNow('error', $login_error);
}
// Errors
@@ -88,15 +97,10 @@ $user_login = trim(Request::post('login'));
// Reset Password Form Submit
if (Request::post('reset_password_submit')) {
if (Option::get('captcha_installed') == 'true' && ! CryptCaptcha::check(Request::post('answer'))) {
$errors['users_captcha_wrong'] = __('Captcha code is wrong', 'users');
}
if ($user_login == '') {
$errors['users_empty_field'] = __('Required field', 'users');
}
if ($user_login != '' && ! $users->select("[login='".$user_login."']")) {
$errors['users_user_doesnt_exists'] = __('This user doesnt exist', 'users');
}
if (Option::get('captcha_installed') == 'true' && ! CryptCaptcha::check(Request::post('answer'))) $errors['users_captcha_wrong'] = __('Captcha code is wrong', 'users');
if ($user_login == '') $errors['users_empty_field'] = __('Required field', 'users');
if ($user_login != '' && ! $users->select("[login='".$user_login."']")) $errors['users_user_doesnt_exists'] = __('This user doesnt exist', 'users');
if (count($errors) == 0) {
@@ -132,6 +136,7 @@ if (Request::post('reset_password_submit')) {
// Redirect to password-reset page
Request::redirect(Site::url().'/admin');
}
Notification::setNow('reset_password', 'reset_password');
@@ -156,7 +161,7 @@ if ($is_admin) {
if (Request::get('id')) {
$area = Request::get('id');
} else {
Request::redirect(Site::url().'/admin/index.php?id=dashboard');
Request::redirect('index.php?id=dashboard');
}
$plugins_registered = Plugin::$plugins;
@@ -179,10 +184,12 @@ if ($is_admin) {
// Backend post render
Action::run('admin_post_render');
} else {
// Display login template
require 'themes'. DS . Option::get('theme_admin_name') . DS . 'login.template.php';
}
// Flush (send) the output buffer and turn off output buffering

View File

@@ -12,24 +12,19 @@
*************************************/
@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');
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;
background: #FAFAFA;
}
h1,
h2,
h3,
h4,
h5 {
h1,h2,h3,h4,h5 {
color: #222;
}
@@ -38,7 +33,7 @@ h5 {
}
.error-field {
border: 1px solid red!important;
border:1px solid red!important;
}
.error-message {
@@ -46,29 +41,25 @@ h5 {
}
a.btn-expand {
font-size: 14px;
font-weight: bold;
padding-right: 4px;
padding-left: 4px;
text-decoration: none;
color: #333;
font-weight: bold;
font-size:14px;
text-decoration: none;
padding-left:4px;
padding-right:4px;
}
.btn:active,
.btn.active {
outline: 0;
background-image: none;
box-shadow: none;
background-image: none;
outline: 0;
box-shadow: none;
}
.login-footer,
.login-footer,
.login-footer a {
font-size: 12px;
color: #777;
color:#777;
font-size:12px;
}
footer {
@@ -77,19 +68,13 @@ footer {
footer,
footer a {
font-size: 12px;
color: #777;
color:#777;
font-size:12px;
}
footer span {
border-top: 1px solid #E0E0E0;
padding-top: 10px;
border-top: 1px solid #e0e0e0;
}
footer .highlight {
color: #333;
}
/*************************************
@@ -97,34 +82,31 @@ footer .highlight {
*************************************/
/* Well */
.well {
color: #555;
.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);
-webkit-font-smoothing: subpixel-antialiased;
}
.dashboard-well {
padding-top: 6px;
padding-bottom: 6px;
padding-top: 6px;
padding-bottom: 6px;
}
.dashboard-well a.welcome-back {
font-size: 16px;
padding-left: 0;
text-decoration: none;
color: #333;
text-decoration: none;
color: #333;
font-size: 16px;
padding-left: 0;
}
/* Admin Form */
.form-signin {
.form-signin {
max-width: 400px;
}
@@ -179,9 +161,8 @@ ul.navbar-nav {
.navbar-brand {
font-size: 24px;
line-height: inherit;
padding: 13px 15px;
line-height: inherit;
}
.navbar-inverse .navbar-nav > .open > a,
@@ -193,13 +174,12 @@ ul.navbar-nav {
.navbar-inverse .navbar-nav > .active > a,
.navbar-inverse .navbar-nav > .active > a:hover,
.navbar-inverse .navbar-nav > .active > a:focus {
background: #333;
background: #333;
}
a.navbar-brand {
font-weight: bold;
color: #fafafa!important;
color: #FAFAFA!important;
}
.navbar-nav .dropdown-menu {
@@ -213,17 +193,16 @@ a.navbar-brand {
.nav > li > a {
padding-top: 15px;
padding-right: 20px;
padding-bottom: 15px;
padding-left: 20px;
padding-right: 20px;
}
.nav > li > a > img {
width: 28px;
height: 28px;
margin: 0 0 0 4px;
border: 1px solid #888;
margin: 0 0 0 4px;
}
/* Flat Elements */
@@ -248,7 +227,6 @@ code {
pre,
code {
font-weight: normal;
text-shadow: none;
}
@@ -275,9 +253,9 @@ input[type="tel"],
input[type="color"],
.form-control,
.uneditable-input {
color: #3c3c3c;
border-color: #d0d0d0;
background-color: #fff;
color: #3c3c3c;
border-color: #d0d0d0;
background-color: #fff;
}
select:focus,
textarea:focus,
@@ -299,8 +277,8 @@ input[type="color"]: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;
-moz-box-shadow: 0 0 8px #dce1e5;
box-shadow: 0 0 8px #dce1e5;
}
/* Datapicker */
@@ -310,8 +288,8 @@ input[type="color"]:focus,
/* Breadcrumb */
.breadcrumb {
border-radius: 0px;
background: #fff;
border-radius: 0px;
}
/* Tabs */
@@ -324,7 +302,7 @@ input[type="color"]:focus,
}
.tab-pane > table {
border-top: none!important;
border-top:none!important;
}
.tab-content {
@@ -332,20 +310,17 @@ input[type="color"]:focus,
}
.tab-page {
border-bottom: 1px solid #DDDDDD;
border-left: 1px solid #DDDDDD;
border-right: 1px solid #DDDDDD;
padding: 20px 10px 10px;
border-right: 1px solid #dddddd;
border-bottom: 1px solid #dddddd;
border-left: 1px solid #dddddd;
}
/* Tables */
table {
max-width: 100%;
border-spacing: 0;
border-collapse: collapse;
border-spacing: 0;
background-color: transparent;
}
.table {
@@ -354,12 +329,9 @@ table {
}
.table th,
.table td {
line-height: 18px;
padding: 8px;
line-height: 18px;
text-align: left;
border-top: 1px solid #dddddd;
background: #fff;
}
@@ -383,11 +355,9 @@ table {
padding: 4px 5px;
}
.table-bordered {
border-collapse: separate;
border: 1px solid #dddddd;
border-left: 0;
border-collapse: separate;
*border-collapse: collapsed;
}
.table-bordered th:first-child,
@@ -396,7 +366,7 @@ table {
}
.table-bordered td:first-child {
padding-left: 15px;
padding-left:15px;
}
.table-bordered thead:first-child tr:first-child th,
@@ -406,8 +376,7 @@ table {
}
.table-bordered thead tr th {
font-weight: bold;
font-weight:bold;
background-color: #fff;
}
@@ -433,19 +402,16 @@ table {
.table-bordered th,
.table-bordered td {
height: 50px;
border-left: none;
height: 50px;
}
.table-bordered > thead > tr {
height: 45px;
}
td,
th {
td, th {
display: table-cell;
vertical-align: inherit!important;
}
@@ -455,27 +421,25 @@ th {
.table-bordered > thead > tr > td,
.table-bordered > tbody > tr > td,
.table-bordered > tfoot > tr > td {
border: 0;
border: 0;
border-bottom: 1px solid #ccc;
}
.vertical-align {
display: table;
width: 100%;
}
.vertical-align > div {
display: table-cell;
vertical-align: middle;
}
.vertical-align > div > h1,
.vertical-align > div > h1,
.vertical-align > div > h2,
.vertical-align > div > h3,
.vertical-align > div > h4,
.vertical-align > div > h5 {
.vertical-align > div > h5 {
margin-top: 10px;
margin-bottom: 10px;
}
@@ -498,19 +462,17 @@ th {
/* 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;
height: 400px!important;
padding: 6px 9px;
color: #555;
border: 1px solid #ccc;
}
.markItUpHeader ul li {
padding: 5px;
padding: 5px;
}
.markItUpHeader ul .markItUpSeparator {
@@ -518,7 +480,7 @@ th {
}
.modal-header {
border-bottom: 1px solid #f3f3f3;
border-bottom: 1px solid #F3F3F3;
}
.modal-header .close {
@@ -526,17 +488,16 @@ th {
}
.modal-footer {
border-top: 1px solid #f3f3f3;
border-top: 1px solid #F3F3F3;
}
.drop-file-here {
margin-left: 4px;
padding: 5px 40px;
color: #ccc;
border: 3px dashed #d5d5d5;
background: #ccc;
margin-left: 4px;
background: #f7f7f7;
border: 3px dashed #D5D5D5;
color: #ccc;
}
.modal-backdrop {
@@ -548,8 +509,8 @@ th {
}
.modal-content {
border: none;
box-shadow: none;
border: none;
}
#readme .modal-dialog {
@@ -571,8 +532,8 @@ th {
@media (max-width: 480px) {
/* MarkItUp */
.markItUpButton11,
.markItUpButton12,
.markItUpButton11,
.markItUpButton12,
.markItUpButton13,
.markItUpButton14,
.markItUpButton15,
@@ -581,7 +542,7 @@ th {
.markItUpButton18 {
display: none;
}
.markItUpSeparator {
.markItUpSeparator{
display: none;
}
@@ -591,29 +552,25 @@ th {
}
.dashboard-well .col-xs-6 .pull-right {
float: left!important;
}
}
.btn-phone {
width: 100%;
}
.row-phone {
display: block!important;
width: 100%!important;
text-align: left!important;
}
/* Users */
.users-btns > div {
display: block;
width: 100%;
margin-top: 10px;
display: block;
text-align: left;
margin-top: 10px;
width: 100%;
}
.users-btns > div:nth-child(2) {
@@ -634,25 +591,24 @@ th {
@media (max-width: 320px) {
.mobile-nav-tabs .nav-tabs > li {
width: 100%;
width: 100%;
height: 46px;
margin: 0px;
margin: 0px;
}
.mobile-nav-tabs .nav-tabs > li > a {
border: 0;
background: #fff;
}
.mobile-nav-tabs .nav-tabs > li.active > a,
.mobile-nav-tabs .nav-tabs > li.active > a:hover,
.mobile-nav-tabs .nav-tabs > li.active > a:focus {
color: #fff;
border: 0;
}
.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 {

View File

@@ -2,12 +2,12 @@
<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" />
@@ -27,8 +27,8 @@
<!-- 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>
<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); ?>
@@ -41,9 +41,9 @@
$('.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",
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"
});
@@ -53,7 +53,7 @@
increaseArea: '20%'
});
});
});
</script>
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
@@ -65,7 +65,7 @@
<body class="page-<?php echo Request::get('id'); ?>">
<nav class="navbar navbar-default navbar-inverse" role="navigation">
<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">
@@ -77,33 +77,33 @@
<a class="navbar-brand" href="<?php echo Site::url(); ?>/admin/index.php?id=dashboard">MONSTRA</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li<?php if (Request::get('id') == 'dashboard') { ?> class="active"<?php } ?>><a href="<?php echo Site::url(); ?>/admin/index.php?id=dashboard"><?php echo __('Dashboard', 'dashboard'); ?></a></li>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li<?php if (Request::get('id') == 'dashboard') { ?> class="active"<?php } ?>><a href="<?php echo Site::url(); ?>/admin/index.php?id=dashboard"><?php echo __('Dashboard', 'dashboard'); ?></a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo __('Content', 'pages'); ?> <b class="caret"></b></a>
<ul class="dropdown-menu">
<?php Navigation::draw('content'); ?>
</ul>
</li>
<?php if (Session::exists('user_role') && in_array(Session::get('user_role'), array('admin'))) { ?>
<?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'); ?>
<?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'); ?>
<?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>
<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 { ?>
@@ -111,23 +111,23 @@
<?php } ?>
</ul>
</li>
</ul>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a href="<?php echo Site::url(); ?>" target="_blank"><?php echo __('View Site', 'system'); ?></a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo Session::get('user_login'); ?> <img src="<?php echo Users::getGravatarURL(Session::get('user_email'), 28); ?>" alt=""> <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="<?php echo Site::url(); ?>/admin/index.php?id=users&action=edit&user_id=<?php echo Session::get('user_id'); ?>"><?php echo __('Profile', 'users')?></a></li>
<li><a href="<?php echo Site::url(); ?>/admin/?logout=do"><?php echo __('Log Out', 'users'); ?></a></li>
<li><a href="<?php echo Site::url(); ?>/admin/?logout=do"><?php echo __('Log Out', 'users'); ?></a></li>
</ul>
</li>
</ul>
</ul>
</div>
</div>
</nav>
<div class="container">
<?php
// Monstra Notifications
Notification::get('success') AND Alert::success(Notification::get('success'));
@@ -156,7 +156,13 @@
<footer class="container visible-md visible-lg">
<p class="pull-right">
<span>
<a href="http://monstra.org" target="_blank">Monstra</a> was made by <a href="http://awilum.github.io" target="_blank" class="highlight">Sergey Romanenko</a> and is maintained by <a href="https://github.com/monstra-cms/monstra/network/members" target="_blank" class="highlight">Monstra Community</a> / © 2012 - 2016 <a href="http://monstra.org/about/license" target="_blank">Monstra</a> <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?>
<?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>

View File

@@ -21,7 +21,7 @@
<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>
<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); ?>
@@ -92,7 +92,7 @@
<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; ?>" />
<input name="login" class="form-control" type="text" value="<?php echo $user_login; ?>" />
</div>
<?php if (Option::get('captcha_installed') == 'true') { ?>
<div class="form-group">
@@ -128,8 +128,11 @@
</div>
<div class="text-center">
© 2012 - 2016 <a href="http://monstra.org/about/license" target="_blank">Monstra</a> <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?>
<span>© 2012 - 2014 <a href="http://monstra.org" class="small-grey-text" target="_blank">Monstra</a> <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?></span>
</div>
</div>
</body>
</html>

View File

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

View File

@@ -1,17 +1,20 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/**
* Monstra
* Monstra Engine
*
* @package Monstra
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @link http://monstra.org
* This source file is part of the Monstra Engine. More information,
* documentation and tutorials can be found at http://monstra.org
*
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
class Alert
{
/**
@@ -45,7 +48,7 @@ class Alert
type: "success",
message : "'.$message.'",
hideAfter: '.$seconds.'
});
});
</script>';
}
@@ -68,9 +71,9 @@ class Alert
echo '<script type="text/javascript">
Messenger().post({
type: "info",
message : "'.$message.'",
message : "'.$message.'",
hideAfter: '.$seconds.'
});
});
</script>';
}
@@ -93,9 +96,10 @@ class Alert
echo '<script type="text/javascript">
Messenger().post({
type: "error",
message : "'.$message.'",
message : "'.$message.'",
hideAfter: '.$seconds.'
});
});
</script>';
}
}

View File

@@ -1,11 +1,19 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/**
* Monstra
* Monstra Engine
*
* @package Monstra
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @link http://monstra.org
* Monstra - Content Management System.
* Site: www.mostra.org
* Copyright (C) 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
*
* This source file is part of the Monstra Engine. More information,
* documentation and tutorials can be found at http://monstra.org
*
* @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.
@@ -31,7 +39,7 @@ class Monstra
/**
* The version of Monstra
*/
const VERSION = '3.0.3';
const VERSION = '3.0.1';
/**
@@ -77,9 +85,7 @@ class Monstra
* Compress HTML with gzip
*/
if (MONSTRA_GZIP) {
if (! ob_start("ob_gzhandler")) {
ob_start();
}
if ( ! ob_start("ob_gzhandler")) ob_start();
} else {
ob_start();
}
@@ -88,19 +94,16 @@ class Monstra
* Send default header and set internal encoding
*/
header('Content-Type: text/html; charset=UTF-8');
function_exists('mb_language') and mb_language('uni');
function_exists('mb_regex_encoding') and mb_regex_encoding('UTF-8');
function_exists('mb_internal_encoding') and mb_internal_encoding('UTF-8');
function_exists('mb_language') AND mb_language('uni');
function_exists('mb_regex_encoding') AND mb_regex_encoding('UTF-8');
function_exists('mb_internal_encoding') AND mb_internal_encoding('UTF-8');
/**
* Gets the current configuration setting of magic_quotes_gpc
* and kill magic quotes
*/
if (get_magic_quotes_gpc()) {
function stripslashesGPC(&$value)
{
$value = stripslashes($value);
}
function stripslashesGPC(&$value) { $value = stripslashes($value); }
array_walk_recursive($_GET, 'stripslashesGPC');
array_walk_recursive($_POST, 'stripslashesGPC');
array_walk_recursive($_COOKIE, 'stripslashesGPC');
@@ -117,7 +120,7 @@ class Monstra
/**
* Define Monstra Folder for Gelato Logs
*/
define('GELATO_LOGS_PATH', LOGS);
define ('GELATO_LOGS_PATH', LOGS);
/**
* Include Gelato Library
@@ -206,11 +209,7 @@ class Monstra
* Set default timezone
*/
@ini_set('date.timezone', Option::get('timezone'));
if (function_exists('date_default_timezone_set')) {
date_default_timezone_set(Option::get('timezone'));
} else {
putenv('TZ='.Option::get('timezone'));
}
if (function_exists('date_default_timezone_set')) date_default_timezone_set(Option::get('timezone')); else putenv('TZ='.Option::get('timezone'));
/**
* Sanitize URL to prevent XSS - Cross-site scripting
@@ -225,7 +224,11 @@ class Monstra
/**
* Init I18n
*/
I18n::init(Option::get('language'));
if (BACKEND) {
I18n::init('admin', Option::get('language'));
} else {
I18n::init('site', Site::getCurrentSiteLocale());
}
/**
* Init Plugins API
@@ -236,13 +239,11 @@ class Monstra
* Init Notification service
*/
Notification::init();
/**
* Init site module
*/
if (! BACKEND) {
Site::init();
}
if ( ! BACKEND) Site::init();
}
/**
@@ -303,6 +304,7 @@ class Monstra
} else {
throw new RuntimeException("The pluggable shortcodes.php file does not exist.");
}
}
/**
@@ -311,20 +313,13 @@ class Monstra
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);
}
}
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);
}
}
if (count($namespaces = Dir::scan(CACHE)) > 0) foreach ($namespaces as $namespace) Dir::delete(CACHE . DS . $namespace);
}
/**
* Initialize Monstra Engine
*
@@ -332,9 +327,8 @@ class Monstra
*/
public static function init()
{
if (! isset(self::$instance)) {
self::$instance = new Monstra();
}
if ( ! isset(self::$instance)) self::$instance = new Monstra();
return self::$instance;
}
}

View File

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

View File

@@ -1,17 +1,20 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/**
* Monstra
* Monstra Engine
*
* @package Monstra
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @link http://monstra.org
* This source file is part of the Monstra Engine. More information,
* documentation and tutorials can be found at http://monstra.org
*
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
class Action
{
/**
@@ -99,15 +102,23 @@ class Action
} else {
call_user_func_array($action['function'], $args);
}
} else {
if ($return) {
return call_user_func_array($action['function'], $action['args']);
} else {
call_user_func_array($action['function'], $action['args']);
}
}
}
}
}
}
}

View File

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

View File

@@ -1,17 +1,20 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/**
* Monstra
* Monstra Engine
*
* @package Monstra
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @link http://monstra.org
* This source file is part of the Monstra Engine. More information,
* documentation and tutorials can be found at http://monstra.org
*
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
class Filter
{
/**
@@ -49,12 +52,12 @@ class Filter
$args = array_slice(func_get_args(), 2);
if (! isset(Filter::$filters[$filter_name])) {
if ( ! isset(Filter::$filters[$filter_name])) {
return $value;
}
foreach (Filter::$filters[$filter_name] as $priority => $functions) {
if (! is_null($functions)) {
if ( ! is_null($functions)) {
foreach ($functions as $function) {
$all_args = array_merge(array($value), $args);
$function_name = $function['function'];
@@ -117,4 +120,5 @@ class Filter
return true;
}
}

View File

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

View File

@@ -1,17 +1,20 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/**
* Monstra
* Monstra Engine
*
* @package Monstra
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @link http://monstra.org
* This source file is part of the Monstra Engine. More information,
* documentation and tutorials can be found at http://monstra.org
*
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
class I18n
{
/**
@@ -33,7 +36,6 @@ class I18n
'fi' => 'Suomi',
'fr' => 'Français',
'gl' => 'Galego',
'ka-ge' => 'Georgian',
'hu' => 'Magyar',
'it' => 'Italiano',
'id' => 'Bahasa Indonesia',
@@ -48,10 +50,10 @@ class I18n
'sk' => 'Slovenčina',
'sl' => 'Slovenščina',
'sv' => 'Svenska',
'sr' => 'Srpski',
'sr-yu' => 'Serbian',
'tr' => 'Türkçe',
'uk' => 'Українська',
'zh-cn' => '简体中文',
'zh-cn' => '中文',
);
/**
@@ -73,11 +75,9 @@ class I18n
*
* @param string $dir Plugins directory
*/
public static function init($locale)
public static function init($namespace = 'default', $locale)
{
if (! isset(self::$instance)) {
self::$instance = new I18n($locale);
}
if ( ! isset(self::$instance)) self::$instance = new I18n($namespace, $locale);
return self::$instance;
}
@@ -94,13 +94,13 @@ class I18n
/**
* Construct
*/
protected function __construct($locale)
protected function __construct($namespace = 'default', $locale)
{
// Redefine arguments
$locale = (string) $locale;
// Get lang table for current locale
$lang_table = Cache::get('i18n', $locale);
$lang_table = Cache::get('i18n_'.$namespace, $locale);
// If lang_table is empty then create new
if (! $lang_table) {
@@ -116,6 +116,7 @@ class I18n
// Loop through each installed plugin
foreach ($records as $record) {
if (is_dir(ROOT . DS . dirname($record['location']) . DS . 'languages')) {
// Init var
@@ -126,6 +127,7 @@ class I18n
// Merge the language strings into the sub table
$t = array_merge($t, include ROOT . DS . dirname($record['location']) . DS . 'languages' . DS . $locale . '.lang.php');
}
// Append the sub table, preventing less specific language files from overloading more specific files
@@ -134,7 +136,7 @@ class I18n
}
// Save lang table for current locale
Cache::put('i18n', $locale, $lang_table);
Cache::put('i18n_'.$namespace, $locale, $lang_table);
// Update dictionary
I18n::$dictionary = $lang_table;
@@ -162,12 +164,9 @@ class I18n
$string = (string) $string;
// Return string
if (isset(I18n::$dictionary[$namespace][$string])) {
return I18n::$dictionary[$namespace][$string];
} else {
return $string;
}
if (isset(I18n::$dictionary[$namespace][$string])) return I18n::$dictionary[$namespace][$string]; else return $string;
}
}
/**

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,17 +1,20 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/**
* Monstra
* Monstra Engine
*
* @package Monstra
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @link http://monstra.org
* This source file is part of the Monstra Engine. More information,
* documentation and tutorials can be found at http://monstra.org
*
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
class Security
{
/**
@@ -97,7 +100,7 @@ class Security
*/
public static function encryptPassword($password)
{
return md5(md5(trim($password) . MONSTRA_PASSWORD_SALT));
return md5(md5(trim($password) . MONSTRA_PASSWORD_SALT));
}
/**
@@ -153,13 +156,11 @@ class Security
}
// Lowercase
if ($lowercase === true) {
$str = Text::lowercase($str);
}
if ($lowercase === true) $str = Text::lowercase($str);
// Return safe name
return $str;
}
}
/**
* Create safe url.
@@ -175,9 +176,9 @@ class Security
{
$url = trim($url);
$url = rawurldecode($url);
$url = str_replace(array('--', '&quot;', '!', '@', '#', '$', '%', '^', '*', '(', ')', '+', '{', '}', '|', ':', '"', '<', '>',
'[', ']', '\\', ';', "'", ',', '*', '+', '~', '`', 'laquo', 'raquo', ']>', '&#8216;', '&#8217;', '&#8220;', '&#8221;', '&#8211;', '&#8212;'),
array('-', '-', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''),
$url = str_replace(array('--','&quot;','!','@','#','$','%','^','*','(',')','+','{','}','|',':','"','<','>',
'[',']','\\',';',"'",',','*','+','~','`','laquo','raquo',']>','&#8216;','&#8217;','&#8220;','&#8221;','&#8211;','&#8212;'),
array('-','-','','','','','','','','','','','','','','','','','','','','','','','','','','',''),
$url);
$url = str_replace('--', '-', $url);
$url = rtrim($url, "-");
@@ -188,7 +189,7 @@ class Security
$url = preg_replace('/^\./', '', $url);
return $url;
}
}
/**
* Sanitize URL to prevent XSS - Cross-site scripting
@@ -236,4 +237,5 @@ class Security
// Return safe string
return $str;
}
}

View File

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

View File

@@ -1,17 +1,20 @@
<?php defined('MONSTRA_ACCESS') or die('No direct script access.');
/**
* Monstra
* Monstra Engine
*
* @package Monstra
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @link http://monstra.org
* This source file is part of the Monstra Engine. More information,
* documentation and tutorials can be found at http://monstra.org
*
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
class Site
{
/**
@@ -28,9 +31,7 @@ class Site
*/
public static function init()
{
if (! isset(self::$instance)) {
self::$instance = new Site();
}
if ( ! isset(self::$instance)) self::$instance = new Site();
return self::$instance;
}
@@ -172,20 +173,20 @@ class Site
// else return default template: index
// also compress template file :)
if (File::exists(THEMES_SITE . DS . $current_theme . DS . $template . '.template.php')) {
if (! file_exists(MINIFY . DS . 'theme.' . $current_theme . '.minify.' . $template . '.template.php') or
if ( ! file_exists(MINIFY . DS . 'theme.' . $current_theme . '.minify.' . $template . '.template.php') or
filemtime(THEMES_SITE . DS . $current_theme . DS . $template .'.template.php') > filemtime(MINIFY . DS . 'theme.' . $current_theme . '.minify.' . $template . '.template.php')) {
$buffer = file_get_contents(THEMES_SITE. DS . $current_theme . DS . $template .'.template.php');
$buffer = MinifyHTML::process($buffer);
file_put_contents(MINIFY . DS . 'theme.' . $current_theme . '.minify.' . $template . '.template.php', $buffer);
$buffer = file_get_contents(THEMES_SITE. DS . $current_theme . DS . $template .'.template.php');
$buffer = MinifyHTML::process($buffer);
file_put_contents(MINIFY . DS . 'theme.' . $current_theme . '.minify.' . $template . '.template.php', $buffer);
}
return 'minify.'.$template;
} else {
if (! File::exists(MINIFY . DS . 'theme.' . $current_theme . '.' . 'minify.index.template.php') or
if ( ! File::exists(MINIFY . DS . 'theme.' . $current_theme . '.' . 'minify.index.template.php') or
filemtime(THEMES_SITE . DS . $current_theme . DS . 'index.template.php') > filemtime(MINIFY . DS . 'theme.' . $current_theme . '.' . 'minify.index.template.php')) {
$buffer = file_get_contents(THEMES_SITE . DS . $current_theme . DS . 'index.template.php');
$buffer = MinifyHTML::process($buffer);
file_put_contents(MINIFY . DS . 'theme.' . $current_theme . '.' . 'minify.index.template.php', $buffer);
$buffer = file_get_contents(THEMES_SITE . DS . $current_theme . DS . 'index.template.php');
$buffer = MinifyHTML::process($buffer);
file_put_contents(MINIFY . DS . 'theme.' . $current_theme . '.' . 'minify.index.template.php', $buffer);
}
return 'minify.index';
@@ -219,4 +220,39 @@ class Site
{
return __('Powered by', 'system').' <a href="http://monstra.org" target="_blank">Monstra</a> ' . Monstra::VERSION;
}
/**
*
*/
public static function getLocales() {
$language_files = File::scan(PLUGINS_BOX . DS . 'system' . DS . 'languages' . DS, '.lang.php');
foreach ($language_files as $language) {
$parts = explode('.', $language);
$languages_array[$parts[0]] = I18n::$locales[$parts[0]];
}
return $languages_array;
}
/**
*
*/
public static function getDefaultSiteLocale() {
return Option::get('site_language');
}
/**
*
*/
public static function getCurrentSiteLocale() {
$site_locales = Site::getLocales();
if (Uri::segment(0) && array_key_exists(Uri::segment(0), $site_locales)) {
return Uri::segment(0);
} else {
$site_locale = Cookie::get('site_locale');
return !empty($site_locale) ? $site_locale : Option::get('site_language');
}
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -4,7 +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.'" />'."\n"; }

View File

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

View File

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

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

@@ -1,17 +1,20 @@
<?php
/**
* Monstra
* Monstra Engine
*
* @package Monstra
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @link http://monstra.org
* This source file is part of the Monstra Engine. More information,
* documentation and tutorials can be found at http://monstra.org
*
* @package Monstra
*
* @author Romanenko Sergey / Awilum <awilum@msn.com>
* @copyright 2012-2014 Romanenko Sergey / Awilum <awilum@msn.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
// Main engine defines
define('DS', DIRECTORY_SEPARATOR);
define('ROOT', rtrim(dirname(__FILE__), '\\/'));
@@ -35,6 +38,18 @@ if (file_exists('install.php')) {
// Load Engine init file
require_once ROOT. DS . 'engine'. DS . '_init.php';
/*
$pages = new Table('pages');
$pages_list = $pages->select(null, 'all');
foreach($pages_list as $page) {
$pages->update($page['id'], array('locale' => 'en'));
}
*/
// Option::add('site_language', 'ru');
// Check for maintenance mod
if ('on' == Option::get('maintenance_status')) {
@@ -45,7 +60,7 @@ if (file_exists('install.php')) {
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')));
die (Text::toHtml(Option::get('maintenance_message')));
}
}

210
install.php Executable file → Normal file
View File

@@ -5,18 +5,10 @@
*/
// Main engine defines
if (! defined('DS')) {
define('DS', DIRECTORY_SEPARATOR);
}
if (! defined('ROOT')) {
define('ROOT', rtrim(dirname(__FILE__), '\\/'));
}
if (! defined('BACKEND')) {
define('BACKEND', false);
}
if (! defined('MONSTRA_ACCESS')) {
define('MONSTRA_ACCESS', true);
}
if ( ! defined('DS')) define('DS', DIRECTORY_SEPARATOR);
if ( ! defined('ROOT')) define('ROOT', rtrim(dirname(__FILE__), '\\/'));
if ( ! defined('BACKEND')) define('BACKEND', false);
if ( ! defined('MONSTRA_ACCESS')) define('MONSTRA_ACCESS', true);
// Load bootstrap file
require_once(ROOT . DS . 'engine' . DS . '_init.php');
@@ -24,13 +16,9 @@
// 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 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']);
@@ -47,7 +35,7 @@
$dir_array = array('public', 'storage', 'backups', 'tmp');
// Languages array
$languages_array = array('en', 'ru', 'fr', 'de', 'it', 'es', 'lt', 'pl', 'pt-br', 'hu', 'fa' , 'sk', 'uk', 'nl', 'sr', 'id', 'ja', 'zh-cn', 'tr');
$languages_array = array('en', 'ru', 'fr', 'de', 'it', 'es', 'lt', 'pl', 'pt-br', 'hu', 'fa' , 'sk', 'uk', 'nl', 'sr-yu', 'id', 'ja', 'zh-cn', 'tr');
// Select Monstra language
if (Request::get('language')) {
@@ -67,54 +55,23 @@
// If pressed <Install> button then try to install
if (Request::post('install_submit')) {
if (Request::post('sitename') == '') {
$errors['sitename'] = __('Field "Site name" is empty', 'system');
}
if (Request::post('siteurl') == '') {
$errors['siteurl'] = __('Field "Site url" is empty', 'system');
}
if (Request::post('login') == '') {
$errors['login'] = __('Field "Username" is empty', 'system');
}
if (Request::post('password') == '') {
$errors['password'] = __('Field "Password" is empty', 'system');
}
if (Request::post('email') == '') {
$errors['email'] = __('Field "Email" is empty', 'system');
}
if (! Valid::email(Request::post('email'))) {
$errors['email_valid'] = __('Email not valid', 'system');
}
if (trim(Request::post('php') !== '')) {
$errors['php'] = true;
}
if (trim(Request::post('simplexml') !== '')) {
$errors['simplexml'] = true;
}
if (trim(Request::post('mod_rewrite') !== '')) {
$errors['mod_rewrite'] = true;
}
if (trim(Request::post('htaccess') !== '')) {
$errors['htaccess'] = true;
}
if (trim(Request::post('sitemap') !== '')) {
$errors['sitemap'] = true;
}
if (trim(Request::post('install') !== '')) {
$errors['install'] = true;
}
if (trim(Request::post('public') !== '')) {
$errors['public'] = true;
}
if (trim(Request::post('storage') !== '')) {
$errors['storage'] = true;
}
if (trim(Request::post('backups') !== '')) {
$errors['backups'] = true;
}
if (trim(Request::post('tmp') !== '')) {
$errors['tmp'] = true;
}
if (Request::post('sitename') == '') $errors['sitename'] = __('Field "Site name" is empty', 'system');
if (Request::post('siteurl') == '') $errors['siteurl'] = __('Field "Site url" is empty', 'system');
if (Request::post('login') == '') $errors['login'] = __('Field "Username" is empty', 'system');
if (Request::post('password') == '') $errors['password'] = __('Field "Password" is empty', 'system');
if (Request::post('email') == '') $errors['email'] = __('Field "Email" is empty', 'system');
if ( ! Valid::email(Request::post('email'))) $errors['email_valid'] = __('Email not valid', 'system');
if (trim(Request::post('php') !== '')) $errors['php'] = true;
if (trim(Request::post('simplexml') !== '')) $errors['simplexml'] = true;
if (trim(Request::post('mod_rewrite') !== '')) $errors['mod_rewrite'] = true;
if (trim(Request::post('htaccess') !== '')) $errors['htaccess'] = true;
if (trim(Request::post('sitemap') !== '')) $errors['sitemap'] = true;
if (trim(Request::post('install') !== '')) $errors['install'] = true;
if (trim(Request::post('public') !== '')) $errors['public'] = true;
if (trim(Request::post('storage') !== '')) $errors['storage'] = true;
if (trim(Request::post('backups') !== '')) $errors['backups'] = true;
if (trim(Request::post('tmp') !== '')) $errors['tmp'] = true;
// If errors is 0 then install cms
if (count($errors) == 0) {
@@ -147,14 +104,14 @@
$htaccess = file_get_contents('.htaccess');
$save_htaccess_content = str_replace("/%siteurlhere%/", $rewrite_base, $htaccess);
$handle = fopen('.htaccess', "w");
$handle = fopen ('.htaccess', "w");
fwrite($handle, $save_htaccess_content);
fclose($handle);
// Installation done :)
header("location: index.php?install=done");
} else {
Notification::setNow('errors', $errors);
} else {
Notification::setNow('errors', $errors);
}
}
?>
@@ -187,7 +144,7 @@
.monstra-dialog,
.install-block-footer {
margin: 0 auto;
width: 600px;
width: 600px;
}
.install-block-footer {
@@ -195,7 +152,7 @@
margin-bottom: 20px;
}
.well {
.well {
border: none;
border-radius: 0px;
background: #fff;
@@ -243,7 +200,7 @@
.language-link img {
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
filter: alpha(opacity=30);
filter: alpha(opacity=30);
-khtml-opacity: 0.3;
-moz-opacity:0.3;
opacity: 0.3;
@@ -277,26 +234,26 @@
<?php
if (version_compare(PHP_VERSION, "5.3.2", "<")) {
if (version_compare(PHP_VERSION, "5.2.3", "<")) {
$errors['php'] = 'error';
} else {
$errors['php'] = '';
}
if (in_array('SimpleXML', $php_modules)) {
$errors['simplexml'] = '';
$errors['simplexml'] = '';
} else {
$errors['simplexml'] = 'error';
$errors['simplexml'] = 'error';
}
if (function_exists('apache_get_modules')) {
if (! in_array('mod_rewrite', apache_get_modules())) {
if ( ! in_array('mod_rewrite', apache_get_modules())) {
$errors['mod_rewrite'] = 'error';
} else {
$errors['mod_rewrite'] = '';
$errors['mod_rewrite'] = '';
}
} else {
$errors['mod_rewrite'] = '';
$errors['mod_rewrite'] = '';
}
if (is_writable(__FILE__)) {
@@ -337,40 +294,24 @@
$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
} ?>">
<?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>
?>
<li class="error alert alert-danger"><?php echo $error; ?></li>
<?php
}
}
}
?>
</ul>
@@ -389,9 +330,7 @@
<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'));
} ?>" />
<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">
@@ -401,9 +340,7 @@
<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" />
<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">
@@ -505,27 +442,22 @@
<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>
<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>
</div>
</form>
</div>
</div>
<div class="monstra-dialog <?php if (Request::get('action') && Request::get('action') == 'install') {
?>hide<?php
} ?>">
<div class="monstra-dialog <?php if(Request::get('action') && Request::get('action') == 'install') { ?>hide<?php } ?>">
<ul class="list-unstyled">
<?php
if (version_compare(PHP_VERSION, "5.3.2", "<")) {
echo '<li class="error alert alert-danger">'.__('PHP 5.3.2 or greater is required', 'system').'</li>';
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>';
}
@@ -543,7 +475,7 @@
}
if (function_exists('apache_get_modules')) {
if (! in_array('mod_rewrite', 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>';
@@ -578,38 +510,26 @@
echo '<li class="error alert alert-danger">'.__('Main .htaccess file not writable', 'system').'</li>';
}
if (isset($errors['sitename'])) {
echo '<li class="error">'.$errors['sitename'].'</li>';
}
if (isset($errors['siteurl'])) {
echo '<li class="error">'.$errors['siteurl'].'</li>';
}
if (isset($errors['login'])) {
echo '<li class="error">'.$errors['login'].'</li>';
}
if (isset($errors['password'])) {
echo '<li class="error">'.$errors['password'].'</li>';
}
if (isset($errors['email'])) {
echo '<li class="error">'.$errors['email'].'</li>';
}
if (isset($errors['email_valid'])) {
echo '<li class="error">'.$errors['email_valid'].'</li>';
}
if (isset($errors['sitename'])) echo '<li class="error">'.$errors['sitename'].'</li>';
if (isset($errors['siteurl'])) echo '<li class="error">'.$errors['siteurl'].'</li>';
if (isset($errors['login'])) echo '<li class="error">'.$errors['login'].'</li>';
if (isset($errors['password'])) echo '<li class="error">'.$errors['password'].'</li>';
if (isset($errors['email'])) echo '<li class="error">'.$errors['email'].'</li>';
if (isset($errors['email_valid'])) echo '<li class="error">'.$errors['email_valid'].'</li>';
?>
</ul>
<a href="install.php?action=install" class="btn btn-primary continue"><?php echo __('Continue', 'system'); ?></a>
</div>
<div class="install-block-footer login-footer">
<div class="text-center">
<span>© 2012 - 2016 <a href="http://monstra.org" class="small-grey-text" target="_blank">Monstra</a> <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?></span>
<span>© 2012 - 2014 <a href="http://monstra.org" class="small-grey-text" target="_blank">Monstra</a> <?php echo __('Version', 'system'); ?> <?php echo Monstra::VERSION; ?></span>
</div>
</div>
<script type="text/javascript">
$('.language-link').tooltip();
$(document).ready(function() {
$('.continue').click(function() {
$('.monstra-dialog').addClass('hide');

View File

@@ -64,14 +64,17 @@ class Blog {
*
* @return string
*/
public static function breadcrumbs() {
public static function breadcrumbs($locale = '') {
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
$current_page = Pages::$requested_page;
$parent_page = '';
if ($current_page !== 'error404') {
$page = Pages::$pages->select('[slug="'.$current_page.'"]', null);
$page = Pages::$pages->select('[slug="'.$current_page.'" and locale="'.$locale.'"]', null);
if (trim($page['parent']) !== '') {
$parent = true;
$parent_page = Pages::$pages->select('[slug="'.$page['parent'].'"]', null);
$parent_page = Pages::$pages->select('[slug="'.$page['parent'].'" and locale="'.$locale.'"]', null);
} else {
$parent = false;
}
@@ -96,16 +99,18 @@ class Blog {
*
* @return array
*/
public static function getTagsArray($slug = null) {
public static function getTagsArray($slug = null, $locale='') {
// Init vars
$tags = array();
$tags_string = '';
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
if ($slug == null) {
$posts = Pages::$pages->select('[parent="'.Blog::$parent_page_name.'" and status="published"]', 'all');
$posts = Pages::$pages->select('[parent="'.Blog::$parent_page_name.'" and status="published" and locale="'.$locale.'"]', 'all');
} else {
$posts = Pages::$pages->select('[parent="'.Blog::$parent_page_name.'" and status="published" and slug="'.$slug.'"]', 'all');
$posts = Pages::$pages->select('[parent="'.Blog::$parent_page_name.'" and status="published" and slug="'.$slug.'" and locale="'.$locale.'"]', 'all');
}
foreach($posts as $post) {
@@ -151,16 +156,18 @@ class Blog {
* @param integer $num Number of posts to show
* @return string
*/
public static function getPosts($nums = 10) {
public static function getPosts($nums = 10, $locale = '') {
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
// Get page param
$page = (Request::get('page')) ? (int)Request::get('page') : 1;
if (Request::get('tag')) {
$query = '[parent="'.Blog::$parent_page_name.'" and status="published" and contains(tags, "'.Request::get('tag').'")]';
$query = '[parent="'.Blog::$parent_page_name.'" and status="published" and locale="'.$locale.'" and contains(tags, "'.Request::get('tag').'")]';
Notification::set('tag', Request::get('tag'));
} else {
$query = '[parent="'.Blog::$parent_page_name.'" and status="published"]';
$query = '[parent="'.Blog::$parent_page_name.'" and status="published" and locale="'.$locale.'"]';
Notification::clean();
}
@@ -183,12 +190,14 @@ class Blog {
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');
$posts = Pages::$pages->select($query, $nums, $start, array('slug', 'title', 'author', 'date', 'locale', 'template'), 'date', 'DESC');
// Loop
foreach($posts as $key => $post) {
$post_short = explode("{cut}", Text::toHtml(File::getContent(STORAGE . DS . 'pages' . DS . $post['id'] . '.page.txt')));
$posts[$key]['content'] = Filter::apply('content', $post_short[0]);
$posts[$key]['slug'] = $posts[$key]['slug'];
$posts[$key]['locale'] = ($posts[$key]['locale'] == Site::getCurrentSiteLocale()) ? '' : $posts[$key]['locale'].'/';
}
// Display view
@@ -216,10 +225,12 @@ class Blog {
* @param integer $num Number of posts to show
* @return string
*/
public static function getPostsBlock($nums = 10) {
public static function getPostsBlock($nums = 10, $locale = '') {
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
// XPath Query
$query = '[parent="'.Blog::$parent_page_name.'" and status="published"]';
$query = '[parent="'.Blog::$parent_page_name.'" and status="published" and locale="'.$locale.'"]';
// Get posts and sort by DESC
$posts = Pages::$pages->select($query, $nums, 0, array('slug', 'title', 'author', 'date'), 'date', 'DESC');
@@ -247,14 +258,16 @@ class Blog {
*
* @return string
*/
public static function getRelatedPosts($limit = null) {
public static function getRelatedPosts($limit = null, $locale = '') {
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
$related_posts = array();
$tags = Blog::getTagsArray(Page::slug());
foreach($tags as $tag) {
$query = '[parent="'.Blog::$parent_page_name.'" and status="published" and contains(tags, "'.$tag.'") and slug!="'.Page::slug().'"]';
$query = '[parent="'.Blog::$parent_page_name.'" and locale="'.$locale.'" and status="published" and contains(tags, "'.$tag.'") and slug!="'.Page::slug().'"]';
if ($result = Arr::subvalSort(Pages::$pages->select($query, ($limit == null) ? 'all' : (int)$limit), 'date', 'DESC')) {
$related_posts = $result;
@@ -303,9 +316,11 @@ class Blog {
*
* @return string
*/
public static function getPostBeforeCut($slug) {
public static function getPostBeforeCut($slug, $locale = '') {
$page = Pages::$pages->select('[slug="'.$slug.'"]', null);
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
$page = Pages::$pages->select('[slug="'.$slug.'" and locale="'.$locale.'"]', null);
// Get post
$post = explode("{cut}", Text::toHtml(File::getContent(STORAGE . DS . 'pages' . DS . $page['id'] . '.page.txt')));
@@ -327,9 +342,11 @@ class Blog {
*
* @return string
*/
public static function getPostAfterCut($slug) {
public static function getPostAfterCut($slug, $locale = '') {
$page = Pages::$pages->select('[slug="'.$slug.'"]', null);
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
$page = Pages::$pages->select('[slug="'.$slug.'" and locale="'.$locale.'"]', null);
// Get post
$post = explode("{cut}", Text::toHtml(File::getContent(STORAGE . DS . 'pages' . DS . $page['id'] . '.page.txt')));

View File

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

View File

@@ -1,5 +1,5 @@
<?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>
<h3 class="monstra-blog-title"><a href="<?php echo Option::get('siteurl'); ?>/<?php echo $post['locale'] ?><?php echo Blog::$parent_page_name; ?>/<?php echo $post['slug'] ?>"><?php echo $post['title']; ?></a></h3>
<small class="monstra-blog-date"><?php echo Date::format($post['date'], 'd M Y'); ?> / <?php echo $post['author']; ?></small>
<div class="monstra-blog-post">
<?php echo $post['content']; ?>

View File

@@ -1,26 +1,17 @@
<?php
return array(
'backup' => array(
'Backups' => 'Backups',
'Backup' => 'Backup',
'Backup Date' => 'Fecha del backup',
'Create Backup' => 'Crear backup',
'Restore' => 'Restaurar',
'Delete' => 'Eliminar',
'storage' => 'Almacenamiento',
'public' => 'público',
'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' => 'Eliminar backup: :backup',
'Creating...' => 'Creando...',
'Backup was created' => 'El backup fue creado',
'Backup was not created' => 'El backup no fue creado',
'Backup was deleted' => 'El backup fue eliminado',
'Backup was not deleted' => 'El backup no fue eliminado',
'Backup was restored' => 'El backup fue restaurado',
'Unzip error' => 'Error de descompresión',
'Backup was not restored' => 'El backup no fue restaurado',
'Delete backup: :backup' => 'Borrar Backup: :backup',
'Creating...' => 'Creando...',
)
);
);

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,11 +0,0 @@
<?php
return array(
'dashboard' => array(
'Dashboard' => 'Dashboard',
'Dashboard plugin for Monstra' => 'Dashboard plugin para Monstra',
'Welcome back' => 'Bienvenido nuevamente',
'Create New' => 'Crear nuevo',
'Upload File' => 'Subir archivo',
)
);

View File

@@ -1,11 +0,0 @@
<?php
return array(
'dashboard' => array(
'Dashboard' => 'პანელი',
'Dashboard plugin for Monstra' => 'პანელი Monstra-თვის',
'Welcome back' => 'მოგესალმებით',
'Create New' => 'დამატება',
'Upload File' => 'ფაილის ატვირთვა',
)
);

View File

@@ -1,10 +0,0 @@
<?php
return array(
'dashboard' => array(
'Dashboard' => 'Komandna tabla',
'Dashboard plugin for Monstra' => 'Komandna tabla dodatak za Monstra',
'Welcome back' => 'Dobrodošli natrag',
'Create New' => 'Kreiraj novo',
'Upload File' => 'Otpremi fajl',
)
);

View File

@@ -3,6 +3,6 @@
return array(
'Editor' => array(
'Editor' => 'Editor',
'Editor plugin' => 'Editor plugin',
'Editor plugin' => 'Plugin editor',
)
);
);

View File

@@ -1,7 +0,0 @@
<?php
return array(
'Editor' => array(
'Editor' => 'რედაქტორი',
'Editor plugin' => 'პლაგინი რედაქტორი',
)
);

View File

@@ -6,4 +6,4 @@
'Editor' => 'Editor',
'Editor plugin' => 'Editor dodatak',
)
);
);

View File

@@ -1,19 +0,0 @@
<?php
return array(
'emails' => array(
'Emails' => 'Emails',
'Emails plugin for Monstra' => 'Emails plugin para Monstra',
'Edit Layout' => 'Editar diseño',
'Email templates' => 'Plantillas de email',
'Edit' => 'Editar',
'Edit Email Template' => 'Editar plantilla de email',
'Name' => 'Nombre',
'Email template content' => 'Contenido de la plantilla de email',
'Save and Exit' => 'Guardar y salir',
'Save' => 'Guardar',
'Cancel' => 'Cancelar',
'This email template does not exist' => 'Esta plantilla de email no existe',
'Your changes to the email template <i>:name</i> have been saved.' => 'Sus cambios en la plantilla de email <i>:name</i> han sido guardados.',
)
);

View File

@@ -1,18 +0,0 @@
<?php
return array(
'emails' => array(
'Emails' => 'ელ-ფოსტები',
'Emails plugin for Monstra' => 'პლაგინი ელ-ფოსტები Monstra-თვის',
'Edit Layout' => 'ნიმუშის რედაქტირება',
'Email templates' => 'წერილების ნიმუში',
'Edit' => 'რედაქტირება',
'Edit Email Template' => 'ელ-ფოსტების ნიმუშის რედაქტირება',
'Name' => 'სახელი',
'Email template content' => 'ელ-ფოსტის კონტენტის ნიმუში',
'Save and Exit' => 'შენახვა და შემდეგ გამოსვლა',
'Save' => 'შენახვა',
'Cancel' => 'გაუქმება',
'This email template does not exist' => 'ასეთი ელ-ფოსტის ნიმუში არ არსებობს',
'Your changes to the email template <i>:name</i> have been saved.' => 'ელ-ფოსტის ნიმუშის ცვლილებები <i>:name</i> დამახსოვრებულია.',
)
);

View File

@@ -1,18 +0,0 @@
<?php
return array(
'emails' => array(
'Emails' => 'Email',
'Emails plugin for Monstra' => 'Email dodatak za Monstra',
'Edit Layout' => 'Izmeni izgled',
'Email templates' => 'Email šabloni',
'Edit' => 'Izmeni',
'Edit Email Template' => 'Izmeni izgled šablonu',
'Name' => 'Ime',
'Email template content' => 'Email sadržaj šablona',
'Save and Exit' => 'Sačuvaj i izađi',
'Save' => 'Sačuvaj',
'Cancel' => 'Otkaži',
'This email template does not exist' => 'Ovaj šablon ne postoji',
'Your changes to the email template <i>:name</i> have been saved.' => 'Tvoje promene na šablonu <i>:name</i> su uspešno sačuvane.',
)
);

View File

@@ -3,41 +3,41 @@
return array(
'filesmanager' => array(
'Files' => 'Archivos',
'Files manager' => 'Administrador de archivos',
'Files manager' => 'Administrar archivos',
'Name' => 'Nombre',
'Actions' => 'Acciones',
'Delete' => 'Eliminar',
'Delete' => 'Borrar',
'Upload' => 'Subir',
'Drop File Here' => 'Arrastrar archivo aquí',
'Maximum upload file size: :upload_max_filesize' => 'Tamaño máximo de subida: :upload_max_filesize',
'Rename' => 'Renombrar',
'Renamed successfully' => 'Renombrado exitoso',
'Failure' => 'Fracaso',
'Forbidden file type' => 'Tipo de archivo prohibido',
'Upload server error' => 'Error de subida del servidor',
'Can not be empty' => 'No puede estar vacío',
'Create New Directory' => 'Crear nuevo directorio',
'Directory Name' => 'Nombre del directorio',
'Directory:' => 'Directorio:',
'Directory was not created' => 'El directorio no fue creado',
'Directory was created' => 'El directorio fue creado',
'Directory was deleted' => 'El directorio fue eliminado',
'Directory was not deleted' => 'El directorio no fue eliminado',
'Directory exists' => 'El directorio ya existe',
'File:' => 'Archivo:',
'File was uploaded' => 'El archivo fue subido',
'File was not uploaded' => 'El archivo no fue subido',
'File was deleted' => 'El archivo fue eliminado',
'File was not deleted' => 'El archivo no fue eliminado',
'File exists' => 'El archivo ya existe',
'Cancel' => 'Cancelar',
'Create' => 'Crear',
'Drop File Here' => 'Drop File Here',
'Maximum upload file size: :upload_max_filesize' => 'Maximum upload file size: :upload_max_filesize',
'Rename' => 'Rename',
'Renamed successfully' => 'Renamed successfully',
'Failure' => 'Failure',
'Forbidden file type' => 'Forbidden file type',
'Upload server error' => 'Upload server error',
'Can not be empty' => 'Can not be empty',
'Create New Directory' => 'Create New Directory',
'Directory Name' => 'Directory Name',
'Directory:' => 'Directory:',
'Directory was not created' => 'Directory was not created',
'Directory was created' => 'Directory was created',
'Directory was deleted' => 'Directory was deleted',
'Directory was not deleted' => 'Directory was not deleted',
'Directory exists' => 'Directory exists',
'File:' => 'File:',
'File was uploaded' => 'File was uploaded',
'File was not uploaded' => 'File was not uploaded',
'File was deleted' => 'File was deleted',
'File was not deleted' => 'File was not deleted',
'File exists' => 'File exists',
'Cancel' => 'Cancel',
'Create' => 'Create',
'directory' => 'directorio',
'Delete directory: :dir' => 'Eliminar directorio: :dir',
'Delete file: :file' => 'Eliminar archivo: :file',
'Extension' => 'Extensión',
'Delete directory: :dir' => 'Borrar directorio: :dir',
'Delete file: :file' => 'Borrar archivo :file',
'Extension' => 'Extension',
'Size' => 'Tamaño',
'Select file' => 'Seleccionar archivo',
'Change' => 'Cambiar',
'Select file' => 'Select file',
'Change' => 'Change',
)
);

View File

@@ -1,50 +0,0 @@
<?php
return array(
'filesmanager' => array(
'Files' => 'ფაილები',
'Files manager' => 'ფაილების მენეჯერი',
'Name' => 'სახელი',
'Actions' => 'მოქმედება',
'Delete' => 'წაშლა',
'Upload' => 'ატვირთვა',
'Drop File Here' => 'გადაიტანეთ ფაილი აქ',
'Maximum upload file size: :upload_max_filesize' => 'ფაილის მაქსიმალური ზომა: :upload_max_filesize',
'Rename' => 'გადარქმევა',
'Renamed successfully' => 'წარმატებით გადაირქვა',
'Failure' => 'ვერ მოხერხდა',
'Forbidden file type' => 'ფაილის აკრძალული ტიპი',
'Upload server error' => 'სერვერის შეცდომა ატვირთვის დროს',
'Can not be empty' => 'არ შეიძლება ცარიელი იყოს',
'Create New Directory' => 'ახალი დირექტორიის შექმნა',
'Directory Name' => 'დირექტორიის სახელი',
'Directory:' => 'დირექტორია:',
'Directory was not created' => 'დირექტორია ვერ შეიქმნა',
'Directory was created' => 'დირექტორია შეიქმნა',
'Directory was deleted' => 'დირექტორია წაშლილია',
'Directory was not deleted' => 'დირექტორია ვერ წაიშალა',
'Directory exists' => 'დირექტორია უკვე არსებობს',
'File:' => 'ფაილი:',
'File was uploaded' => 'ფაილი აიტვირთა',
'File was not uploaded' => 'ფაილი ვერ აიტვირთა',
'File was deleted' => 'ფაილი წაშლილია',
'File was not deleted' => 'ფაილი ვერ წაიშალა',
'File exists' => 'ფაილი უკვე არსებობს',
'Cancel' => 'გაუქმება',
'Create' => 'შექმნა',
'directory' => 'დირექტორია',
'Delete directory: :dir' => 'დირექტორიის წაშლა: :dir',
'Delete file: :file' => 'ფაილის წაშლა:file',
'Extension' => 'გაფართოება',
'Size' => 'ფაილი',
'Select file' => 'ფაილის ამორჩევა',
'Change' => 'შეცვლა',
'Info' => 'ინფო',
'File Information' => 'ინფორმაცია ფაილზე',
'Filename' => 'ფაილის სახელწოდება',
'Filetype' => 'ფაილის ტიპი',
'Filesize' => 'ფაილის ზომა',
'Dimension' => 'სიდიდე',
'Link' => 'ბმული',
)
);

View File

@@ -0,0 +1,42 @@
<?php
return array(
'filesmanager' => array(
'Files' => 'Fajlovi',
'Files manager' => 'Menadžer fajlova',
'Name' => 'Ime',
'Actions' => 'Akcije',
'Delete' => 'Obriši',
'Upload' => 'Dodaj',
'Drop File Here' => 'Drop File Here',
'Maximum upload file size: :upload_max_filesize' => 'Maximum upload file size: :upload_max_filesize',
'Rename' => 'Rename',
'Renamed successfully' => 'Renamed successfully',
'Failure' => 'Failure',
'Forbidden file type' => 'Forbidden file type',
'Upload server error' => 'Upload server error',
'Can not be empty' => 'Can not be empty',
'Create New Directory' => 'Create New Directory',
'Directory Name' => 'Directory Name',
'Directory:' => 'Directory:',
'Directory was not created' => 'Directory was not created',
'Directory was created' => 'Directory was created',
'Directory was deleted' => 'Directory was deleted',
'Directory was not deleted' => 'Directory was not deleted',
'Directory exists' => 'Directory exists',
'File:' => 'File:',
'File was uploaded' => 'File was uploaded',
'File was not uploaded' => 'File was not uploaded',
'File was deleted' => 'File was deleted',
'File was not deleted' => 'File was not deleted',
'File exists' => 'File exists',
'Cancel' => 'Cancel',
'Create' => 'Create',
'directory' => 'Direktorijum',
'Delete directory: :dir' => 'Obriši direktorijum: :dir',
'Delete file: :file' => 'Obriši fajl :file',
'Extension' => 'Extenzija',
'Size' => 'Veličina',
'Select file' => 'Select file',
)
);

View File

@@ -1,42 +0,0 @@
<?php
return array(
'filesmanager' => array(
'Files' => 'Fajlovi',
'Files manager' => 'Menadžer fajlova',
'Name' => 'Ime',
'Actions' => 'Akcije',
'Delete' => 'Obriši',
'Upload' => 'Dodaj',
'Drop File Here' => 'Ostavi fajl ovde',
'Maximum upload file size: :upload_max_filesize' => 'Maksimum veličina fajla za dodavanje: :upload_max_filesize',
'Rename' => 'Promeni ime',
'Renamed successfully' => 'Ime uspešno promenjeno',
'Failure' => 'Dogodila se greška',
'Forbidden file type' => 'Zabranjena ekstenzija fajla',
'Upload server error' => 'Greška prilikom dodavanja servera',
'Can not be empty' => 'Ne može biti prazno',
'Create New Directory' => 'Napravi novi direktorijum',
'Directory Name' => 'Ime direktorijuma',
'Directory:' => 'Direktorijum:',
'Directory was not created' => 'Direktorijum nije kreiran',
'Directory was created' => 'Diektorijum je kreiran',
'Directory was deleted' => 'Direktorijum je obrisan',
'Directory was not deleted' => 'Direktorijum nije obrisan',
'Directory exists' => 'Direktorijum već postoji',
'File:' => 'Fajl:',
'File was uploaded' => 'Fajl je dodat',
'File was not uploaded' => 'Fajl nije dodat',
'File was deleted' => 'Fajl je obrisan',
'File was not deleted' => 'Fajl nije obrisan',
'File exists' => 'Fajl već postoji',
'Cancel' => 'Otkaži',
'Create' => 'Kreiraj',
'directory' => 'Direktorijum',
'Delete directory: :dir' => 'Obriši direktorijum: :dir',
'Delete file: :file' => 'Obriši fajl :file',
'Extension' => 'Extenzija',
'Size' => 'Veličina',
'Select file' => 'Odaberi fajl',
)
);

View File

@@ -8,33 +8,33 @@
'Value' => 'Valor',
'Security' => 'Seguridad',
'System' => 'Sistema',
'on' => 'Activado',
'off'=> 'Desactivado',
'on' => 'Encendido',
'off'=> 'Apagado',
'Server' => 'Servidor',
'PHP version' => 'Versión PHP',
'SimpleXML module' => 'Módulo SimpleXML',
'DOM module' => 'Módulo DOM',
'PHP version' => 'Version PHP',
'SimpleXML module' => 'SimpleXML modulo',
'DOM module' => 'DOM modulo',
'Installed' => 'Instalado',
'Not Installed' => 'No instalado',
'Security check results' => 'Resultados del control de seguridad',
'Security check results' => 'Resultados de control de seguridad',
'The configuration file has been found to be writable. We would advise you to remove all write permissions on defines.php on production systems.' =>
'El archivo de configuración se ha encontrado ser accesible. Le recomendamos quitar todos los permisos de escritura en defines.php en los sistemas de producción.',
'El archivo de configuración se ha encontrado ser de escritura. Les recomendamos quitar todos los permisos de escritura en defines.php en los sistemas de producción.',
'The Monstra core directory (":path") and/or files underneath it has been found to be writable. We would advise you to remove all write permissions. <br>You can do this on unix systems with: <code>chmod -R a-w :path</code>' =>
'El directorio núcleo de Monstra (":path") y/o los archivos por debajo del mismo se han encontrado ser accesibles. Le recomendamos quitar todos los permisos de escritura. <br>Usted puede hacer esto en sistemas Unix con: <code>chmod -R a-w :path</code>',
'El directorio núcleo Monstra (":path") y / o los archivos por debajo de ella se ha encontrado para tener permisos de escritura. Les recomendamos quitar todos los permisos de escritura. <br> Usted puede hacer esto en sistemas Unix con: <code> chmod-R aw: path </code>',
'The Monstra .htaccess file has been found to be writable. We would advise you to remove all write permissions. <br>You can do this on unix systems with: <code>chmod a-w :path</code>' =>
'El archivo .htaccess de Monstra se ha encontrado ser accesible. Le recomendamos quitar todos los permisos de escritura. <br>Usted puede hacer esto en sistemas Unix con: <code>chmod a-w :path</code>',
'El Monstra. Htaccess se ha encontrado para tener permisos de escritura. Les recomendamos quitar todos los permisos de escritura. <br> Usted puede hacer esto en sistemas Unix con: <code>chmod a-w :path</code>',
'The Monstra index.php file has been found to be writable. We would advise you to remove all write permissions. <br>You can do this on unix systems with: <code>chmod a-w :path</code>' =>
'El archivo index.php de Monstra se ha encontrado ser accesible. Le recomendamos quitar todos los permisos de escritura. <br>Usted puede hacer esto en sistemas Unix con: <code>chmod a-w :path</code>',
'El archivo index.php Monstra se ha encontrado ser de escritura. Les recomendamos quitar todos los permisos de escritura. <br> Usted puede hacer esto en sistemas Unix con: <code>chmod a-w :path</code>',
'Due to the type and amount of information an error might give intruders when Core::$environment = Core::DEVELOPMENT, we strongly advise setting Core::PRODUCTION in production systems.' =>
'Debido al tipo y cantidad de información que un error podría dar a los intrusos cuando Core::$environment = Core::DEVELOPMENT, le recomendamos ajuste Core::PRODUCTION en sistemas de producción.',
'Monstra version' => 'Versión Monstra',
'Directory Permissions' => 'Permisos de directorio',
'Debido al tipo y cantidad de información que un error podría dar a los intrusos cuando Core::$environment = Core::DEVELOPMENT,le recomendamos ajuste Core::PRODUCTION en sistemas de producción.',
'Monstra version' => 'Monstra version',
'Directory Permissions' => 'Permisos de directorios',
'Directory' => 'Directorio',
'Writable' => 'Accesible',
'Unwritable' => 'No accesible',
'Writable' => 'Adcesible',
'Unwritable' => 'No adcesible',
'Status' => 'Estado',
'PHP Built On' => 'PHP construido en',
'Web Server' => 'Servidor web',
'WebServer to PHP Interface' => 'Servidor web para interfaz PHP',
'PHP Built On' => 'PHP Construido En',
'Web Server' => 'Servidor Web',
'WebServer to PHP Interface' => 'Servidor web en PHP Interface',
)
);
);

View File

@@ -1,40 +0,0 @@
<?php
return array(
'information' => array(
'Information' => 'ინფორმაცია',
'Debugging' => 'Debugging-ი',
'Name' => 'სახელი',
'Value' => 'მნიშვნელობა',
'Security' => 'უსაფრთხოება',
'System' => 'სისტემა',
'on' => 'ჩართულია',
'off'=> 'გამორთულია',
'Server' => 'სერვერი',
'PHP version' => 'PHP-ის ვერსია',
'SimpleXML module' => 'SimpleXML მოდული',
'DOM module' => 'DOM მოდული',
'Installed' => 'დაყენებულია',
'Not Installed' => 'არ არის დაყენებული',
'Security check results' => 'უსაფრთხოების შემოწმების შედეგები',
'The configuration file has been found to be writable. We would advise you to remove all write permissions on defines.php on production systems.' =>
'კონფიგურაციის ფაილის ჩაწერა შესაძლებელია. გირჩევთ წაშალოთ ფაილის (defines.php) ჩაწერის უფლებები.',
'The Monstra core directory (":path") and/or files underneath it has been found to be writable. We would advise you to remove all write permissions. <br>You can do this on unix systems with: <code>chmod -R a-w :path</code>' =>
'Monstra-ს დირექტორია (":path") ჩასაწერად ხელმისაწვდომია. გირჩევთ წაშალოთ ჩაწერის უფლებები დირექტორიაზე (":path") . <br> ამის გაკეთება UNIX სისტემებზე ასე შეგიძლიათ: <code>chmod -R a-w :path</code>',
'The Monstra .htaccess file has been found to be writable. We would advise you to remove all write permissions. <br>You can do this on unix systems with: <code>chmod a-w :path</code>' =>
'მთავარი .htaccess ფაილი ჩასაწერად ხელმისაწვდომია. გირჩევთ წაშალოთ ჩაწერის უფლებები მთავარ .htaccess ფაილზე. <br> ამის გაკეთება UNIX სისტემებზე ასე შეგიძლიათ: <code>chmod -R a-w :path</code>',
'The Monstra index.php file has been found to be writable. We would advise you to remove all write permissions. <br>You can do this on unix systems with: <code>chmod a-w :path</code>' =>
'მთავარი index.php ფაილი ჩასაწერად ხელმისაწვდომია. გირჩევთ წაშალოთ ჩაწერის უფლებები მთავარ index.php ფაილზე. <br> ამის გაკეთება UNIX სისტემებზე ასე შეგიძლიათ: <code>chmod -R a-w :path</code>',
'Due to the type and amount of information an error might give intruders when Monstra::$environment = Monstra::DEVELOPMENT, we strongly advise setting Monstra::PRODUCTION in production systems.' =>
'სისტემა მუშაობს Monstra::DEVELOPMENT რეჟიმზა, გირჩევთ Monstra::PRODUCTION რეჟიმის დაყენებას.',
'Monstra version' => 'Monstra-ს ვერსია',
'Directory Permissions' => 'დაშვების უფლებები',
'Directory' => 'კატალოგი',
'Writable' => 'ჩასაწერად ხელმისაწვდომია',
'Unwritable' => 'ჩასაწერად არ არის ხელმისაწვდომია',
'Status' => 'სტატუსი',
'PHP Built On' => 'PHP აგებულია',
'Web Server' => 'Web სერვერი',
'WebServer to PHP Interface' => 'Web სერვერი PHP ინტერფეისისთვის',
)
);

View File

@@ -17,11 +17,15 @@
'Installed' => 'Instalirano',
'Not Installed' => 'Nije instalirano',
'Security check results' => 'Sigurnosna provera rezultata',
'The configuration file has been found to be writable. We would advise you to remove all write permissions on defines.php on production systems.' => 'Konfiguracioni fajl je nadjen da može biti upisan. Mi vas savetujemo da uklonite dozvole na fajlu defines.php ukoliko vam je svanični sajt.',
'The Monstra core directory (":path") and/or files underneath it has been found to be writable. We would advise you to remove all write permissions. <br>You can do this on unix systems with: <code>chmod -R a-w :path</code>' => 'Monstra direktorijum je (":path") i/ili fajlovi unutar toga su nadjeni da mogu biti zapisani. Mi vas savetujemo da uklonite te dozvole zapisivanja. <br>Na unix sistemima možete to uraditi sa: <code>chmod -R a-w :path</code>',
'The Monstra .htaccess file has been found to be writable. We would advise you to remove all write permissions. <br>You can do this on unix systems with: <code>chmod a-w :path</code>' => 'Monstra je .htaccess fajlu našla mogućnost upisivanja. Mi vas savetujemo da promenite te dozvole. <br>Na unix sistemima možete to uraditi sa: <code>chmod a-w :path</code>',
'The Monstra index.php file has been found to be writable. We would advise you to remove all write permissions. <br>You can do this on unix systems with: <code>chmod a-w :path</code>' => 'Monstra je pronašla index.php fajl da može da se upisuje. Mi vas savetujemo da promenite dozvole upisivanja. <br>Na unix sistemima možete to uraditi sa: <code>chmod a-w :path</code>',
'Due to the type and amount of information an error might give intruders when Core::$environment = Core::DEVELOPMENT, we strongly advise setting Core::PRODUCTION in production systems.' => 'Tokom ovolike količine informacija o greškama, moguće je da imate uljeze ili hakerske napade u Core::$environment = Core::DEVELOPMENT, Mi vas savetujemo da se prebacite na Core::PRODUCTION U produkciskim sistemima.',
'The configuration file has been found to be writable. We would advise you to remove all write permissions on defines.php on production systems.' =>
'Konfiguracioni fajl je nadjen da može biti upisan. Mi vas savetujemo da uklonite dozvole na fajlu defines.php ukoliko vam je svanični sajt.',
'The Monstra core directory (":path") and/or files underneath it has been found to be writable. We would advise you to remove all write permissions. <br>You can do this on unix systems with: <code>chmod -R a-w :path</code>' =>
'Monstra direktorijum je (":path") i/ili fajlovi unutar toga su nadjeni da mogu biti zapisani. Mi vas savetujemo da uklonite te dozvole zapisivanja. <br>Na unix sistemima možete to uraditi sa: <code>chmod -R a-w :path</code>',
'The Monstra .htaccess file has been found to be writable. We would advise you to remove all write permissions. <br>You can do this on unix systems with: <code>chmod a-w :path</code>' => 'Monstra je .htaccess fajlu našla mogućnost upisivanja. Mi vas savetujemo da promenite te dozvole. <br>Na unix sistemima možete to uraditi sa: <code>chmod a-w :path</code>',
'The Monstra index.php file has been found to be writable. We would advise you to remove all write permissions. <br>You can do this on unix systems with: <code>chmod a-w :path</code>' =>
'Monstra je pronašla index.php fajl da može da se upisuje. Mi vas savetujemo da promenite dozvole upisivanja. <br>Na unix sistemima možete to uraditi sa: <code>chmod a-w :path</code>',
'Due to the type and amount of information an error might give intruders when Core::$environment = Core::DEVELOPMENT, we strongly advise setting Core::PRODUCTION in production systems.' =>
'Tokom ovolike količine informacija o kreškama, moguće je da imate uljeze ili hakerske napade u Core::$environment = Core::DEVELOPMENT, Mi vas savetujemo da se prebacite na Core::PRODUCTION U produkciskim sistemima.',
'Monstra version' => 'Monstra verzija',
'Directory Permissions' => 'Dozvole direktorijuma',
'Directory' => 'Direktorijum',
@@ -32,4 +36,4 @@
'Web Server' => 'Web Server',
'WebServer to PHP Interface' => 'WebServer to PHP Interface',
)
);
);

View File

@@ -2,27 +2,27 @@
return array(
'menu' => array(
'Menu' => 'Menús',
'Menu Manager' => 'Administrador de menús',
'Menu' => 'Menu',
'Menu Manager' => 'Administrar menu',
'Edit' => 'Editar',
'Name' => 'Nombre',
'Delete' => 'Eliminar',
'Delete' => 'Borrar',
'Order' => 'Orden',
'Actions' => 'Acciones',
'Create New Item' => 'Crear nuevo item',
'New item' => 'Nuevo item',
'Item name' => 'Nombre del item',
'Item order' => 'Orden del item',
'Item target' => 'Target del item',
'Item link' => 'Enlace del item',
'Item category' => 'Categoría del item',
'New Item' => 'Nuevo item',
'Item name' => 'Nombre item',
'Item order' => 'Orden item',
'Item target' => 'target de item',
'Item link' => 'Enlace item',
'Item category' => 'categoría del item',
'Save' => 'Guardar',
'Edit item' => 'Editar item',
'Delete item :name' => 'Eliminar item: :name',
'Select page' => 'Seleccionar página',
'Category' => 'Categoría',
'Select category' => 'Seleccionar categoría',
'Edit Item' => 'Editar item',
'Delete Item :name' => 'Borrar item :name',
'Select page' => 'Seleccionar pagina',
'Category' => 'Categoria',
'Select category' => 'Seleccionar categoria',
'Required Field' => 'Dato requerido',
'Cancel' => 'Cancelar',
'Cancel' => 'Cancel',
)
);
);

View File

@@ -1,28 +0,0 @@
<?php
return array(
'menu' => array(
'Menu' => 'მენიუ',
'Menu manager' => 'მენიუს მენეჯერი',
'Edit' => 'რედაქტირება',
'Name' => 'სახელწოდება',
'Delete' => 'წაშლა',
'Order' => 'რიგი',
'Actions' => 'მოქმედება',
'Create New Item' => 'მენიუს ახალი პუნქტის შექმნა',
'New item' => 'მენიუს ახალი პუნქტი',
'Item name' => 'სახელი',
'Item order' => 'რიგი',
'Item target' => 'მიზანი',
'Item link' => 'ბმული',
'Item category' => 'კატეგორია',
'Save' => 'შენახვა',
'Edit item' => 'მენიუს პუნქტის რედაქტირება',
'Delete item :name' => 'მენიუს პუქტის წაშლა :name',
'Select page' => 'გვერდის არჩევა',
'Category' => 'კატეგორია',
'Select category' => 'კატეგორიის არჩევა',
'Required field' => 'აუცილებელი ველი',
'Cancel' => 'გაუქმება',
)
);

View File

@@ -23,6 +23,6 @@
'Category' => 'Kategorija',
'Select category' => 'Odaberi kategoriju',
'Required field' => 'Polje je potrebno',
'Cancel' => 'Otkaži',
'Cancel' => 'Cancel',
)
);
);

View File

@@ -2,54 +2,54 @@
return array(
'pages' => array(
'Pages' => 'Páginas',
'Pages manager' => 'Administrador de páginas',
'Pages' => 'Paginas',
'Pages manager' => 'Administrar paginas',
'Content' => 'Contenido',
'Create New Page' => 'Crear nueva página',
'New Page' => 'Nueva página',
'Edit Page' => 'Editar página',
'Create New Page' => 'Crear nueva pagina',
'New Page' => 'Nueva pagina',
'Edit Page' => 'Editar pagina',
'Date' => 'Fecha',
'Clone' => 'Clonar',
'Edit' => 'Editar',
'Delete' => 'Eliminar',
'Delete page: :page' => 'Eliminar página: :page',
'Title' => 'Título',
'Delete' => 'Borrar',
'Delete Page: :page' => 'Borrar pagina: :page',
'Title' => 'Titulo',
'Name' => 'Nombre',
'Author' => 'Autor',
'Name (slug)' => 'Nombre (slug)',
'Description' => 'Descripción',
'Keywords' => 'Palabras claves',
'Parent' => 'Página padre',
'Keywords' => 'Palabras clave',
'Parent' => 'Pariente de',
'Template' => 'Plantilla',
'Year' => 'Año',
'Day' => 'a',
'Day' => 'dia',
'Month' => 'Mes',
'Hour' => 'Hora',
'Minute' => 'Minuto',
'Second' => 'Segundo',
'This field should not be empty' => 'Este campo no puede quedar vacío',
'Minute' => 'Minutos',
'Second' => 'Segundos',
'This field should not be empty' => 'Este campo no puede estar vacío',
'This page already exists' => 'Esta página ya existe',
'Extra' => 'Extra',
'Save' => 'Guardar',
'Save and Exit' => 'Guardar y salir',
'Your changes to the page <i>:page</i> have been saved.' => 'Sus cambios realizados en la página <i>:page</i> han sido guardados.',
'The page <i>:page</i> cloned.' => 'La página <i>:page</i> ha sido clonada.',
'Status' => 'Estado',
'Save and exit' => 'Guardar y salir',
'Your changes to the page <i>:page</i> have been saved.' => 'Los cambios realizados en la página <i>:page</i> se han guardado.',
'The page <i>:page</i> cloned.' => 'La página <i>:page</i> se ha clonado.',
'Status' => 'Status',
'Actions' => 'Acciones',
'Add' => 'Añadir',
'Published' => 'Publicada',
'Published' => 'Publicado',
'Draft' => 'Borrador',
'Published on' => 'Publicada',
'Edit 404 Page' => 'Editar página 404',
'Page <i>:page</i> deleted' => 'Página <i>:page</i> eliminada',
'Search Engines Robots' => 'Motores de búsqueda robots',
'Page' => 'Página',
'Metadata' => 'Metadatos',
'Published on' => 'Publicada el',
'Edit 404 Page' => 'Editar la página 404',
'Page <i>:page</i> deleted' => 'Pagina <i>:page</i> borrada',
'Search Engines Robots' => 'Motores de búsqueda Robots',
'Page' => 'Pagina',
'Metadata' => 'Metadata',
'Settings' => 'Ajustes',
'Required field' => 'Dato requerido',
'Access' => 'Acceso',
'Public' => 'Público',
'Public' => 'Publico',
'Registered' => 'Registrado',
'Cancel' => 'Cancelar',
'Cancel' => 'Cancel',
)
);
);

View File

@@ -1,56 +0,0 @@
<?php
return array(
'pages' => array(
'Pages' => 'გვერდები',
'Pages manager' => 'გვერდების მენეჯერი',
'Content' => 'კონტენტი',
'Create New Page' => 'ახალი გვერდის შექმნა',
'New Page' => 'ახალი გვერდი',
'Edit Page' => 'გვერდის რედაქტირება',
'Date' => 'თარიღი',
'Clone' => 'კლონირება',
'Edit' => 'რედაქტირება',
'Delete' => 'წაშლა',
'Delete page: :page' => 'გვერდის წაშლა: :page',
'Title' => 'სათაური',
'Name' => 'სახელწოდება',
'Author' => 'ავტორი',
'Slug (url)' => 'ბმული (url)',
'Tags' => 'Tag-ევი',
'Description' => 'აღწერა',
'Keywords' => 'საკვანძო სიტყვები',
'Parent' => 'მშობელი',
'Template' => 'Template-ი',
'Year' => 'წელი',
'Day' => 'დღე',
'Month' => 'თვე',
'Hours' => 'საათი',
'Minute' => 'წუთი',
'Second' => 'წამი',
'This field should not be empty' => 'ეს ველი არ უნდა იყოს ცარიელი',
'This page already exists' => 'ასეთი გვერდი უკვე არსებობს',
'Extra' => 'დამატებით',
'Save' => 'შენახვა',
'Save and Exit' => 'დამახსოვრება და შემდეგ გაოსვლა',
'Your changes to the page <i>:page</i> have been saved.' => 'თქვენი ცვლილებები გვერდი <i>:page</i> მიმართ შენახულია.',
'The page <i>:page</i> cloned.' => 'გვერდი <i>:page</i> კლონირებულია.',
'Status' => 'სტატუსი',
'Actions' => 'მოქმედება',
'Add' => 'დამატება',
'Published' => 'გამოქვეყნებულია',
'Draft' => 'ესკიზი',
'Published on' => 'გამოქვეყნებულია',
'Edit 404 Page' => '404 გვერდის რედაქტირება',
'Page <i>:page</i> deleted' => 'გვერდი <i>:page</i> წაშლილია',
'Search Engines Robots' => 'საძიებო რობოტები',
'Page' => 'გვერდები',
'Metadata' => 'Metadata',
'Settings' => 'პარამეტრები',
'Required field' => 'აუცილებელი ველი',
'Access' => 'მისაწვდომობა',
'Public' => 'საჯარო',
'Registered' => 'დარეგისტრირებულთათვის',
'Cancel' => 'გაუქმება',
),
);

View File

@@ -4,7 +4,7 @@
'pages' => array(
'Pages' => 'Strane',
'Pages manager' => 'Menadžer strana',
'Content' => 'Sadržaj',
'Content' => 'Ssadržaj',
'Create new page' => 'Kreiraj novu stranu',
'New page' => 'Nova strana',
'Edit page' => 'Izemni stranu',
@@ -50,6 +50,6 @@
'Access' => 'Pristup',
'Public' => 'Javno',
'Registered' => 'Registrovani',
'Cancel' => 'Otkaži',
'Cancel' => 'Cancel',
)
);
);

View File

@@ -19,6 +19,13 @@ class PagesAdmin extends Backend
*/
public static $pages = null;
/**
* Locale
*
* @var string
*/
public static $locale_to_edit = '';
/**
* _pageExpandAjax
*/
@@ -27,7 +34,7 @@ class PagesAdmin extends Backend
if (Request::post('page_slug')) {
if (Security::check(Request::post('token'))) {
$pages = new Table('pages');
$pages->updateWhere('[slug="'.Request::post('page_slug').'"]', array('expand' => Request::post('page_expand')));
$pages->updateWhere('[slug="'.Request::post('page_slug').'" and locale="'.PagesAdmin::$locale_to_edit.'"]', array('expand' => Request::post('page_expand')));
Request::shutdown();
} else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
}
@@ -45,6 +52,23 @@ class PagesAdmin extends Backend
$errors = array();
if (Request::get('locale_to_edit')) {
if (Security::check(Request::get('token'))) {
if (Arr::keyExists(Site::getLocales(), Request::get('locale_to_edit'))) {
Cookie::set('locale_to_edit', Request::get('locale_to_edit'));
Request::redirect(Site::url().'/admin/index.php?id=pages');
}
} else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
}
if (Cookie::get('locale_to_edit')) {
$locale_to_edit = Cookie::get('locale_to_edit');
} else {
$locale_to_edit = Site::getDefaultSiteLocale();
}
PagesAdmin::$locale_to_edit = $locale_to_edit;
$pages = new Table('pages');
PagesAdmin::$pages = $pages;
@@ -106,6 +130,7 @@ class PagesAdmin extends Backend
'keywords' => $orig_page['keywords'],
'tags' => $orig_page['tags'],
'date' => $orig_page['date'],
'locale' => $orig_page['locale'],
'author' => $orig_page['author']))) {
// Get cloned page ID
@@ -149,7 +174,7 @@ class PagesAdmin extends Backend
//--------------
if (trim(Request::post('page_name')) == '') $errors['pages_empty_name'] = __('Required field', 'pages');
if (trim(Request::post('page_title')) == '') $errors['pages_empty_title'] = __('Required field', 'pages');
if (count($pages->select('[slug="'.Security::safeName(Request::post('page_name'), '-', true).'"]')) != 0) $errors['pages_exists'] = __('This page already exists', 'pages');
if (count($pages->select('[slug="'.Security::safeName(Request::post('page_name'), '-', true).'" and locale="'.$locale_to_edit.'"]')) != 0) $errors['pages_exists'] = __('This page already exists', 'pages');
// Prepare date
if (Valid::date(Request::post('page_date'))) {
@@ -179,6 +204,7 @@ class PagesAdmin extends Backend
'keywords' => Request::post('page_keywords'),
'tags' => Request::post('page_tags'),
'date' => $date,
'locale' => $locale_to_edit,
'author' => $author))) {
// Get inserted page ID
@@ -287,7 +313,7 @@ class PagesAdmin extends Backend
// Validate
//--------------
if (trim(Request::post('page_name')) == '') $errors['pages_empty_name'] = __('Required field', 'pages');
if ((count($pages->select('[slug="'.Security::safeName(Request::post('page_name'), '-', true).'"]')) != 0) and (Security::safeName(Request::post('page_old_name'), '-', true) !== Security::safeName(Request::post('page_name'), '-', true))) $errors['pages_exists'] = __('This page already exists', 'pages');
if ((count($pages->select('[slug="'.Security::safeName(Request::post('page_name'), '-', true).'" and locale="'.$locale_to_edit.'"]')) != 0) and (Security::safeName(Request::post('page_old_name'), '-', true) !== Security::safeName(Request::post('page_name'), '-', true))) $errors['pages_exists'] = __('This page already exists', 'pages');
if (trim(Request::post('page_title')) == '') $errors['pages_empty_title'] = __('Required field', 'pages');
// Save fields
@@ -328,7 +354,7 @@ class PagesAdmin extends Backend
}
}
if ($pages->updateWhere('[slug="'.Request::get('name').'"]',
if ($pages->updateWhere('[slug="'.Request::get('name').'" and locale="'.$locale_to_edit.'"]',
array('slug' => Security::safeName(Request::post('page_name'), '-', true),
'template' => Request::post('templates'),
'parent' => $parent_page,
@@ -342,6 +368,7 @@ class PagesAdmin extends Backend
'status' => Request::post('status'),
'access' => Request::post('access'),
'date' => $date,
'locale' => $locale_to_edit,
'author' => $author))) {
File::setContent(STORAGE . DS . 'pages' . DS . Request::post('page_id') . '.page.txt', XML::safe(Request::post('editor')));
@@ -353,7 +380,7 @@ class PagesAdmin extends Backend
} else {
if ($pages->updateWhere('[slug="'.Request::get('name').'"]',
if ($pages->updateWhere('[slug="'.Request::get('name').'" and locale="'.$locale_to_edit.'"]',
array('slug' => Security::safeName(Request::post('page_name'), '-', true),
'template' => Request::post('templates'),
'parent' => $parent_page,
@@ -367,6 +394,7 @@ class PagesAdmin extends Backend
'status' => Request::post('status'),
'access' => Request::post('access'),
'date' => $date,
'locale' => $locale_to_edit,
'author' => $author))) {
File::setContent(STORAGE . DS . 'pages' . DS . Request::post('page_id') . '.page.txt', XML::safe(Request::post('editor')));
@@ -412,7 +440,15 @@ class PagesAdmin extends Backend
$templates_array[basename($file,'.template.php')] = basename($file, '.template.php');
}
$page = $pages->select('[slug="'.Request::get('name').'"]', null);
if (Request::get('name') == 'error404') {
$page = $pages->select('[slug="'.Request::get('name').'" and locale="'.$locale_to_edit.'"]', null);
if (count($page) == 0) {
}
} else {
$page = $pages->select('[slug="'.Request::get('name').'" and locale="'.$locale_to_edit.'"]', null);
}
if ($page) {
@@ -488,7 +524,7 @@ class PagesAdmin extends Backend
if (Security::check(Request::get('token'))) {
// Get specific page
$page = $pages->select('[slug="'.Request::get('name').'"]', null);
$page = $pages->select('[slug="'.Request::get('name').'" and locale="'.$locale_to_edit.'"]', null);
// Delete page and update <parent> fields
if ($pages->deleteWhere('[slug="'.$page['slug'].'" ]')) {
@@ -524,7 +560,7 @@ class PagesAdmin extends Backend
if (Security::check(Request::get('token'))) {
$pages->updateWhere('[slug="'.Request::get('slug').'"]', array('access' => Request::get('access')));
$pages->updateWhere('[slug="'.Request::get('slug').'" and locale="'.$locale_to_edit.'"]', array('access' => Request::get('access')));
// Run delete extra actions
Action::run('admin_pages_action_update_access');
@@ -548,7 +584,7 @@ class PagesAdmin extends Backend
if (Security::check(Request::get('token'))) {
$pages->updateWhere('[slug="'.Request::get('slug').'"]', array('status' => Request::get('status')));
$pages->updateWhere('[slug="'.Request::get('slug').'" and locale="'.$locale_to_edit.'"]', array('status' => Request::get('status')));
// Run delete extra actions
Action::run('admin_pages_action_update_status');
@@ -578,7 +614,7 @@ class PagesAdmin extends Backend
$count = 0;
// Get pages
$pages_list = $pages->select(null, 'all', null, array('slug', 'title', 'status', 'date', 'author', 'expand', 'access', 'parent', 'template', 'tags'));
$pages_list = $pages->select('[locale="'.$locale_to_edit.'"]', 'all', null, array('slug', 'title', 'status', 'date', 'author', 'expand', 'access', 'parent', 'template', 'tags', 'locale'));
// Loop
foreach ($pages_list as $page) {
@@ -595,6 +631,7 @@ class PagesAdmin extends Backend
$pages_array[$count]['expand'] = $page['expand'];
$pages_array[$count]['slug'] = $page['slug'];
$pages_array[$count]['tags'] = $page['tags'];
$pages_array[$count]['locale'] = $page['locale'];
$pages_array[$count]['template']= $page['template'];
if (isset($page['parent'])) {
@@ -605,7 +642,7 @@ class PagesAdmin extends Backend
if ($c_p != '') {
$_page = $pages->select('[slug="'.$page['parent'].'"]', null);
$_page = $pages->select('[slug="'.$page['parent'].'" and locale="'.$locale_to_edit.'"]', null);
if (isset($_page['title'])) {
$_title = $_page['title'];

View File

@@ -57,6 +57,13 @@ class Pages extends Frontend
*/
public static $requested_page = null;
/**
* Locale
*
* @var string
*/
public static $locale = '';
/**
* Main function
*/
@@ -77,7 +84,16 @@ class Pages extends Frontend
$requested_page = Pages::lowLoader(Uri::segments());
Pages::$requested_page = $requested_page;
return Pages::$pages->select('[slug="'.$requested_page.'"]', null);
if($requested_page == 'error404') {
$page = Pages::$pages->select('[slug="'.$requested_page.'" and locale="'.Pages::$locale.'"]', null);
if(count($page) == 0) {
$page = Pages::$pages->select('[slug="'.$requested_page.'" and locale="'.Site::getDefaultSiteLocale().'"]', null);
}
} else {
$page = Pages::$pages->select('[slug="'.$requested_page.'" and locale="'.Pages::$locale.'"]', null);
}
return $page;
}
/**
@@ -91,14 +107,34 @@ class Pages extends Frontend
{
$defpage = Option::get('defaultpage');
if (Arr::keyExists(Site::getLocales(), $data[0])) {
$locale = $data[0];
if ($locale == Site::getDefaultSiteLocale()) {
if ((isset($data[2])) && ($data[2] != '')) {
Request::redirect(Site::url().'/'.$data[1].'/'.$data[2], 301);
} else {
Request::redirect(Site::url().'/'.(isset($data[1]) ? $data[1] : '') , 301);
}
}
$data[0] = isset($data[1]) ? $data[1] : '';
$data[1] = isset($data[2]) ? $data[2] : '';
if ($data[0] == '') unset($data[0]);
if ($data[1] == '') unset($data[1]);
} else {
$locale = Site::getDefaultSiteLocale();
}
Pages::$locale = $locale;
Cookie::set('site_locale', $locale);
// If data count 2 then it has Parent/Child
if (count($data) >= 2) {
// If exists parent file
if (count(Pages::$pages->select('[slug="'.$data[0].'"]')) !== 0) {
if (count(Pages::$pages->select('[slug="'.$data[0].'" and locale="'.$locale.'"]')) !== 0) {
// Get child file and get parent page name
$child_page = Pages::$pages->select('[slug="'.$data[1].'"]', null);
$child_page = Pages::$pages->select('[slug="'.$data[1].'" and locale="'.$locale.'"]', null);
// If child page parent is not empty then get his parent
if (count($child_page) == 0) {
@@ -150,15 +186,17 @@ class Pages extends Frontend
}
} else { // Only parent page come
if (empty($data[0])) {
$id = $defpage;
} else {
// Get current page
$current_page = Pages::$pages->select('[slug="'.$data[0].'"]', null);
$current_page = Pages::$pages->select('[slug="'.$data[0].'" and locale="'.$locale.'"]', null);
// Hack For old Monstra
$current_page['access'] = (isset($current_page['access'])) ? $current_page['access'] : 'public' ;
@@ -176,7 +214,7 @@ class Pages extends Frontend
if ($c_p !== '') {
if ($c_p == $data[0]) {
if (count(Pages::$pages->select('[slug="'.$data[0].'"]', null)) != 0) {
if (count(Pages::$pages->select('[slug="'.$data[0].'"] and locale="'.$locale.'"]', null)) != 0) {
if ((($current_page['status'] == 'published') or
(Session::exists('user_role') && in_array(Session::get('user_role'), array('admin', 'editor')))) and
@@ -194,17 +232,17 @@ class Pages extends Frontend
$id = 'error404';
Response::status(404);
}
} else {
} else {
$id = 'error404';
Response::status(404);
}
} else {
} else {
$id = 'error404';
Response::status(404);
}
} else {
if (count(Pages::$pages->select('[slug="'.$data[0].'"]', null)) != 0) {
if (count(Pages::$pages->select('[slug="'.$data[0].'" and locale="'.$locale.'"]', null)) != 0) {
if ((($current_page['status'] == 'published') or
(Session::exists('user_role') && in_array(Session::get('user_role'), array('admin', 'editor')))) and
($current_page['access'] == 'public')) {
@@ -217,11 +255,12 @@ class Pages extends Frontend
$id = $data[0];
} else {
} else {
$id = 'error404';
Response::status(404);
}
} else {
$id = 'error404';
Response::status(404);
}
@@ -248,11 +287,13 @@ class Pages extends Frontend
*
* @return string
*/
public static function content($slug = '')
public static function content($slug = '', $locale = '')
{
if ( ! empty($slug)) {
$page = Table::factory('pages')->select('[slug="'.$slug.'"]', null);
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
$page = Table::factory('pages')->select('[slug="'.$slug.'" and locale="'.$locale.'"]', null);
if ( ! empty($page)) {
@@ -318,17 +359,19 @@ class Pages extends Frontend
/**
* Get pages
*/
public static function getPages()
public static function getPages($locale = '')
{
// Init vars
$pages_array = array();
$count = 0;
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
// Get pages table
$pages = new Table('pages');
// Get Pages List
$pages_list = $pages->select('[slug!="error404" and status="published"]');
$pages_list = $pages->select('[slug!="error404" and status="published" and locale="'.$locale.'"]');
foreach ($pages_list as $page) {
@@ -337,6 +380,7 @@ class Pages extends Frontend
$pages_array[$count]['parent'] = $page['parent'];
$pages_array[$count]['date'] = $page['date'];
$pages_array[$count]['author'] = $page['author'];
$pages_array[$count]['locale'] = $page['locale'];
$pages_array[$count]['slug'] = ($page['slug'] == Option::get('defaultpage')) ? '' : $page['slug'] ;
if (isset($page['parent'])) {
@@ -346,7 +390,7 @@ class Pages extends Frontend
}
if ($c_p != '') {
$_page = $pages->select('[slug="'.$page['parent'].'"]', null);
$_page = $pages->select('[slug="'.$page['parent'].'" and locale="'.$locale.'"]', null);
if (isset($_page['title'])) {
$_title = $_page['title'];
@@ -414,9 +458,10 @@ class Page extends Pages
* @param string $parent Parent page
* @return array
*/
public static function children($parent)
public static function children($parent, $locale = '')
{
return Pages::$pages->select('[parent="'.(string) $parent.'"]', 'all');
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
return Pages::$pages->select('[parent="'.(string) $parent.'" and locale="'.$locale.'"]', 'all');
}
/**
@@ -427,9 +472,11 @@ class Page extends Pages
* </code>
*
*/
public static function available()
public static function available($locale = '')
{
$pages = Pages::$pages->select('[parent="'.Pages::$requested_page.'"]', 'all');
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
$pages = Pages::$pages->select('[parent="'.Pages::$requested_page.'" and locale="'.$locale.'"]', 'all');
// Display view
View::factory('box/pages/views/frontend/available_pages')
@@ -445,16 +492,17 @@ class Page extends Pages
* </code>
*
*/
public static function breadcrumbs()
public static function breadcrumbs($locale = '')
{
if (Uri::command() == 'pages') {
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
$current_page = Pages::$requested_page;
$parent_page = '';
if ($current_page !== 'error404') {
$page = Pages::$pages->select('[slug="'.$current_page.'"]', null);
$page = Pages::$pages->select('[slug="'.$current_page.'" and locale="'.$locale.'"]', null);
if (trim($page['parent']) !== '') {
$parent = true;
$parent_page = Pages::$pages->select('[slug="'.$page['parent'].'"]', null);
$parent_page = Pages::$pages->select('[slug="'.$page['parent'].'" and locale="'.$locale.'"]', null);
} else {
$parent = false;
}

View File

@@ -9,6 +9,20 @@
Html::anchor(__('Edit 404 Page', 'pages'), 'index.php?id=pages&action=edit_page&name=error404', array('title' => __('Create New Page', 'pages'), 'class' => 'btn btn-phone btn-default'))
);
?>
&nbsp;
<div class="btn-group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
Locale to edit <span class="caret"></span>
</button>
<ul class="dropdown-menu text-left" role="menu">
<?php
$locales = Site::getLocales();
foreach ($locales as $key => $locale) {
?>
<li><a href="<?php echo Site::url(); ?>/admin/index.php?id=pages&locale_to_edit=<?php echo $key; ?>&token=<?php echo Security::token(); ?>"><?php echo $locale; ?> <?php if ($key == PagesAdmin::$locale_to_edit) { ?><i class="glyphicon glyphicon-ok"></i><?php } ?></a></li>
<?php } ?>
</ul>
</div>
</div>
</div>
@@ -39,7 +53,7 @@
<tr <?php echo $visibility; ?> <?php if (trim($page['parent']) !== '') {?> rel="children_<?php echo $page['parent']; ?>" <?php } ?>>
<td>
<?php
if (count(PagesAdmin::$pages->select('[parent="'.(string) $page['slug'].'"]', 'all')) > 0) {
if (count(PagesAdmin::$pages->select('[parent="'.(string) $page['slug'].'" and locale="'.PagesAdmin::$locale_to_edit.'"]', 'all')) > 0) {
if (isset($page['expand']) && $page['expand'] == '1') {
echo '<a href="javascript:;" class="btn-expand parent" token="'.Security::token().'" rel="'.$page['slug'].'">+</a>';
} else {
@@ -50,10 +64,11 @@
</td>
<td>
<?php
$page_locale = ($page['locale'] == Site::getDefaultSiteLocale()) ? '' : $page['locale'].'/';
$_parent = (trim($page['parent']) == '') ? '' : $page['parent'];
$parent = (trim($page['parent']) == '') ? '' : $page['parent'].'/';
echo (trim($page['parent']) == '') ? '' : '&nbsp;';
echo $dash.Html::anchor(Html::toText($page['title']), $site_url.'/'.$parent.$page['slug'], array('target' => '_blank', 'rel' => 'children_'.$_parent));
echo $dash.Html::anchor(Html::toText($page['title']), $site_url.'/'.$page_locale.$parent.$page['slug'], array('target' => '_blank', 'rel' => 'children_'.$_parent));
?>
</td>
<td class="visible-lg hidden-xs">

View File

@@ -8,14 +8,14 @@
'Description' => 'Descripción',
'Installed' => 'Instalado',
'Install New' => 'Instalar nuevo',
'Delete' => 'Eliminar',
'Delete plugin :plugin' => 'Eliminar plugin: :plugin',
'Delete' => 'Borrar',
'Delete plugin :plugin' => 'Eliminar plugin :plugin',
'This plugin does not exist' => 'Este plugin no existe',
'Version' => 'Versión',
'Version' => 'Version',
'Author' => 'Autor',
'Get More Plugins' => 'Obtener más plugins',
'Get More Plugins' => 'Obtener mas plugins',
'Install' => 'Instalar',
'Uninstall' => 'Desinstalar',
'README.md not found' => 'README.md no encontrado',
'README.md not found' => 'README.md not found',
)
);
);

View File

@@ -1,24 +0,0 @@
<?php
return array(
'plugins' => array(
'Plugins' => 'პლაგინები',
'Installed' => 'დაყენებული',
'Install New' => 'ახალის დაყენება',
'Actions' => 'მოქმედება',
'Name' => 'სახელწოდება',
'Description' => 'აღწერა',
'Delete' => 'წაშლა',
'Delete plugin :plugin' => ':plugin პლაგინის წაშლა',
'This plugin does not exist' => 'ასეთი პლაგინი არ არსებობს',
'Version' => 'ვერსია',
'Author' => 'ავტორი',
'Get More Plugins' => 'სხვა პლაგინების გადმოწერა',
'Install' => 'დაყენება',
'Uninstall' => 'წაშლა',
'README.md not found' => 'README.md არ არის ნაპოვნი',
'Info' => 'ინფო',
'Upload' => 'ატვირთვა',
'Drop File Here' => 'გადაიტანეთ ფაილი აქ',
)
);

View File

@@ -16,6 +16,6 @@
'Get More Plugins' => 'Dodaj još dodataka',
'Install' => 'Instaliraj',
'Uninstall' => 'Deinstaliraj',
'README.md not found' => 'README.md Nije nađeno',
'README.md not found' => 'README.md not found',
)
);
);

View File

@@ -1,7 +0,0 @@
<?php
return array(
'sitemap' => array(
'Sitemap' => 'საიტის რუქა',
)
);

View File

@@ -2,6 +2,6 @@
return array(
'sitemap' => array(
'Sitemap' => 'Mapa sajta',
'Sitemap' => 'Mapasajta',
)
);
);

View File

@@ -3,28 +3,28 @@
return array(
'snippets' => array(
'Snippets' => 'Snippets',
'Snippets manager' => 'Administrador de snippets',
'Snippets manager' => 'Snippets administrador',
'Actions' => 'Acciones',
'Delete' => 'Eliminar',
'Delete' => 'Borrar',
'Edit' => 'Editar',
'Name' => 'Nombre',
'Create New Snippet' => 'Crear nuevo snippet',
'New Snippet' => 'Nuevo snippet',
'Edit Snippet' => 'Editar snippet',
'Edit snippet' => 'Editar snippet',
'Save' => 'Guardar',
'Save and Exit' => 'Guardar y salir',
'This snippet already exists' => 'Este snippet ya existe',
'This snippet already exists' => 'Este snippet que ya existe',
'This snippet does not exist' => 'Este snippet no existe',
'Delete snippet: :snippet' => 'Eliminar snippet: :snippet',
'Snippet content' => 'Contenido del snippet',
'Snippet <i>:name</i> deleted' => 'Snippet <i>:name</i> eliminado',
'Your changes to the snippet <i>:name</i> have been saved.' => 'Sus cambios realizados en el snippet <i>:name</i> han sido guardados.',
'Delete snippet: :snippet' => 'Eliminar snippet: :snippet',
'Snippet content' => 'Contenido de snippet',
'Snippet <i>:name</i> deleted' => 'Snippet <i>:name</i> borrado',
'Your changes to the snippet <i>:name</i> have been saved.' => 'Los cambios realizados en el snippet <i>:name</i> se han guardado.',
'Delete snippet: :snippet' => 'Delete snippet: :snippet',
'Required field' => 'Dato requerido',
'View Embed Code' => 'Ver código incrustado',
'Embed Code' => 'Código incrustado',
'Shortcode' => 'Código corto',
'PHP Code' => 'Código PHP',
'Cancel' => 'Cancelar',
'View Embed Code' => 'Ver codigo incrustado',
'Embed Code' => 'Codigo incrustado',
'Shortcode' => 'Codigo corto',
'PHP Code' => 'Codigo PHP',
'Cancel' => 'Cancel',
)
);
);

View File

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

View File

@@ -12,7 +12,7 @@
'New snippet' => 'Novi klip',
'Edit snippet' => 'Izmeni klip',
'Save' => 'Sačuvaj',
'Save and exit' => 'Sačuvaj i izađi',
'Save and exit' => 'sačuvaj i izađi',
'This snippet already exists' => 'Ovaj klip već postoji',
'This snippet does not exist' => 'Ovaj klip ne postoji',
'Delete snippet: :snippet' => 'Obriši klip: :snippet',
@@ -25,6 +25,6 @@
'Embed Code' => 'Embed kod',
'Shortcode' => 'Kratak kod',
'PHP Code' => 'PHP kod',
'Cancel' => 'Otkaži',
'Cancel' => 'Cancel',
)
);
);

View File

@@ -4,79 +4,79 @@
'system' => array(
'System' => 'Sistema',
'Published a new version of the :monstra' => 'Publicada una nueva versión de :monstra',
'Sitemap created' => 'Mapa del sitio creado',
'Create Sitemap' => 'Crear mapa del sitio',
'on' => 'Activar',
'off'=> 'Desactivar',
'Site Url' => 'URL del sitio',
'Sitemap created' => 'Mapa Web creada',
'Create Sitemap' => 'Crear mapa Web',
'on' => 'Encender',
'off'=> 'Apagar',
'Site Url' => 'Url Web',
'Maintenance Mode' => 'Modo mantenimiento',
'Maintenance Mode On' => 'Activar modo mantenimiento',
'Maintenance Mode Off' => 'Desactivar modo mantenimiento',
'Site Settings' => 'Configuración del sitio',
'Maintenance Mode On' => 'Encender modo Mantenimiento',
'Maintenance Mode Off' => 'Apagar modo Mantenimiento',
'Site Settings' => 'Configuración Web',
'System Settings' => 'Configuración del sistema',
'Site Name' => 'Nombre del sitio',
'Site Description' => 'Descripción del sitio',
'Site Keywords' => 'Palabras claves del sitio',
'Site Slogan' => 'Lema del sitio',
'Site Name' => 'Nombre Web',
'Site Description' => 'Descripción Web',
'Site Keywords' => 'Palabras clave Web',
'Site Slogan' => 'Lema Web',
'Default Page' => 'Página por defecto',
'Time zone' => 'Zona horaria',
'Language' => 'Lenguaje',
'Email' => 'Correo electrónico',
'Email' => 'Email',
'Save' => 'Guardar',
'Site' => 'Sitio',
'System Version' => 'Versión del sistema',
'System Version ID' => 'ID de versión web',
'Site' => 'Web',
'System Version' => 'Version Web',
'System Version ID' => 'Version Web ID',
'GZIP' => 'GZIP',
'Debugging' => 'Depuración',
'Plugin API' => 'Plugin API',
'Plugins active' => 'Plugins activos',
'Actions registered' => 'Acciones registradas',
'Filters registered' => 'Filtros registrados',
'Delete Temporary Files' => 'Eliminar archivos temporales',
'Download the latest version' => 'Descargar versión más reciente',
'Powered by' => 'Powered by',
'Plugins Active' => 'Plugins activos',
'Actions Registered' => 'Acciones registradas',
'Filters Registered' => 'Filtros registrados',
'Log Out' => 'Salir',
'site' => 'Web',
'Core' => 'Core',
'Delete Temporary Files' => 'Borre los archivos temporales',
'Download the latest version' => 'Descargue la versión más reciente',
'Powered by' => 'Desarrollado por',
'Administration' => 'Administración',
'Settings' => 'Configuración',
'Temporary files deleted' => 'Archivos temporales eliminados',
'Extends' => 'Extensiones',
'View Site' => 'Ver sitio web',
'View Site' => 'Ver Web',
'Welcome, :username' => 'Bienvenido, :username',
'Reset Password' => 'Restablecer Contraseña',
'Back to Website' => 'Regresar al sitio web',
'Forgot your password ?' => '¿Olvidó su contraseña?',
'Administration >' => 'Administración',
'Reset Password' => 'Restablecer contraseña',
'Back to Website' => 'Regreso a la Página Web',
'Forgot your password ?' => 'Olvidó su contraseña ?',
'Administration >' => 'Administración >',
'Send New Password' => 'Enviar nueva contraseña',
'This user does not exist' => 'Este usuario no existe',
'Version' => 'Versión',
'Plugin does not exist' => 'El plugin no existe',
'Help' => 'Ayuda',
'Install script writable' => 'Instalación de scripts accesible',
'Install script not writable' => 'Instalación de scripts no accesible',
'Directory: <b> :dir </b> writable' => 'Directorio: <b> :dir </b> accesible',
'Directory: <b> :dir </b> not writable' => 'Directorio: <b> :dir </b> no accesible',
'PHP Version' => 'Versión PHP',
'Module DOM is installed' => 'El módulo DOM está instalado',
'Module DOM is required' => 'El módulo DOM es requerido',
'Module Mod Rewrite is installed' => 'El módulo Mod Rewrite está instalado',
'Module SimpleXML is installed' => 'El módulo SimpleXML está instalado',
'PHP 5.2 or greater is required' => 'PHP 5.2 o superior es requerido',
'Version' => 'Version',
'Plugin does not exist' => 'Plugin no existe',
'Install script writable' => 'Install script es modificable',
'Install script not writable' => 'Install script no puede escribir',
'Directory: <b> :dir </b> writable' => 'Directorio: <b> :dir </b> es modificable',
'Directory: <b> :dir </b> not writable' => 'Directorio: <b> :dir </b> no puede escribir',
'PHP Version' => 'Version PHP',
'Module DOM is installed' => 'Modulo DOM está instalado',
'Module DOM is required' => 'Modulo DOM es requerido',
'Module Mod Rewrite is installed' => 'Modulo Mod Rewrite está instalado',
'Module SimpleXML is installed' => 'Modulo SimpleXML está instalado',
'PHP 5.2 or greater is required' => 'PHP 5.2 o mayor es requerido',
'Apache Mod Rewrite is required' => 'Apache Mod Rewrite es requerido',
'SimpleXML module is required' => 'El Módulo SimpleXML es requerido',
'Field "Site name" is empty' => 'El campo "Nombre del sitio" está vacío',
'SimpleXML module is required' => 'SimpleXML modulo es requerido',
'Field "Site name" is empty' => 'El campo "Nombre Web" está vacío',
'Field "Email" is empty' => 'El campo "Correo electrónico" está vacío',
'Field "Username" is empty' => 'El campo "Nombre de usuario" está vacío',
'Field "Password" is empty' => 'El campo "Contraseña" está vacío',
'Field "Site url" is empty' => 'El campo "URL del sitio" está vacío',
'Email not valid' => 'El correo electrónico no es válido',
'Continue' => 'Continuar',
'Field "Site url" is empty' => 'El campo "URL Web" está vacío',
'Email not valid' => 'Correo no es válido',
'Install' => 'Instalar',
'...Monstra says...' => '...Monstra dice...',
'Sitemap file writable' => 'El archivo del mapa del sitio es accesible',
'Sitemap file not writable' => 'El archivo del mapa del sitio no es accesible',
'Main .htaccess file writable' => 'El archivo principal .htaccess es accesible',
'Main .htaccess file not writable' => 'El archivo principal .htaccess no es accesible',
'Sitemap file writable' => 'Archivo Mapa Web es modificable',
'Sitemap file not writable' => 'Archivo Mapa Web no modificable',
'Main .htaccess file writable' => 'Archivo principal .htaccess esmodificable',
'Main .htaccess file not writable' => 'Archivo principal .htaccess no modificable',
'Official Support Forum' => 'Foro de Soporte Oficial',
'Documentation' => 'Documentación',
'Your changes have been saved.' => 'Sus cambios han sido guardados.',
)
);

View File

@@ -1,82 +0,0 @@
<?php
return array(
'system' => array(
'System' => 'სისტემა',
'Published a new version of the :monstra' => 'გამოქვეყნდა ახალი ვერსია :monstra',
'Sitemap created' => 'საიტის რუქა შეიქმნა',
'Create Sitemap' => 'საიტის რუქის შექმნა',
'on' => 'ჩართულია',
'off'=> 'გამორთულია',
'Site Url' => 'საიტის ადრესი',
'Maintenance Mode' => 'ტექნიკური სამუშაოები',
'Maintenance Mode On' => 'ტექნიკური სამუშაობების ჩართვა',
'Maintenance Mode Off' => 'ტექნიკური სამუშაობების. გამორთვა',
'Site Settings' => 'საიტის პარამეტრები',
'System Settings' => 'სისტემის პარამეტრები',
'Site Name' => 'საიტის სახელწოდება',
'Site Description' => 'საიტის აღწერა',
'Site Keywords' => 'საიტის საკვანძო სიტყვები',
'Site Slogan' => 'საიტის სლოგანი',
'Default Page' => 'მთავარი გვერდი',
'Time zone' => 'დროის სარტყელი',
'Language' => 'ენა',
'Email' => 'ელ-ფოსტა',
'Save' => 'დამახსოვრება',
'System version' => 'სისტემის ვერსია',
'System version ID' => 'სისტემის ვერსიის ID',
'GZIP' => 'GZIP',
'Debugging' => 'Debugging',
'Plugin API' => 'პლაგინი API',
'Plugins active' => 'შეერთებული პლაგინები',
'Actions registered' => 'დარეგისტრირებული მოქმედებები',
'Filters registered' => 'დარეგისტრირებული ფილტრები',
'Delete Temporary Files' => 'დროებითი ფაილების წაშლა',
'Download the latest version' => 'ბოლო ვერსიის გადმოწერა',
'Powered by' => 'Powered by',
'Administration' => 'ადმინისტრირება',
'Settings' => 'პარამეტრები',
'Temporary files deleted' => 'დროებითი ფაილები წაშლილია',
'Extends' => 'extend-ები',
'View Site' => 'საიტის ნახვა',
'Welcome, :username' => 'მოგესალმებით, :username',
'Reset Password' => 'პაროლის Reset-ი',
'Back to Website' => 'ვებ გვერდზე დაბრუნება',
'Forgot your password ?' => 'დაგავიწყდათ პაროლი?',
'Administration' => 'ადმინისტრირება',
'Send New Password' => 'ახალი პაროლის გაგზავნა',
'This user does not exist' => 'ესეთი მომხმარებელი არ არსებობს',
'Version' => 'ვერსია',
'Plugin does not exist' => 'პლაგინი არ არსებობს',
'Help' => 'დახმარება',
'Continue' => 'გაგრძელება',
'Install script writable' => 'დასაყენი script-ის წაკითხვა შესაძლებელია',
'Install script not writable' => 'დასაყენი script-ის წაკითხვა შეუძლებელია',
'Directory: <b> :dir </b> writable' => 'დირეკტორია <b> :dir </b> ჩაწერისთვის ხელმისაწვდომია',
'Directory: <b> :dir </b> not writable' => 'დირეკტორია <b> :dir </b> ჩაწერისთვის არ არის ხელმისაწვდომი',
'PHP Version' => 'PHP-ის ვერსია',
'Module DOM is installed' => 'DOM მოდული დაყენებულია',
'Module DOM is required' => 'საჭიროა DOM მოდული',
'Module Mod Rewrite is installed' => 'მოდული Mod Rewrite დაყენებულია',
'Module SimpleXML is installed' => 'მოდული SimpleXML დაყენებულია',
'PHP 5.2 or greater is required' => 'საჭიროა PHP 5.2 ან უფრო ახალი',
'Apache Mod Rewrite is required' => 'საჭიროა Apache Mod Rewrite',
'SimpleXML module is required' => 'საჭიროა SimpleXML მოდული',
'Field "Site name" is empty' => '"საიტის სახელის" ველი არ არის შევსებული',
'Field "Email" is empty' => '"ელ-ფოსტის" ველი არ არის შევსებული',
'Field "Username" is empty' => '"მომხმარებლის სახელის" ველი არ არის შევსებული',
'Field "Password" is empty' => '"პაროლის" ველი არ არის შევსებული',
'Field "Site url" is empty' => '"საიტის ადრესის" ველი არ არის შევსებული',
'Email not valid' => 'ელ-ფოსტა არასწორია',
'Install' => 'დაყენება',
'...Monstra says...' => '...Monstra ამბობს...',
'Sitemap file writable' => 'საიტის რუქის ჩაწერა შესაძლებელია',
'Sitemap file not writable' => 'საიტის რუქის ჩაწერა შეუძლებელია',
'Main .htaccess file writable' => 'მთავარი .htaccess ფაილის ჩაწერა შესაძლებელია',
'Main .htaccess file not writable' => 'მთავარი .htaccess ფაილის ჩაწერა შეუძლებელია',
'Official Support Forum' => 'ოფიციალური დახმარების ფორუმი',
'Documentation' => 'დოკუმენტაცია',
'Your changes have been saved.' => 'თქვენი ცვლილებები შენახულია.',
)
);

View File

@@ -3,7 +3,7 @@
return array(
'system' => array(
'System' => 'Sistem',
'Published a new version of the :monstra' => 'Objavili smo novu verziju :monstr-e',
'Published a new version of the :monstra' => 'Objavi novu verziju :monstr-e',
'Sitemap created' => 'Mapa sajta je Kreirana!!!',
'Create sitemap' => 'Kreiraj Mapu sajta',
'on' => 'uključeno',
@@ -30,8 +30,8 @@
'Debugging' => 'Odklanjanje grešaka',
'Plugin API' => 'Dodatak API',
'Plugins active' => 'Aktivni Dodaci',
'Actions registered' => 'Akcije su registrovane',
'Filters registered' => 'Filteri su registrovani',
'Actions registered' => 'Actions registered',
'Filters registered' => 'Filters registered',
'logout' => 'Izloguj se',
'site' => 'Sajt',
'Core' => 'Sistem',
@@ -44,15 +44,16 @@
'Extends' => 'Proširenja',
'View site' => 'Pogledaj sajt',
'Welcome, :username' => 'Dobrodošao, :username',
'Reset Password' => 'Resetuj šifru',
'Reset Password' => 'resetuj šifru',
'Back to Website' => 'Nazad da websajt',
'Forgot your password ?' => 'Zaboravio si svoju šifru ?',
'Administration' => 'Administracija',
'Send New Password' => 'Pošalji novu šifru',
'Send New Password' => 'Pošaljki novu šifru',
'This user does not exist' => 'Ovaj korisnik ne postoji',
'Version' => 'Verzija',
'Plugin does not exist' => 'Ovaj Dodatak ne postoji',
'Install script writable' => 'Instaliranje skripte',
'Install script writable' => 'Instaliraj skriptu',
'Install script not writable' => 'Nemoguće je instalirati skriptu',
'Directory: <b> :dir </b> writable' => 'Direktorijum: <b> :dir </b> dozvoljen za pisanje',
'Directory: <b> :dir </b> not writable' => 'Direktorijum: <b> :dir </b> nije dozvoljen za posanje',
@@ -72,7 +73,7 @@
'Email not valid' => 'Email nije validan',
'Install' => 'Instaliraj',
'...Monstra says...' => '...Monstra kaže...',
'Sitemap file writable' => 'Sitemap Fajl je dozvoljen za pisanje',
'Sitemap file writable' => 'Sitemap Fajl je doyvoljen za pisanje',
'Sitemap file not writable' => 'Sitemap Fajl nije dozvoljen za pisanje',
'Main .htaccess file writable' => 'Glavni .htaccess je dozvoljen za pisanje',
'Main .htaccess file not writable' => 'Glavni .htaccess nije dozvoljen za pisanje',

View File

@@ -57,7 +57,8 @@ class SystemAdmin extends Backend
// Get all pages
$pages_array = array();
$pages_list = $pages->select('[slug!="error404" and parent="" and status="published"]');
$pages_list = $pages->select('[slug!="error404" and parent="" and locale="'.Site::getDefaultSiteLocale().'" and status="published"]');
foreach ($pages_list as $page) {
$pages_array[$page['slug']] = Html::toText($page['title']);
}
@@ -131,6 +132,7 @@ class SystemAdmin extends Backend
'timezone' => Request::post('system_timezone'),
'system_email' => Request::post('system_email'),
'language' => Request::post('system_language'),
'site_language' => Request::post('site_language'),
'maintenance_message' => Request::post('site_maintenance_message')));
Notification::set('success', __('Your changes have been saved.', 'system'));

View File

@@ -34,4 +34,4 @@ if (Session::exists('user_role') && in_array(Session::get('user_role'), array('a
}
Plugin::Admin('system', 'box');
Plugin::Admin('system', 'box');

View File

@@ -80,12 +80,20 @@
<div class="form-group">
<?php
echo (
Form::label('system_language', __('Language', 'system')).
Form::label('system_language', __('Common Language', 'system')).
Form::select('system_language', $languages_array, Option::get('language'), array('class' => 'form-control'))
);
?>
</div>
<div class="form-group">
<?php
echo (
Form::label('site_language', __('Site Language', 'system')).
Form::select('site_language', $languages_array, Option::get('site_language'), array('class' => 'form-control'))
);
?>
</div>
<div class="form-group">
<?php
echo (
Form::label('system_email', __('Email', 'system')).

View File

@@ -4,53 +4,49 @@
'themes' => array(
'Themes' => 'Temas',
'Themes manager' => 'Administrador de temas',
'Select Theme' => 'Seleccionar tema',
'Select Theme' => 'Selecionar tema',
'Save' => 'Guardar',
'Save and Exit' => 'Guardar y salir',
'Name' => 'Nombre',
'Create New Template' => 'Crear nueva plantilla',
'New Template' => 'Nueva plantilla',
'Delete template: :name' => 'Eliminar plantilla: :name',
'Delete template: :name' => 'Borrar plantilla: :name',
'Delete chunk: :name' => 'Eliminar chunk: :name',
'Delete styles: :name' => 'Eliminar estilo: :name',
'Delete styles: :name' => 'Eliminar estilos: :name',
'Templates' => 'Plantillas',
'Clone' => 'Clonar',
'Edit' => 'Editar',
'Delete' => 'Eliminar',
'Delete' => 'Borrar',
'Actions' => 'Acciones',
'Create New Chunk' => 'Crear nuevo chunk',
'New Chunk' => 'Nuevo chunk',
'Chunks' => 'Chunks',
'Create New Styles' => 'Crear nuevo estilo',
'New Styles' => 'Nuevo estilo',
'New chunk' => 'Nuevo chunk',
'Chunks' => 'chunks',
'Create New Styles' => 'Crear nuevos estilos',
'New Styles' => 'Nuevos estilos',
'Styles' => 'Estilos',
'Template content' => 'Contenido de la plantilla',
'Styles content' => 'Contenido del estilo',
'Chunk content' => 'Contenido del chunk',
'Edit Template' => 'Editar plantilla',
'Template Content' => 'Contenido de plantilla',
'Styles Content' => 'Contenido de estilos',
'Chunk content' => 'Contenido de chunk',
'Edit Cemplate' => 'Editar plantilla',
'Edit Chunk' => 'Editar chunk',
'Edit Styles' => 'Editar estilo',
'Site Theme' => 'Tema del sitio',
'Edit Styles' => 'Editar estilos',
'Site Theme' => 'Tema del sito',
'Admin Theme' => 'Tema del backend',
'Current Site Theme' => 'Tema actual del sitio',
'Current admin theme' => 'Tema actual de administración',
'Current Site Theme' => 'Tema del sitio actual',
'Current Admin Theme' => 'Tema de administración actual',
'This template already exists' => 'Esta plantilla ya existe',
'This chunk already exists' => 'Este chunk ya existe',
'This styles already exist' => 'Este estilo ya existe',
'Components templates' => 'Componentes de plantillas',
'Your changes to the chunk <i>:name</i> have been saved.' => 'Sus cambios realizados en el chunk <i>:name</i> han sido guardados.',
'Your changes to the styles <i>:name</i> have been saved.' => 'Sus cambios realizados en el estilo <i>:name</i> han sido guardados.',
'Your changes to the template <i>:name</i> have been saved.' => 'Sus cambios realizados en la plantilla <i>:name</i> han sido guardados.',
'Chunk <i>:name</i> deleted' => 'Chunk <i>:name</i> eliminado',
'Template <i>:name</i> deleted' => 'Plantilla <i>:name</i> eliminada',
'Styles <i>:name</i> deleted' => 'Estilo <i>:name</i> eliminado',
'This styles already exist' => 'This styles already exists',
'Components Templates' => 'Components templates',
'Your changes to the chunk <i>:name</i> have been saved.' => 'Los cambios realizados en el chunk <i>:name</i> se han guardado.',
'Your changes to the styles <i>:name</i> have been saved.' => 'Los cambios realizados en el estilo <i>:name</i> se han guardado.',
'Your changes to the template <i>:name</i> have been saved.' => 'Los cambios realizados en la plantilla <i>:name</i> se han guardado.',
'Chunk <i>:name</i> deleted' => 'Chunk <i>:name</i> deleted',
'Required field' => 'Dato requerido',
'Scripts' => 'Scripts',
'Create New Script' => 'Crear nuevo script',
'Script content' => 'Contenido del script',
'Script Content' => 'Contenido del sript',
'New Script' => 'Nuevo script',
'Edit Script' => 'Editar script',
'Site Theme' => 'Tema del sitio',
'Cancel' => 'Cancelar',
)
);
);

View File

@@ -1,54 +0,0 @@
<?php
return array(
'themes' => array(
'Themes' => 'თემები',
'Themes manager' => 'თემების მენეჯერი',
'Select Theme' => 'თემის არჩევა',
'Save' => 'შენახვა',
'Name' => 'სახელწოდება',
'Save and Exit' => 'შენახვა და შემდეგ გომოსვლა',
'Create New Template' => 'ახალი Template-ის შექმნა',
'New Template' => 'ახალი Template-ი',
'Delete template: :name' => 'Template-ის წაშლა: :name',
'Delete chunk: :name' => 'chunk-ის წაშლა: :name',
'Delete styles: :name' => 'სტილის წაშლა: :name',
'Templates' => 'Template-ები',
'Clone' => 'კლონირება',
'Edit' => 'რედაქტირება',
'Delete' => 'წაშლა',
'Actions' => 'მოქმედება',
'Admin Theme' => 'თემა',
'Create New Chunk' => 'ახალი Chunk-ის შექმნა',
'New Chunk' => 'ახალი Chunk-ი',
'Chunks' => 'Chunk-ები',
'Create New Styles' => 'ახალი სტილის შექმნა',
'New Styles' => 'ახალი სტილები',
'Styles' => 'სტილები',
'Template content' => 'Template-ის შემადგენლობა',
'Styles content' => 'სტილების შემადგენლობა',
'Chunk content' => 'Chunk-ის შემადგენლობა',
'Edit Template' => 'Template-ის რედაქტირება',
'Edit Chunk' => 'Chunk-ის რედაქტირება',
'Edit Styles' => 'სტილების რედაქტირება',
'Site Theme' => 'საიტის თემა',
'Admin Theme' => 'ადმინის პანელის თემა',
'Current Site Theme' => 'საიტის მიმდინარე თემა',
'Current admin theme' => 'ადმინის პანელის მიმდინარე თემა',
'This template already exists' => 'ეს Template-ი უკვე არსებობს',
'This chunk already exists' => 'ეს Chunk-ი უკვე არსებობს',
'This styles already exist' => 'ეს სტილები უკვე არსებობენ',
'Components templates' => 'კომპონენტების Template-ები',
'Your changes to the chunk <i>:name</i> have been saved.' => 'თქვენი ცვლილებები chunk-ის მიმართ <i>:name</i> შენახულია',
'Your changes to the styles <i>:name</i> have been saved.' => 'თქვენი ცვლილებები სტილების მიმართ <i>:name</i> შენახულია',
'Your changes to the template <i>:name</i> have been saved.' => 'თქვენი ცვლილებები Template-ის მიმართ <i>:name</i> შენახულია',
'Chunk <i>:name</i> deleted' => 'Chunk-ი <i>:name</i> წაშლილია',
'Required field' => 'აუცილებელი ველი',
'Scripts' => 'Script-ები',
'Create New Script' => 'ახალი Script-ის შექმნა',
'Script content' => 'Script-ის შემადგენლობა',
'New Script' => 'ახალი Script-ი',
'Edit Script' => 'Script-ის რედაქტირება',
'Cancel' => 'გაუქმება',
)
);

View File

@@ -47,4 +47,4 @@
'New script' => 'Nova skripta',
'Edit script' => 'Izmeni skriptu',
)
);
);

View File

@@ -3,67 +3,67 @@
return array(
'users' => array(
'Users' => 'Usuarios',
'Login' => 'Iniciar sesión',
'Username' => 'Nombre de usuario',
'Login' => 'Entrar',
'Username' => 'Usuario',
'Password' => 'Contraseña',
'Registered' => 'Fecha de registro',
'Email' => 'Correo electrónico',
'Registered' => 'Registrado',
'Email' => 'Correo',
'Role' => 'Nivel',
'Roles' => 'Niveles',
'Edit' => 'Editar',
'Actions' => 'Acciones',
'Delete' => 'Eliminar',
'Log In' => 'Iniciar sesión',
'Log Out' => 'Cerrar sesión',
'Delete' => 'Borrar',
'Enter' => 'Entrar',
'Logout' => 'Salir',
'Register New User' => 'Registrar nuevo usuario',
'New User Registration' => 'Registro de nuevo usuario',
'Delete user: :user' => 'Eliminar usuario: :user',
'User <i>:user</i> have been deleted.' => 'El usuario <i>:user</i> ha sido eliminado.',
'New User Registration' => 'Registración nuevo usuario',
'Delete user: :user' => 'Borrar usuario: :user',
'User <i>:user</i> have been deleted.' => 'Usuario <i>:user</i> ha sido borrado.',
'This user already exists' => 'Este usuario ya existe',
'This email already exists' => 'Este correo ya existe',
'Changes saved' => 'Cambios guardados',
'Wrong old password' => 'Contraseña antigua incorrecta',
'Admin' => 'Administrador',
'Wrong old password' => 'Antigua contraseña incorrecta',
'Admin' => 'Adminintrador',
'User' => 'Usuario',
'Editor' => 'Editor',
'Register' => 'Registrar',
'Edit profile' => 'Editar perfil',
'Edit profile' => 'Editar prefil',
'Save' => 'Guardar',
'Firstname' => 'Primer nombre',
'Lastname' => 'Apellido',
'Old password' => 'Contraseña antigua',
'Old password' => 'Contraseña vieja',
'New password' => 'Nueva contraseña',
'Welcome' => 'Bienvenido',
'Wrong <b>username</b> or <b>password</b>' => '<b>Nombre de usuario</b> o <b>contraseña</b> erróneo',
'Your changes have been saved.' => 'Sus cambios han sido guardados.',
'Welcome' => 'Biemvenido',
'Wrong <b>username</b> or <b>password</b>' => 'Mal <b>Nombre de usuario</b> o <b>Contraseña</b>',
'Your changes have been saved.' => 'Tus cambios han sido guardados.',
'New user have been registered.' => 'Nuevo usuario registrado.',
'Captcha' => 'Captcha',
'Registration' => 'Registro',
'Username' => 'Nombre de usuario',
'User email is invalid' => 'Su correo es inválido',
'Reset Password' => 'Restablecer contraseña',
'Username' => 'Nombre usuario',
'User email is invalid' => 'Tu correo es invalido',
'Reset Password' => 'Resetear contraseña',
'Send New Password' => 'Enviar nueva contraseña',
'This user doesnt alredy exist' => 'Este usuario no existe',
'Users - Profile' => 'Usuarios - Perfil',
'Users - Edit Profile' => 'Usuarios - Editar perfil',
'Users - Login' => 'Usuarios - Iniciar sesión',
'Users - Registration' => 'Usuarios - Registro',
'Users - Password Recover' => 'Usuarios - Recuperar contraseña',
'Users - Login' => 'Usuarios - Entrar',
'Users - Registration' => 'Usuarios - registro',
'Users - Password Recover' => 'Usuarios - Recordar contraseña',
'New Password' => 'Nueva contraseña',
'Forgot your password?' => '¿Olvidó su contraseña?',
'New password has been sent' => 'Su nueva contraseña ha sido enviada',
'Monstra says: This is not your profile...' => 'Monstra dice: Este es su perfil...',
'User registration is closed.' => 'El registro de usuarios está cerrado.',
'Forgot your password?' => 'Has olvidado la contraseña?',
'New password has been sent' => 'Nueva contraseña enviada',
'Monstra says: This is not your profile...' => 'Monstra dice: Este es tu perfil...',
'User registration is closed.' => 'El registro de usuario esta cerrado.',
'Allow user registration' => 'Permitir registro',
'Required field' => 'Dato requerido',
'This user doesnt exist' => 'Este usuario no existe',
'Captcha code is wrong' => 'Código captcha erróneo',
'Your login details for :site_name has been sent' => 'Sus detalles para iniciar sesión en :site_name han sido enviados',
'Your new password for :site_name' => 'Su nueva contraseña para :site_name',
'Your login details for :site_name' => 'Sus detalles para iniciar sesión en :site_name',
'About Me' => 'Acerca de mí',
'Captcha code is wrong' => 'Codigo captcha equivocado',
'Your login details for :site_name has been sent' => 'Los detalles para loguearte en :site_name han sido enviados',
'Your new password for :site_name' => 'Tu nuevo password para :site_name',
'Your login details for :site_name' => 'Detalles para entrar en :site_name',
'About Me' => 'Sobre mi',
'Profile' => 'Perfil',
'You are banned for 10 minutes. Try again later' => 'Ha sido baneado por 10 minutos. Inténtelo nuevamente más tarde',
'Cancel' => 'Cancelar',
'You are banned for 10 minutes. Try again later' => 'You are banned for 10 minutes. Try again later',
'Cancel' => 'Cancel',
)
);
);

View File

@@ -1,67 +0,0 @@
<?php
return array(
'users' => array(
'Users' => 'მომხმარებლები',
'Login' => 'შესვლა',
'Password' => 'პაროლი',
'Email' => 'ელ-ფოსტა',
'Registered' => 'დარეგისტრირებული',
'Role' => 'როლი',
'Roles' => 'როლები',
'Actions' => 'მოქმედება',
'Edit' => 'რედაქტირება',
'Delete' => 'წაშლა',
'Log In' => 'შესვლა',
'Log Out' => 'გომოსვლა',
'Register New User' => 'ახალი მომხმარებლის რეგისტრაცია',
'New User Registration' => 'ახალი მომხმარებლის რეგისტრაცია',
'Delete user: :user' => 'მომხმარებლის წაშლა: :user',
'User <i>:user</i> have been deleted.' => 'მომხმარებელი <i>:user</i> წაშლილია.',
'This user already exists' => 'ეს მომხმარებელი უკვე არსებობს',
'This email already exists' => 'ეს ელ-ფოსტა უკვე არსებობს',
'Changes saved' => 'ცვლილებები შენახულია',
'Wrong old password' => 'არასწორი ძველი პაროლი',
'Admin' => 'ადმინისტრატორი',
'User' => 'მომხმარებელი',
'Editor' => 'რედაქტორი',
'Register' => 'რეგისტრაცია',
'Edit profile' => 'მომხმარებლის პროფილის რედაქტირება',
'Save' => 'შენახვა',
'Firstname' => 'სახელი',
'Lastname' => 'გვარი',
'Old password' => 'ძველი პაროლი',
'New password' => 'ახალი პაროლი',
'Welcome' => 'მოგესალმებით',
'Wrong <b>username</b> or <b>password</b>' => 'არასწორი <b>ლოგინი</b> ან <b>პაროლი</b>',
'Your changes have been saved.' => 'თქვენი ცვლილებები შენახულია.',
'New user have been registered.' => 'ახლი მომხმარებელი დარეგისტრირდა.',
'Captcha' => 'Captcha',
'Registration' => 'რეგისტრაცია',
'Username' => 'მომხმარებლის სახელი',
'User email is invalid' => 'ელ-ფოსტა არასწორია',
'Reset Password' => 'პაროლის რესეტი',
'Send New Password' => 'პაროლის გაგზავნა',
'Users - Profile' => 'მომხმარებლები - პროფილი',
'Users - Edit Profile' => 'მომხმარებლები - პროფილის რედაქტირება',
'Users - Log In' => 'მომხმარებლები - შესვლა',
'Users - Registration' => 'მომხმარებლები - რეგისტრაცია',
'Users - Password Recover' => 'მომხმარებლები - პაროლის აღდგენა',
'New Password' => 'ახალი პაროლი',
'Forgot your password?' => 'პაროლი დაგავიწყდათ?',
'New password has been sent' => 'ახალი პაროლი გაგზავნილია',
'Monstra says: This is not your profile...' => 'Monstra ამბობს: ეს არ არის შენი პროფილი...',
'User registration is closed.' => 'მომხმარებლების რეგისტრაცია დახურულია.',
'Allow user registration' => 'მომხმარებლების რეგისტრაციას ნების მიცემა.',
'Required field' => 'აუცილებელი ველი',
'This user doesnt exist' => 'ასეთი მომხმარებელი არ არსებობს',
'Captcha code is wrong' => 'Captcha-ზე პასუხი არასწორია!',
'Your login details for :site_name has been sent' => 'თქვენი მონაცემები :site_name -ის მისაწვდომად გაგზავნილია',
'Your new password for :site_name' => 'თქვენი ახალი პაროლი :site_name -თვის',
'Your login details for :site_name' => 'თქვენი მონაცემები :site_name -ის მისაწვდომად',
'About Me' => 'ჩემს შესახებ',
'Profile' => 'პროფილი',
'You are banned for 10 minutes. Try again later' => 'თქვენ 10 წუთით ხართ დაბლოკილი. სცადეთ მოგვიანებით',
'Cancel' => 'გაუქმება',
)
);

View File

@@ -8,8 +8,8 @@
'Password' => 'Šifra',
'Registered' => 'Registrovan',
'Email' => 'Email',
'Role' => 'Uloga',
'Roles' => 'Uloge',
'Role' => 'uloga',
'Roles' => 'uloge',
'Edit' => 'Izmeni',
'Actions' => 'Akcije',
'Delete' => 'Obriši',
@@ -26,7 +26,7 @@
'Admin' => 'Admin',
'User' => 'Korisnik',
'Editor' => 'Editor',
'Register' => 'Registrovan',
'Register' => 'registrovan',
'Edit profile' => 'Izmeni profil',
'Save' => 'Sačuvaj',
'Firstname' => 'Prvo ime',
@@ -63,7 +63,7 @@
'Your login details for :site_name' => 'Vaši podaci za logovanje na :site_name',
'About Me' => 'O meni',
'Profile' => 'Profil',
'You are banned for 10 minutes. Try again later' => 'Vi ste banovani na 10 minuta. Pokušajte kasnije',
'Cancel' => 'Otkaži',
'You are banned for 10 minutes. Try again later' => 'You are banned for 10 minutes. Try again later',
'Cancel' => 'Cancel',
)
);
);

View File

@@ -1,9 +0,0 @@
<?php
return array(
'captcha' => array(
'Captcha' => 'Captcha',
'Captcha plugin for Monstra' => 'Captcha პლაგინი Monstra-თვის',
'Captcha code is wrong' => 'Captcha-ზე პასუხი არასწორია!',
)
);

View File

@@ -6,4 +6,4 @@
'Captcha plugin for Monstra' => 'Captcha dodatak za Monstra',
'Captcha code is wrong' => 'Captcha Kod je pogrešan',
)
);
);

View File

@@ -12,18 +12,17 @@
*/
// Register plugin
Plugin::register(__FILE__,
Plugin::register( __FILE__,
__('Markdown'),
__('Markdown markup language plugin for Monstra'),
__('Markdown markup language plugin for Monstra'),
'1.0.0',
'Awilum',
'Awilum',
'http://monstra.org/');
// Uncomment code below to use Markdown on Site Content
Filter::add('content', 'markdown', 1);
use \Michelf\MarkdownExtra;
include PLUGINS . '/markdown/php-markdown/Michelf/Markdown.php';
include PLUGINS . '/markdown/php-markdown/Michelf/MarkdownExtra.php';

View File

@@ -1,10 +0,0 @@
<?php
return array(
'sandbox' => array(
'Sandbox' => 'Sandbox',
'Sandbox plugin for Monstra' => 'Sandbox-ის პლაგინი Monstra-თვის',
'Sandbox template' => 'Sandbox-ის ნიმუში',
'Save' => 'შენახვა',
)
);

View File

@@ -5,6 +5,6 @@
'Sandbox' => 'Sandbox',
'Sandbox plugin for Monstra' => 'Sandbox dodatak za Monstra',
'Sandbox template' => 'Sandbox šablon',
'Save' => 'Sačuvaj',
'Save' => 'Save',
)
);
);

0
public/assets/img/flags/de.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 292 B

After

Width:  |  Height:  |  Size: 292 B

0
public/assets/img/flags/en.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 389 B

After

Width:  |  Height:  |  Size: 389 B

0
public/assets/img/flags/es.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 398 B

After

Width:  |  Height:  |  Size: 398 B

0
public/assets/img/flags/fa.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 459 B

After

Width:  |  Height:  |  Size: 459 B

0
public/assets/img/flags/fr.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 356 B

After

Width:  |  Height:  |  Size: 356 B

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