Implement visibility for the components groups. Closes#1892
Add functional test that asserts a guest can only see public items.
* Fix tests not running due to hitting the Setup page.
The missing `boostrap/cachet/testing.php` file is now generated the first time tests are ran.
* Add a functional test that asserts logged in users can see all items.
Add constants for possible values for the visible column/field of the ComponentGroup model.
Code review changes.
* Add API tests for component group visibility feature.
* Implement the visibility hidden option for a component group. Fixes#1892.
Add migration for the created_by column, in component_groups table.
Add methods to the ComponentGroup and User models to be able to work with the created_by column.
Hidden component groups are no longer displayed on the index page for loggedin users.
Add functional test for the dashboard page.
Save owner on create/edit component group.
Update the API tests for Component group visibility feature.
* Replace auth() usage with app(Guard::class).
* Apply StyleCI fixes.
* Drop the hidden visibility feature and fix all tests.
Some code review fixes too.
* Rename public to visible since it's a reserved keyword. Apply StyleCI fixes and correct typo.
* Code review changes.
* Tidy up component and component groups gathering.
* Code review changes and StyleCI fixes.
* Code review changes.
* Remove extra whitespace
* Remove useless method.
By default, the file cache is used, but this breaks the throttling detection when authenticating.
The APC cache is tagged and will allow you to log in again after installation.
---
When changing the sort order, a form with hidden inputs for every component was serialized. The hidden inputs
had names in the form of `component[id]`. When you removed components, there would be holes in this ID sequence,
yielding a serialized array with empty values (since JS arrays always have every index until the highest one, even
if you don't specify a value).
This is fixed by just passing an array of component IDs in the desired sort order to the API endpoint. The API
will then update the components based on the implicit given sort order. Much simpler.