Releases: evolution-cms/evolution
2.0.0-alpha
MODX Evolution is dead! Long live Evolution CMS 2.0 using Laravel components
What is Evolution CMS 2.0?
Evolution CMS 2.0 is the latest release of the popular content management system. While it works like before, underneath it's a major overhaul of a CMS that began life in 2004. The code has been modernised using components from Laravel. Gone is the infamous DocumentParser
class, a collection of disparate functions. In its place are structured components for cache, events, logging, file system, cofig, console, migrations, seeders, Blade templating, models Eloquent, Observers, ServiceProvider and more.
A bit of history
- Developers Raymond Irving and Ryan Thrash unveiled the first release of MODX CMS in 2004.
- After MODX Revolution was released in 2012, the original MODX CMS (now called MODX Evolution) received minimal updates from the MODX LLC development team. A group of keen users from the MODX community stepped up to continue development.
- In March 2013, MODX Evolution 1.0.9 was released (https://habr.com/post/173667/), created exclusively by the community, under the leadership of Dmytro Lukianenko and Evgeny Borisov (who continue to work on Evo to this day). Releases were made under the auspices of MODX LCC (via modx.com).
- In April 2017, MODX LCC cut its involvement with MODX Evolution (https://modx.com/blog/evolution-cms-has-a-new-home). Since then, our team has chosen its own development course.
- In July 2017, we made the first release of the newly-renamed Evolution CMS. Evolution CMS 1.3.0 https://github.com/evolution-cms/evolution/releases/tag/1.3.0 had a completely redesigned interface and a number of new features that embodied the wishes of the community.
- In November 2017, at the MODXpo conference, Lukianenko Dmytro successfully gave a report on progress with Evolution CMS (https://modcasts.video/videos/evo-cms-life-after-modx).
- January 2018 saw the second major release of Evolution CMS 1.4.0 (https://github.com/evolution-cms/evolution/releases/tag/1.4.0), which radically changed a number of approaches in development.
- In June 2018 it was decided to rewrite the Evolution CMS using Laravel components, with the prerequisite of maintaining full backward compatibility.
- Now in December 2018 we are proud to present the first release of Evolution CMS 2.0.
A very important requirement was preserving backward compatibility with old versions of Evolution CMS and MODX Evolution, and we did it! You can safely upgrade your website from version 0.9.6 released in 2005 to 2.0. Only any code written without using the MODX Evolution API must be changed. All standard add-ons are updated and work with the new version.
Why did we choose Laravel?
There are many PHP frameworks but Laravel stood out because of its:
- Extensive documentation
- Active support
- A lot of ready-made packages that can be used on Evolution 2.0
Initially, we saw only two ways: to continue working with obsolete Evolution code, while the community scattered and developers left the project, or to start writing a new CMS while keeping the old development paradigm people liked (the resource tree, chunks, snippets, TV parameters etc).
But we found the third option in which we gradually refactored the outdated code whilst maintaining backward compatibility.
Why Evolution CMS 2.0?
Evolution CMS is simple. You can understand how to work with it in a couple of evenings, and if you want to write code for it, the knowledge is the same as working with any Laravel project. Now you don't need to learn something that's only useful when working with Evolution CMS. This gives us universal appeal, as it's easy to switch between systems.
Will my existing Evolution CMS website continue to work?
Yes! Sites built the traditional way will continue to work, but the new flexibility and innovation won't be visible.
Great! How can I start migrating my site to the new features?
The small transition in Evolution CMS 2.0 from the $modx->config
array to using the $modx->getConfig()
method already allows you to manipulate the system settings of the engine, which are taken from the database. You can prepare for this change in your snippets right now, because the getConfig()
method has been available since version 1.4.
Plugins for events can be created as before via the admin area or (new in Evolution CMS 2.0) through files. All this improves team development, simplifies project management through git. Developers will appreciate the convenience of storing the website configuration in Git.
Why should I learn something new and not stay with 1.4?
On version 1.4 you cannot install a site with one click. 1.4 doesn't have a good story for dev and production versions. Neither can you easily store templates in Git, or use database migrations etc. In version 2.0, this is all there.
Can you use ready-made Laravel components with Evolution CMS?
Yes!
Here is a package for generating Entity Relation diagrams from the database (https://github.com/beyondcode/laravel-er-diagram-generator) Installing it requires you to run composer:
composer require beyondcode/laravel-er-diagram-generator --dev
and create a provider file (core/custom/config/app/providers/Diagram_Generator. php) containing 1 line:.
return BeyondCode\ErdGenerator\ErdGeneratorServiceProvider::class;
Done!
Let's start:
New settings and advantages
-
The entire core/config folder and core/custom/config is already working with Laravel-style configs. To use the .env file, you must install the package vlucas/phpdotenv through the composer
-
Working with Composer: adding dependencies to core/custom/composer.json and executing composer upd from the core folder
-
For convenience, we will enable debugging tools: Debug and debugbar Tracy
- Debug: create file core/custom/config/app/debug.php with code:
<?php return true;
- function dump shows information in a beautiful way:
<?php dump($modx);
-
Folder with logs core/storege/logs
-
Tracy: create file core/custom/config/tracy/active.php with code:
<?php return 'manager';
Working with Templates and Chunks using the BLADE template engine from files without using the admin panel
Linking templates to the document without EVO admin panel
To work, we need to create a folder views in the root of the site, in which we will have templates. Actually and everything, no additional actions in the form of installing anything is required.
Plugin searches for templates in such order:
- tpl-3_doc-5.blade.php - use this if resource id=5 and resource template=3;
- doc-5.blade.php - use this if resource id=5;
- tpl-3.blade.php - use this if resource template=3.
- example.blade.php - use this if resource templatealias = example;
Working with standard elements using the BLADE template engine
Before you start working with BLADE, we strongly recommend that you read the BLADE documentation: https://laravel.com/docs/6.0/blade
//Display plaсeholder [*pagetitle*]:
{{ $documentObject['pagetitle'] }}
{{ $modx->documentObject['pagetitle'] }}
//Display TV plaсeholder
{{ $documentObject['image'] }}
{{ $modx->documentObject['image']['1'] }}
//Display URL [~2~]
{{ urlProcessor::makeUrl('2') }}
{{ $modx->makeUrl('2') }}
@makeUrl('2')
//Use system settings [(site_name)]
{{ $modx->getConfig('site_name') }}
//Use chunk from db: {{chunkFromDb}}
{{ $modx->getChunk('chunkFromDb') }}
//Use chunk from file: (/views/partials/chunk.blade.php)
@include('partials.chunk', ['some' => 'data'])
//Use snippet: [[DocInfo? &docid=`2`]]
{{ $modx->runSnippet('DocInfo',['docid' => '2']) }}
//Display the output of snippet without escaping html tags
{!! $modx->runSnippet('DocInfo',['docid' => '2']) !!}
//Standart MODX Parser
@evoParser('[*pagetitle*] [(site_name)] [[DocInfo]] @{{chunkOld}}')
//Use of comments
{{-- This comment will not be in the final HTML --}}
//IF (All of the documentation for BLADE):
@for ($i = 1; $i <= 10; $i++)
{{ $i }}
@if ($i != 10)
,
@endif
@endfor
//Work with php inside template (not recomended)
@php
dump($modx); //beautiful var_dump
$chunk = '{{ $data["param1"] }}';
$chunk .= '{!! $data["param1"] !!}';
@endphp
//or
<?php
dump($modx); //beautiful var_dump
$chunk = '{{ $data["param1"] }}';
$chunk .= '{!! $data["param1"] !!}';
?>
{{ $modx->tpl->parseChunk('@B_CODE:'.$chunk, ['param1' => 'value with "quote"']) }}
{{ time() }}
//Doclister with inline BLADE template
{!! $modx->runSnippet('DocLister',['parents' => '0', 'tpl' => '@B_CODE:{{ $data["pagetitle"] }}<br />']) !!}
//DocLister with BLADE template from file (/views/partials/doc-tpl.blade.php)
{!! $modx->runSnippet('DocLister',[
'parents' => '2',
'tpl' => '@B_FILE:partials/doc-tpl',
])
!!}
An example of a finished template using BLADE can be found here: https://github.com/dmi3yy/Evo-demosite-on-blade
Working with ...
1.4.7
Bug fix release
1.4.6
Evolution CMS 1.4.6
We decided before release 2.0 Alpha (very soon), on which we have been working hard lately, to devote some time to the 1.4.x branch, so meet release 1.4.6.
The main works were aimed at stability of work + on safety, now the OutdatedExtrasCheck plugin takes information from the server, thus information on additions that have security problems will appear on the dashboard, which will give even more chances to learn about possible problems with security and fix it promptly.
From interesting in 1.4.6:
- Support for working with MySQL 8.0
- Support for MySQL in strict mode
- Support for working with PHP 7.3.0RC3
- OutdatedExtrasCheck now checks outdated add-ons from the server and not locally.
- A big DocLister update to version 2.4.0 (read more here: https://github.com/AgelxNash/DocLister/releases/tag/2.4.0)
- update FormLister to 1.8.0
- phpMailer has been updated to 6.0.5
- phpthumb updated to 1.7.15
- Finally removed mootools.js
- Correct transfer of the event name when using nested events #844
- Styled webAlertAndQuit #26
- Added the ability to change the server MYSQL port #819
- Check for a minimum version of AjaxSearch updated to version 1.12.1 (I strongly recommend updating AjaxSearch for security and virus protection purposes)
- Added the ability to specify the login form in the light version for those who do not like the dark :)
- Fixed a lot of errors, a full list of which can be found here: https://github.com/evolution-cms/evolution/blob/1.4.x/assets/docs/changelog.txt
- Updated snippet DocInfo added new templid option more here: #806
- Fixed bug with displaying SVG
- Fixed URL generation for document created via MODxAPI
- rewrote the methods: getChunk and parseChunk on those that DLTemplate
- Fixed a bug in the getTemplateVar, getTemplateVars API with the choice of fields
- Corrected: Managers do not show user groups
- Multiple XSS vulnerabilities in admin panel closed
1.4.5
In 1.4.5, the main attention was paid to correcting errors and also checking that everything worked as stably as possible.
It was corrected a lot of mistakes and added some useful things.
- Updated KCFinder and added new events to it
- Fixed issues with TinyMCE4
- Support for MySql 8
You can see the full list of changes here:
https://github.com/evolution-cms/evolution/blob/1.4.x/assets/docs/changelog.txt#L4-L64
I also want to inform you that this is the last release of the 1.4 branch (there may be 1.4.6 if found critical errors or security problems) and now we are completely concentrating on work on the 2.0 branch that will work on Laravel components. In general, a lot of work in this direction already done: https://github.com/evolution-cms/evolution/commits/2.x, but there is still a lot of work that we plan to do before the release. I think that this autumn will be very saturated for EVO.
1.4.4
Most interesting in this release:
- Redesigned login page, as well as the added opportunity in the settings to specify the logo and background for this page
- Added change of menu position: Top / left (can be changed in settings)
- Fixed problem with scrolling on iOS devices
- Added mobile mode for tinyMCE4
- fixed problem (HTTP2 / SSL & check connection to server)
- Singleton: instead of using global $ modx; it is recommended to use $ modx = EvolutionCMS ();
- Fixed bug in the OnParseProperties event
- TVs that are without a category remain in the local tab (when using the settings for moving TV)
- Cross-Site Scripting https://www.exploit-db.com/exploits/44775/ Site name field XSS fix
- Added support for Ctr + Alt + L for PhpStorm
- fixed MySql strict mode error in the admin area
- Added events for publication and removal of publication of documents
- Reduced the size of the log that phpmailer produces on error
- Now you can return data from different types of plug-ins, not just lines
- Added OnBeforeMinifyCss event
- Automatic set from in mail from the system settings if not specified
1.4.3
You can set this in:
- Configuration > Interface & features > Color Scheme
- Users > Manager User > Tab user > Color Scheme
- Sidebar-> TreeMenu -> last icon after trash
Other things:
- update DocLister (dmi3yy)
- update Formlister (dmi3yy)
- more checks in cli mode (Pathologic)
- Missing introtext in Recent Resources (Piotr Matysiak)
- Fix #603 bug for resource tree scrolling (Piotr Matysiak)
- moved JS code to a file manager/media/script/main.js (Serg)
- fix empty template on save tv (Serg)
- [F] #577 Fix TinyMCE for [introtext] (Deesen)
- Fix Extras buttons on 1.4.1 #571 (dmi3yy)
- add user_agent info to manager_log (dmi3yy)
- write manager IP address to manager_log (dmi3yy)
- fix 577 TinyMCE introtext mode not work (dmi3yy)
- fix notice (Serg)
- fix TinyMCE disable after update to 1.4.2 (dmi3yy)
- fix possible wrong path calculation (Pathologic)
- [I] Wrap TinyMCE3 Toolbar (Mr B)
- [F] Prevent long select option text values overflowing container (Mr B)
- add view ability for ini files in manager files (dmi3yy)
- fix demo site (Formlister, param reply-to) (dmi3yy)
1.3.7
1.4.2
Now you can install from comand line with composer:
composer create-project evolutioncms/evolution
- php cli-install.php --database_server=localhost --database=db --database_user=dbuser --database_password=dbpass --table_prefix=evo_ --cmsadmin=admin --cmsadminemail=[email protected] --cmspassword=123456 --language=ru --mode=new --installData=n --removeInstall=y (dmi3yy)
- run install file (dmi3yy)
- Install Evo from console: (https://monosnap.com/file/Tj21cmlMhZXNJdRXfKBLAvTlJcElkJ) (dmi3yy)
- fix for use html tags in name (dmi3yy)
- [F] #577 Fix "undefined index"-notice (Deesen)
- [C] #577 TinyMCE4 code clean-up (Deesen)
- fix (document.parser.class.inc.php) sendStrictURI (Ruslan)
- modernize default theme (Serg)
- Globat Tabs by Default On (dmi3yy)
- add .tpl for create file from filemanager (dmi3yy)
- correct getTpl (Serg)
- add composer.json (dmi3yy)
- fix lang error (dmi3yy)
- update DocLister and FormLister (dmi3yy)
- fix escapeshellarg disabled for security reason (dmi3yy)
- Update english.inc.php (Mr B)
- Update mainmenu.php (Mr B)
- fix #559 Zend OPcache API is restricted by "restrict_api" configuration directive (Pathologic)
- fix #563 Error when upgrading to 'phpmailer sender property' commit(Pathologic)
- phpmailer sender property (Pathologic)
- fix only variables can be passed by reference (Pathologic)
- log only public properties of MODxMailer (Pathologic)
1.4.1
- [F] DocLister Extra install gives warning #463 (Pathologic)
- [F] install error on PHP 7.2 (Vitaliy Rudnyh)
- [F] #481 Fix export of Static-HTML with FURLs enabled (Deesen)
- [F] global tabs dont work on 1.4 with manager role #484 (64j)
- [F] Cookies mess in startCMSSession #396 (Pathologic)
- [F] Store module unparsed placeholders (Pathologic)
- [F] broken OnWUsrFormRender event (Pathologic)
- [F] Fix Information tab logo path (Mr B)
- [F] Missing hover style for TV Insert #475 (64j)
- [F] fix for moving content to another tab (Mr B)
- [F] Deactivated user is active after forgot password mail #42 (Pathologic)
- [F] conflict with manager and web-user sessions #258 (Pathologic)
- [F] #477 Cache plugin-properties using parseProperties() (Deesen)
- [F] 1.4.0 not work params in chunks #478 (Pathologic)
- [F] tree buttons JS (Piotr Matysiak)
- [U] Quick Manager+ and some fix (Mr B)
- [U] FormLister (Pathologic)
- [U] DocLister (Agel_Nash)
- [I] random table prefix (Agel_Nash)
- [I] Check exists mysqi extension (Vitaliy Rudnyh)
- [I] Outdated Extras Check (Nicola)
- [I] ability to use extended DocumentParser class (Pathologic)
- [I] Extras/Store - New feature "Install by file-upload" - accepts ZIP-files from https://github.com/extras-evolution/ (Deesen)
- [I] Updated TinyMCE4 to v4.7.4 (from v4.6.3) - added param "mobile" to theme.base - added param "Skin-Theme" to settings (Deesen)
- [R] MODxMailer - log only public properties (Pathologic)
1.4.0
Evolution CMS 1.4.0
For half a year, a lot of work has been done (more than 600 commits), so this is the second major release of Evolution CMS. The first one can be read here (https://github.com/evolution-cms/evolution/releases/tag/1.3.0). The main emphasis of this release is stability of the system, as well as updating and replacing old snippets by new ones (don´t worry, old snippets will still be supported via Evolution Extras). So it is possible now to create sites even faster, as well increasing the performance of already existing sites. One main reason for better performance is DocLister, the replacement for Ditto.
Most important facts:
- Demo Site has been updated, all old components have been replaced by new ones, while old components are still available in the extras-repository, but are not recommended for use.
- Ditto -> DocLister
- Wayfinder -> DLMenu
- Breadcrumbs -> DLCrumbs
- Eform -> FormLister
- WebLogin -> FormLister
- WebChangePwd -> FormLister
- WebSignup -> FormLister
- Added DLSitemap
- AjaxSearch moved to Extras
- FirstChildRedirect moved to Extras
- Jot moved to Extras
- MemberCheck moved to Extras
- Personalize moved to Extras
- Reflect moved to Extras
- UltimateParent moved to Extras
- Upgraded phpMailer to 6.0.3
- New feature "Global tabs"
- Grinding TV
- Widget changes the color scheme of the admin area, the button is fullscreen and creates a new document in the menu
- Modifiers disabled by default
- At-Syntax (@-syntax) disabled by default
- New
$modx->clearCache($docid)
- Custom Placeholders get replaced before TVs - allows {{chunk? ¶m=
xxx
}} with [tv_name_[+param+]] as content inside (useful in conjunction with YAMS) - added CSS-minify to manager theme
- Fixed popup window from the context menu. Closing a popup window when "saving" or button press "cancel". Hot keys: Esc->Close, Ctrl+S -> Save, Ctrl+Q -> Save and quit (if focus is in codeMirror editor)
- friendly_url_suffix = / and aliaslistingfolder
- fixed special chars in passwords via htmlspecialchars()
Upgrade to version 1.4
In order to correctly update from older versions and also exclude the possibility, that there are unnecessary files and security problems left on the site, do the following:
- Do Backup files and DB
- Update to version 1.3.6 - it includes all the old add-ons that were removed in 1.4.0, it provides the opportunity to update all add-ons such as Ditto, EForm, WebLogin
- Delete all the old admin themes (manager / media / style), except "default" and "common"
- Delete the file index-ajax.php - it was used only for AjaxSearch prior to version 1.0.10, leave if you use it for other purposes and you know what you are doing.
- As well as to remove garbage to the maximum, you need to delete the manager folder after making a backup of the file
manager/includes/config.inc.php
, then copy files from version 1.4.0 - We strongly recommend that you remove all unused old snippets such as: Ditto, Wayfinder, Eform, Breadcrumbs, WebLogin, WebChangePwd, WebSignup
- There is a problem when updating the ManagerManager plug-in from older versions, to solve the problem delete the managermanager folder and install/copy latest version
- TinyMCE3: It is also recommended to disable and delete all its files if you do not use it.
- If you use Modifiers and/or @-syntax then check in the settings if they are enabled. By default in 1.4 these options are disabled.
- If the site is very old, it is recommended to check your server-files for viruses: https://revisium.com/aibo/
Replacing old snippets with new ones
- As an example, you can install Evo with a demo site, which is already using new snippets.
- To migrate from Ditto to DocLister, the following examples will help:
- http://docs.evo.im/03_extras/doclister.html
- http://www.evolution-docs.com/extras/doclister/main-parameters
- https://github.com/Nicola1971/Doclister-Tags-in-Ditto-Style
- https://github.com/Nicola1971/Ditto-to-DocLister-Reference-Tables
- To migrate from Wayfinder to DLMenu
- To migrate from BreadCrumbs to DLCrumbs
- To migrate from Eform, WebLogin to FormLister
Future plans for version 1.5
- One main goal is to be able to update everything completely by using Extras, adding the ability to not only install add-ons but also uninstall them clean.
- Integrating Extras into the installation-process, with a recommended set of add-ons preselected by default, and the option to disable add-ons that are not required. This way the Evo main-package will be significantly smaller, and unnecessary files will not clutter your installation.
- This allows to install all add-ons from Extras already in the initial installation-process
- Appearance of the admin area: Updating Bootstrap to version 4, as well as fontAwesone + making it possible to use. Create a basic template in which all the elements of the admin area are given, so you can create and use your own themes, to allow custom concepts of the admin area.
- Also planned: Rebuild the admin on a twig template that will give even more flexibility, for example, change the look of the page without using ManagerManager, which can slow down performance in case there are too many TV parameters. Let´s see how it works out.