All Notable changes to Backpack CRUD
will be documented in this file
- Nothing
- Nothing
- Nothing
- Nothing
- Nothing
checkbox
field was using the default value over the DB value on edit; merges #1239;
text
column had a brokensuffix
attribute; fixed by merging #1261;- not calling trans() in the config file; merges #1270;
allows_null
option todatetime_picker
field type;- #1099 - added
$this->crud->setPageLengthMenu();
API call; - added
config('backpack.crud.page_length_menu')
config variable; summernote
fieldoptions
parameter, for easy customization;- probot to automatically invite contributors to the
Community Members
team, after their first PR gets merged; default
option toselect_from_array
andselect2_from_array
field types; merges #1168;disk
option toimage
field type;
- click on a column header now ignores the previous
orderBy
rules; fixes #1181; merges #1246; date_range
field bug, whereby it threw aCannot redeclare formatDate()
exception when two fields of this type were present in one form; merges #1240;image
column type didn't use the prefix for the image link; merges #1174;- no broken image on
image
field type, when no image is present; merges #444;
number
column type, with prefix, suffix and decimals options;- prefix, suffix and limit to
text
column type; - setLabeller($callable) method to change how labels are made; merges #688;
- support Github probot that automatically closes issues tagged
Ask-It-On-Stack-Overflow
, writes a nice redirect message and gives them the proper link;
- #638 and #1207 - using flexbox for equal height rows for prettier inline errors;
- (Github only) probot auto-replies for first issue, first PR and first PR merged;
- double-click on create form created two entries; fixes #1229;
- CrudRequest; Since it does nothing, CrudController now extends Illuminate\Http\Request instead; merged #1129; fixes #1119;
- laravelcollective/html dependecy;
- base64_image field triggered an error when using the src parameter - merged #1192;
- custom error message for AJAX datatable errors - merged #1100;
- 403 error on AccessDeniedException;
- CRUD alias is now loaded using package-autodiscovery instead of manually in CrudServiceProvider;
- datatables ajax loading screen was askew when also using export buttons;
- ENUM field - Updated
getPossibleEnumValues
to use$instance->getConnectionName()
so that enum values are correctly queried when the Model uses a non-default database connection - merged #650; - addColumn will not overwrite the searchLogic, orderable and tableColumn attributes if otherwise specified;
- Better sorting effect on "table" fields - merged #466;
- When using the Autoset trait, the getDbColumnTypes() method used many separate queries to get the column type and column default; improved performance by merging #1159;
- fakeFields use array_keys_exists instead of isset - merged #734;
- CrudTrait::addFakes now supports objects - merged #1109;
- Chinese translation;
- datetimepicker icon now triggers datetimepicker js - merged #1097;
- columns are now picked up using the database connection on the model - merged #1141; fixes #1136;
- model_function buttons now work for top and bottom stacks too - fixes #713;
- loading image on ajax datatables, with fallback to old "Processing" text;
- answers to hasColumns() are now cached, to minimize number of db queries on list view - merged #1122;
- German translation;
- unit tests for column key functionality;
- you can now define a "key" for a column, if you need multiple columns with the same name;
- in create/update, fields without a tab are displayed before all tabs;
- unit tests now use PHPUnit 6;
- completely rewritten AjaxTables functionality;
- fixed all AjaxTables issues - merged #710;
$this->crud->enableAjaxTable();
still exists for backwards-compatibility, but has been deprecated and does nothing;
- DataTables PHP dependency;
- all tables now use AjaxTables; there is no classic tables anymore;
- removed all classic table filter fallbacks;
- inline validation on nested attributes - merged #987, fixes #986;
- morphed entities caused records in the pivot table to duplicate - merged #772, fixes #369;
- browse field used slash instead of backslash on windows - fixes #496;
- endless loop when using date_range filter - merged #1092;
- prefix option to upload field type;
- when creating an entry, pivot fields were overwriting the $field variable - merged #1046;
- Italian translation file;
- select fields old data values;
- date_range field triggered error on Create;
- bug where non-translatable columns in translatable models got their $guarded updated - merged #754;
- number of records per page menu now features "All", so people can use it before exporting results when using AjaxDataTables;
- prefix option for the image column (merged #1056; fixes #1054);
- daterange field did not use the correct value if the start_date and end_date were not casted in the model - merged #1036;
- PR #1015 - fixes #798 - fixed field order methods;
- PR #1011 - fixes #982 and #971 - fixed column order methods;
- radio column not showing value - PR #1023;
- Added config option to choose if the save actions changed bubble will be shown;
- lv language file spelling error;
- date_picker initial display value offset - PR #767, fixes #768;
- unit test badge from Scrutinizer reported a wrong coverage %;
- clear button to select2_from_ajax field type;
- autoSet is now using the database defaults, if they exist;
- cleaner preview page, which shows the db columns using the list columns (big thanks to AbbyJanke);
- if a field has the required attribute, a red start will show up next to its label;
- shorthand method for updating field and column labels - setColumnLabel() and setFieldLabel();
- select_from_array column type;
- image column type;
- bug where you couldn't remove the last row of a table field;
- Switching from using env() call to config() call to avoid issues with cache:config as mentioned in issue #753;
- UNIT TESTS!!! I KNOW, RIGHT?!
- fourth parameter to addFilter method, that accepts a fallback logic closure;
- ability to make columns non-orderable using the DataTables "orderable" parameter;
- zh-cn instead of zh-CN language folder - fixes #849;
- can't move a column before/after an inexisting column;
- can't move a field before/after an inexisting field;
- fixed beforeField() and afterField() methods;
- fixed beforeColumn() and afterColumn() methods;
- calling setModel() more than once now resets the entry;
- you can now store a fake field inside a column with the same name (ex: extras.extras);
- boolean column values can now be HTML;
- select2 filter clear button now works with ajax datatables;
- select2_from_ajax_multiple field old values fix;
- CrudTrait::isColumnNullabel support for json and jsonb columns in postgres;
- form_save_buttons had an untranslated string;
- deprecated unused methods in CrudPanel;
- text filter type;
- date_range field start_name value always falled back to default - #450;
- hidden field types now have no height - fixes #555;
- image field type can now be modified in size - fixes #572;
- we were unable to save model with optional fake fields - fixes #616;
- Package autodiscovery for Laravel 5.5;
- SluggableScopeHelpers::scopeWhereSlug() signature, thanks to Pascal VINEY;
- translation strings for CRUD export buttons, thanks to Alashow;
- you can now skip mentioning the model for relation fields and columns (select, select2, select2multiple, etc) - it will be picked up from the relation automatically;
- Danish (da_DK) language files, thanks to Frederik Rabøl;
- Brasilian Portugese translation, thanks to Guilherme Augusto Henschel;
- $crud parameter to the model function that adds a button;
- setFromDb() now uses the column name as array index - so $this->crud->columns[id] instead of $this->crud->columns[arbitrary_number]; this makes afterColumn() and beforeColumn() work with setFromDb() too - #759;
- radio field type now has customizable attributes - fixes #718;
- model_function column breaking when not naming it - fixes #784;
- video column type uses HTTPs and no longer triggers console error - fixes #735;
- German translation, thanks to Oliver Ziegler;
- PHP 7.1 to TravisCI;
- resources loaded twice on tabbed forms - fixes #509;
- beforeColumn and afterColumn not working after setFromDb();
- afterField() always placing the field on the second position;
- date_range filter - clear button now works;
- select2 variants load the JS and CSS from CDN now to fix styling issues;
- show_fields error when no tabs on CRUD entity;
- Latvian translation files (thanks to Erik Bonder);
- Russian translation files (thanks to Aleksei Budaev);
- Dutch translation files (thanks to Jelmer Visser)
- allow for revisions by non-logged-in users; fixes #566;
- upgraded Select2 to the latest version, in all select2 fields;
- fixed select2_from_ajax_multiple;
- translated "edit translations" button;
- localize the filters navbar view;
- inline validation error for array fields;
- moved button initialization to CrudPanel constructor;
- pagelength bug; undoes PR #596;
- Backpack\CRUD no longer loads translations, as Backpack\Base does it for him.
- prefix feature to the image field;
- select_multiple has allows_null option;
- details_row for AjaxDataTables;
- email column type;
- fewer ajax requests when using detailsRow;
- redirect back to the same entry - fixed by #612;
- use "admin" as default elfinder prefix;
- datepicker error fixed by Pavol Tanuška;
- simplemde field also triggered ckeditor when place before it, because of an extra class;
- details row column can be clicked entirely (thanks to votintsev);
- simpleMDE bug fixes and features #507 (thanks to MarcosBL);
- allow for dot notation when specifying the label of a reordered item (thanks to Adam Kelsven);
- fixed typo in saveAction functionality;
- checklist field had hardcoded primary key names;
- french translation for buttons;
- Simplified Chinese translation - thanks to Zhongwei Sun;
- date and date_range filters - thanks to adriancaamano;
- fixed horizontal scrollbar showing on list view;
- fixed edit and create extended CSS and JS files not loading;
- fixed AjaxDataTables + filters bug (encoded URL strings);
- replaced camel_case() with str_slug() in tab ids, to provide multibyte support;
- custom created_at and updated_at columns threw errors on PHP 5.6;
- SaveActions typo - fixes #504;
- Allow for custom created_at and updated_at db columns - fixes #518;
- base64_image field - preserve the original image format when uploading cropped image;
- fix bug where n-n relationship on CREATE only triggers error - fixes #512;
- reduce the number of queries when using the Tabs feature - fixes #461;
- Spanish translation;
- Greek translation;
- select2_from_ajax, thanks to MarcosBL;
- Translatable "Add" button in table field view;
- Spatie/Translatable fake columns had some slashed added to the json - fixes #442;
- CrudTrait::getCastedAttributes();
- removed a few PHP7 methods, so that PHP 5.6.x is still supported;
- form save button better UI&UX: they have the options in a dropdown instead of radio buttons and the default behaviour is stored in the session upon change - thanks to Owen Melbourne;
- redirect_after_save button actions;
- filters on list views (deleted the 3.1.41 and 4.1.42 tags because they were breaking changes);
- routes are now abstracted intro CrudRoute, so that new routes can be easily added;
- Greek translation (thanks Stamatis Katsaounis);
- tabbed create&update forms - thanks to Owen Melbourne;
- grouped and inline errors - thanks to Owen Melbourne;
- developers can now choose custom views per CRUD panel - thanks to Owen Melbourne;
- select2_ajax and select2_ajax_multiple field types - thanks to maesklaas;
- excluded _method from massAssignment, so create/update errors will be more useful;
- select2_ajax and select2_ajax_multiple field types have been renamed to select2_from_ajax and select2_from_ajax_multiple for field naming consistency;
- date_range field, thanks to Owen Melbourne;
- select2_ajax and select2_ajax_multiple field types - thanks to maesklaas;
- change the way the CrudPanel class is injected, so it can be overwritten more easily;
- simpleMDE field type - full screen fixed;
- Bulgarian translation, thanks to Petyo Tsonev;
- select2_from_array, thanks to Nick Barrett;
- DateTime Picker error when date deleted after being set - fixes #386;
- Abstracted primary key in select_multiple column - fixes #377 and #412;
- AutoSet methods now using the connection on the model, instead of the default connection; This should allow for CRUDs from multiple databases inside one app; Big thanks to Hamid Alaei Varnosfaderani for this PR;
- Check that the Fake field is included in the request before trying to use it;
- Laravel 5.4 compatibility;
- elfinder redirected to /login instead of /admin, because it used the "auth" middleware instead of "admin";
- deleting a CRUD entry showed a warning;
- allow custom primary key in field types base64_image and checklist_dependency;
- dropdown filter triggered separator on 0 index;
- make sure model events are triggered when deleting;
- in edit view, use the fields variable passed to the view;
- fix conflict bootstrap-datepicker & jquery-ui;
- fix "undefined index: disk" in upload field type;
- revisions;
- Revisions: $this->update() removed many to many relations;
- revisions are sorted by key, not by date, since they keys are auto-incremented anyway; this should allow for multidimensional arrays;
- revisions work when there are hidden (fake) fields present;
- the table in list view is responsive (scrollable horizontally) by default;
- new syntax for details_row URL in javascript;
- new syntax for the current URL in layout.blade.php, for making the current menu items active;
- Chinese (Traditional) translation, thanks to Isaac Kwan;
- You can now create a CRUD field to overwrite the primary key, thanks to Isaac Kwan;
- Escaped table name for ENUM column types, so reserved PHP/MySQL names can also be used for table names; Fixes #261;
- CrudTrait's isColumnNullable() should now work for multiple-database systems, by getting the connection type automatically;
- Can use DB prefixed tables in CrudTrait's isColumnNullable(); fixes #300;
- Radio field type could not be used inside Settings; Now it can;
- select_from_array field triggered an "Undefined index: value" error; fixes #312 thanks to Chris Thompson;
- Prevent double-json-encoding on complicated field types, when using attribute casting; Fixes #259;
- Don't mutate date/datetime if they are empty. It will default to now;
- select_from_array has a new option: "allows_multiple";
- syncPivot is now done before saving the main entity in Update::edit();
- added beforeColumn(), afterColumn(), beforeField() and afterField() methods to more easily reorder fields and columns - big up to Ben Sutter for this feature;
- a filter will be triggered if the variable exists, wether it's null or not;
- if the elfinder route has not been registered, it will be by the CrudServiceProvider;
- $this->crud->with() method, which allows you to easily eager load relationships;
- auto eager loading relationships that are used in the CRUD columns;
- select and select_multiple columns use a considerably lower number of database queries;
- Better ability to interact with the entity that was just saved, in EntityCrudController::create() and update() [the $this->crud->entry and $this->data['entry'] variables];
- Allow mixed simple and complex column definitions (thanks JamesGuthrie);
- disable default DataTable ordering;
- n-n filters prevented CRUD items from being added;
- filters on list view;
- fixed video field having an extra input on page;
- fixed hasUploadFields() check for update edit form; fixes #211;
- fixed SimpleMDE which was broken by last commit; really fixes #222;
- SimpleMDE field type did not allow multiple such field types in one form; fixes #222;
- Boolean column type triggered error because of improper use of the trans() helper;
- SimpleMDE field type (simple markdown editor).
- new column type: boolean;
- new field type: color_picker;
- new field type: date_picker;
- new field type: datetime_picker;
- fixed default of 0 for radio field types;
- fixes #187 - can now clear old address entries;
- fixes hiding/showing buttons when the min/max are reached;
- ckeditor field type now has customizable plugins;
- Config file is now published in the right folder.
- all fields now have hint, default value and customizable wrapper class - thanks to Owen Melbourne; modifications were made in the following fields: base64_image, checklist, checklist_dependecy, image;
- creating/updating elements works with morphable fields too; you need to define "morph" => true on the field for it to work;
- isCollumnNullable is now calculated using Doctrine, so that it works for MySQL, PosgreSQL and SQLite;
- video field type - thanks to Owen Melbourne;
- $this->crud->removeAllButtons() and $this->crud->removeAllButtonsFromStack();
- upload_multiple field did not remove the files from disk if no new files were added; solved with a hack - added a hidden input with the same name before it, so it always has a value and the mutator is always triggered;
- elFinder height needed a 2px adjustment in javascript; now that's solved using css;
- When elfinder is launched as it's own window, display full-screen;
- Update routes and editor links to follow the route_prefix set in config;
- elFinder iframe now has no white background and uses backpack theme;
- 'table' field is properly encapsulated now;
- bug fix for 'table' field type - you can now have multiple fields on the same form;
- table field JSON bug;
- address field type - thanks to Owen Melbourne;
- autoFocus() and autoFocusOnFirstField() - thanks to Owen Melbourne;
- checklist and checklist_dependency fields allow html on labels;
- "table" field type - thanks to Owen Melbourne;
- "multidimensional_array" column type - thanks to Owen Melbourne;
- Non-core CRUD features are now separated into traits;
- The 'password' field is no longer filtered before the create event;
- CrudPanels can now be defined in the new EntityCrudController::setup() method;
- AJAX datatables can now have select_multiple columns;
- checkbox field has default value;
- Raw DB queries did not account for DB prefixes;
- Radio field and column - thanks to Owen Melbourne;
- Missing $fillable item in model will now throw correct error, because _token is ignored;
- Correct and complete language files;
- Checkbox storing issue in Laravel 5.3 - #115 thanks to timdiels1;
- Revisions functionality, thanks to se1exin;
- French translation, thanks to 7ute;
- iconpicker field type;
- removeButton and removeButtonFromStack functionality, thanks to Alexander N;
- "prefix" and "suffix" optional attributes on the number and text field types;
- upload and upload_multiple can be used for S3 file storage too, by specifying the disk on the field;
- image field type - stores a base64 image from the front-end into a jpg/png file using Intervention/Image;
- upload_multiple field type;
- upload field type;
- setFromDb() no longer creates a field for created_at;
- Export buttons for CRUDs - to PDF, XLS, CSV and Print, thanks to Nathaniel Kristofer Schweinberg;
- a "view" field type, which loads a custom view from a specified location; thanks to Nathaniel Kristofer Schweinberg;
- save, update and reorder now replace empty inputs with NULL to allow for MySQL strict mode on (a default in Laravel 5.3) (#94)
- Allow HTML in all field labels (#98)
- Laravel 5.3 support;
- adding buttons from views did not work; fixes #93;
- Removed recurring comment from list view; Fixes #92;
- Added check for permission in the CrudController::search() method for allowing the AJAX table only if list is enabled;
- Removed double-token input in Create view; Fixes #89;
- Fixed AJAX table view with big data sets - was still selecting all rows from the DB; Fixes #87;
- Custom pivot table in select2 and select2_multiple fields; Fixes #75;
- Reorder view works with custom primary keys; fixes #85;
- URLs in views now use the backpack.base.route_prefix; fixes #88;
- Spanish translation, thanks to Rafael Ernesto Ferro González;
- PHP dependency, since it's already settled in Backpack\Base, which is a requirement;
- base64_image field type, thanks to deslittle;
- automatic route names for all CRUD::resource() routes;
- PDO Support;
- default column values on the setFromDb() function;
- Bogus unit tests. At least we'be able to use travis-ci for requirements errors, until full unit tests are done.
- Auto-registering the Backpack\Base class;
- Improved documentation for those who want to just install Backpack\CRUD;
- Auto-registering the Backpack\Base class;
- Improved documentation for those who want to just install Backpack\CRUD;
- Ctrl+S and Cmd+S submit the form;
- added last parameter to addButton() function which determines wether to add the button to the beginning or end of the stack;
- 'array' column type (stored as JSON in the db); also supports attribute casting;
- support for attribute casting in Date and Datetime field types;
- wrapperAttributes to all field types, for resizing with col-md-6 and such;
- 'default' value for most field types;
- hint to most field types;
- extendable column types (same as field types, each in their own blade file);
- 'date' and 'datetime' column types;
- 'check' column type;
- button stacks;
- custom buttons, as views or model_function;
- registered service providers in order to simplify installation process;
- configurable number of rows in the table view, by giving a custom value in the config file or in the CRUD panel's constructor;
- "required" functionality with just added asterisks to the fields;
- renamed the $field_types property to $db_column_types to more accurately describe what it is;
- issue #58 where select_from_array automatically selected an item with value zero;
- custom html attributes are now given to the field in a separate array, 'attributes';
- model_function_attribute column type (kudos to rgreer4)
- Support for $primaryKey variable on the model (no longer dependant on ID as primary key).
- Fix removeField method
- Improve autoSetFromDB method
- Old input value on text fields in the create form;
- "Please fix" lang text.
- Translate browse and page_or_link fields
- Split the Crud.php class into multiple traits, for legibility;
- Renamed the Crud.php class to CrudPanel;
- Tone's old field types (were only here for reference);
- Tone's old layouts (were only here for reference);
- $crud->hasAccessToAny($array) method;
- $crud->hasAccessToAll($array) method;
- CrudController - use passed request before fallback to global one;
- select_multiple worked, select2_multiple did not; #26
- Allow HTML in fields help block;
- Italian translation;
- Browse field parameter to disable readonly state;
- multiple browse fields on one form did not work;
- multiple browse fields on one form did not work;
- browse field did not work if Laravel was installed in a subfolder;
- browse field Clear button did not clear the input;
- select_from_array field did not work;
- Crud::setFromDb() now defaults to NULL instead of empty string;
- Route::controller() - it's been deprecated in Laravel 5.2, so we can't use it anymore;
- page_or_link field type now has a 'page_model' attribute in its definition;
- Text columns can now be added with a string $this->crud->addColumn('title');
- Added hint to the 'text' field type;
- Added the 'custom_html' field type;
- Elfinder triggered an error on file upload, though uploads were being done fine.
- Removing columns was fixed.
- Fields with subfields did not work any more (mainly checklist_dependency);
- Easier CRUD Field definition - complex fields no longer need a separate .js and .css files; the extra css and js for a field will be defined in the same file, and then pushed to a stack in the form_content.blade.php view, which will put in the proper after_styles or after_scripts section. By default, the styles and scripts will be pushed to the page only once per field type (no need to have select2.js five times onpage if we have 5 select2 inputs)
- Changed existing complex fields (with JS and CSS) to this new definition.
- Working CRUD API functions for adding fields and removing fields.
- Removed deprecated file: ToneCrud.php
- Crud.php fixes found out during Backpack\PermissionManager development.
- Added developers to readme file.
- Call-based API.
- Fixed some scrutinizer bugs.
- Added page title.
- Added a custom theme for elfinder, called elfinder.backpack.theme, that gets published with the CRUD public files.
- Using LangFileManager for translatable models instead of Dick's old package.
- Lang files are pushed in the correct folder now. For realsies.
- language files are published in the correct folder, no /vendor/ subfolder
- CRUD::resource() now also acts as an implicit controller too.
- firstViewThatExists() method in CrudController - its functionality is already solved by the view() helper, since we now load the views in the correct order in CrudServiceProvider
- elFinder erro "Undefined variable: file" is fixed with a composer update. Just make sure you have studio-42/elfinder version 2.1.9 or higher.
- Added authentication middleware to elFinder config.
- Fixed ckeditor field type.
- Added menu item instructions in readme.
- Changed folder structure (Http is in app folder now).
- Changed name from Dick/CRUD to Backpack/CRUD.
- Entrust permissions.
- two or more select2 or select2_multiple fields in the same form loads the appropriate .js file two times, so error. this fixes it.
- CRUD list view bug fixed thanks to Bradis García Labaceno. The DELETE button didn't work for subsequent results pages, now it does.
- CrudRequest used classes from the 'App' namespace, which rendered errors when the application namespace had been renamed by the developer;
- CrudController used classes from the 'App' namespace, which rendered errors when the application namespace had been renamed by the developer;
- added new column type: "model_function", that runs a certain function on the CRUD model;
- bumped version;
- update_fields and create_fields were being ignored because of the fake fields; now they're taken into consideration again, to allow different fields on the add/edit forms;
- DateTime field type needed some magic to properly use the default value as stored in MySQL.
- Fixed bug where reordering multi-language items didn't work through AJAX (route wasn't defined);
- allTranslations() method on CrudTrait, to easily get all connected entities;
- withFakes() method on CrudTrait, to easily get entities with fakes fields;
- CRUD Alias for handling the routes. Now instead of defining a Route::resource() and a bunch of other routes if you need reorder/translations etc, you only define CRUD:resource() instead (same syntax) and the CrudServiceProvider will define all the routes you need. That, of course, if you define 'CRUD' => 'Dick\CRUD\CrudServiceProvider' in your config/app.php file, under 'aliases'.
- CRUD Multi-language editing. If the EntityCrudController's "details_row" is set to true, by default the CRUD will output the translations for that entity's row. Tested and working add, edit, delete and reordering both for original rows and for translation rows.
- CRUD Details Row functionality: if enabled, it will show a + sign for each row. When clicked, an AJAX call will return the showDetailsRow() method on the controller and place it in a row right below the current one; Currently that method just dumps the entry; But hey, it works.
- In CRUD reordering, the leaf ID was outputted for debuging.
- New field type: page_or_link; It's used in the MenuManager package, but can be used in any other model;
- Actually started using CHANGELOG.md to track modifications.
- Reordering echo algorithm. It now takes account of leaf order.