Note: for diff see: https://github.com/atk4/atk4/compare/4.2.3...4.2.4
- Added PSR-2 compliance to many core files. Will continue to improve other classes too.
- Added composer.json. Agile Toolkit can be installed through Composer now
- when calling setController, second argument can specify name or default options
- Security fixes in Logger
- added each() method (similar to jQuery) for model and dsql. Will execute specified callable for each row.
- added support for <?js?> into templates
- api->addSharedLocation() is now called (if defined) by PathFinder before any locations are initialized
- added ApiInstall for building installers. For now undocumented as it might still change. Use with care.
- improved error outputting. Removed obsolete code and better highlight line which produced error
- improvements in Tester
- upgrade to jQuery 1.8.3 and jQuery UI 1.9.2
- added tools/getjq which automates bungling of jquery and jquery ui (also updates PHP)
- remove ability to debug models through GET argument
- improved support for nested namespaces, added PSR-0 compliance for pathfinder
- prevent readonly field from erasing field value
- added VirtualPage, allowing you to create separate blank page and display that instead. Useful in popups.
- added PHPCS sniff configuration for Agile Toolkit style validation (tools/phpcs)
- sql migration scripts now can output things with "select 'blah';" during migrations
- bug-fixes as usual
- CRUD is refactored using VirtualPage and new button. Now much more extensible and faster.
- CRUD->addRef() allow to drill into model's hasMany() relation through crud inside expander. Uses VirtualPage
- CRUD->addFrame() is a handy way now to create pop-up with some UI. Uses VirtualPage
- CRUD now shows better labels on buttons and dialogs (Add User instead of Add)
- allow_add, allow_edit, etc are now protected. Don't change them directly, specify through add() options.
- severely improved handling of NoSQL models
- added MemCache support
- added Session support
- added loadBy and similar methods
- several bug fixes
- severily improved handling of NoSQL models
- added support for caching (addCache())
- group() supports expressions now
- casting DSQL to string executes getOne() instead of returning selecting
- above fix revelaed many minor bugs. fixed them.
- added dsql->fieldQuery(), similar to model->fieldQuery(). Will delete other fields and query only specified one
- dsql->sum() improved
- order() for DSQL and Models chaining rule changed. Last call to order() will now be the main sorting order. Calling order with multiple arguments behaves in same way
- expr("hello, [name]",array('name'=>'world')) is now properly supported. Currently does not escape, BUT WILL!
- will silently ignore incorrect join type (otherwise it's considered as table alias creating SQL errors)
- added Model_Table->tryDelete()
- added sorting and limit support for Model (non-relational)
- hasMany can now be aliased by specifying 4th argument, which is then used inside ref().
- changed scrolling behaviour and vertical sizing of frameURL / dialogURL
- fixed form's behaviors with shortened names
- improved icon-only button handling (uses text=false)
- checkboxes widget has 2 new methods - select_all and unselect_all
CSS and LESS:
- separated out mixing into atk4-mixins.less
- removed prefix (used to be 'ui-icon') from Button->setIcon().
- readonly fields are displayed with nl2br
- form->setLayout() also supports SMlite object (if you don't want to specify a file)
- see HTML produced by any view by calling view->debug()
- added Menu_jUI - jQuery-compatible menu
- added View_DropButton
- added View_Flyout
- menu URL can be jQuery_Chain now
- Quicksearch and Grid cleaned up
- CompleteLister total counting changed. instead of $totals['row_count'] use $total_rows
- Filter improved
- Grid's multi-value fields will now show value instead of key.
- Cleaned up model type => form field type associations in MVCForm
- setProperty() is now obsolete, so use setAttr()
- added ability to specify a different Logger class through $logger_class property
- added destroySession into ApiWeb
- removed Form_Field->setNotNull() use validateNotNull instead
- removed Form_Field->setDefault() and getDefault(), use set() / get()