mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Merge remote-tracking branch 'origin/4.6' into 4
This commit is contained in:
commit
8d6a248431
@ -952,8 +952,6 @@ skipConfigs:
|
|||||||
excludedPaths:
|
excludedPaths:
|
||||||
- '*fixtures*'
|
- '*fixtures*'
|
||||||
- '*vendor*'
|
- '*vendor*'
|
||||||
doctorTasks:
|
|
||||||
SilverStripe\Dev\Upgrade\UpgradeBootstrap: src/Dev/Upgrade/UpgradeBootstrap.php
|
|
||||||
warnings:
|
warnings:
|
||||||
classes:
|
classes:
|
||||||
'Object':
|
'Object':
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
# 4.6.0 (Unreleased)
|
# 4.6.0
|
||||||
|
|
||||||
## Overview {#overview}
|
## Overview {#overview}
|
||||||
|
|
||||||
* [MySQL tables are auto-converted from MyISAM to InnoDB](#myisam)
|
* [MySQL tables are auto-converted from MyISAM to InnoDB](#myisam)
|
||||||
* [Editing files directly in the insert-media modal](#in-modal-editing)
|
* [Editing files directly in the insert-media modal](#in-modal-editing)
|
||||||
* [MIME Type validation now a core module](#mime-validator)
|
* [MIME Type validation now a core module](#mime-validator)
|
||||||
|
* [Solr no longer indexes draft/restricted content](#solr-updates)
|
||||||
|
* [Simplify customisation of ModelAdmin](#modeladmin-customisation)
|
||||||
|
* [Login forms module ships with installer](#loginforms)
|
||||||
|
|
||||||
## MySQL tables are auto-converted from MyISAM to InnoDB {#myisam}
|
## MySQL tables are auto-converted from MyISAM to InnoDB {#myisam}
|
||||||
|
|
||||||
@ -63,7 +66,7 @@ HTMLEditorField. The "image placement" and "file link" forms that show when inse
|
|||||||
HTMLEditorField have been simplified.
|
HTMLEditorField have been simplified.
|
||||||
|
|
||||||
This does mean that the order and structure of fields have changed somewhat. If you have customised the forms in the
|
This does mean that the order and structure of fields have changed somewhat. If you have customised the forms in the
|
||||||
asset administration area or in the "Insert Media Modal", you should do some regression testing when upgrading to
|
asset administration area or in the "Insert Media Modal", you should do some regression testing when upgrading to
|
||||||
make sure your customisations still work as expected.
|
make sure your customisations still work as expected.
|
||||||
|
|
||||||
If your project uses the popular [jonom/focuspoint](https://github.com/jonom/silverstripe-focuspoint) community
|
If your project uses the popular [jonom/focuspoint](https://github.com/jonom/silverstripe-focuspoint) community
|
||||||
@ -86,6 +89,41 @@ they can be inherited from the parent folder.
|
|||||||
Websites with the optional [UserForms](https://github.com/silverstripe/silverstripe-userforms) module installed will
|
Websites with the optional [UserForms](https://github.com/silverstripe/silverstripe-userforms) module installed will
|
||||||
show a "Form submission" icon on files uploaded through a UserForm. UserForm uploaded files without a "Restricted access" icon show a "Form submission, unrestricted access" icon instead.
|
show a "Form submission" icon on files uploaded through a UserForm. UserForm uploaded files without a "Restricted access" icon show a "Form submission, unrestricted access" icon instead.
|
||||||
|
|
||||||
|
## Solr no longer indexes draft/restricted content {#solr-updates}
|
||||||
|
|
||||||
|
At the time of this release a new version of the popular [silverstripe/fulltextsearch module](https://github.com/silverstripe/silverstripe-fulltextsearch) is also available, introducing more secure defaults. Most notably, draft and restricted content will no longer be indexed by default, due to a `canView()` check being performed against an anonymous user prior to (re)indexing. Restricted content means that it has a permission level of either 'Logged-in users' or 'Only these groups'.
|
||||||
|
|
||||||
|
If your project uses this module, after upgrading your website, ensure that you run the `Solr_Reindex` task on your production environment to remove previously indexed content that should no longer be there.
|
||||||
|
|
||||||
|
If your website requires draft or restricted content to be indexed, you can opt-out of the new secure defaults on a per-model basis.
|
||||||
|
|
||||||
|
This is a great opportunity to make sure that any custom indexes/search controllers in your project are correctly filtering results based on permissions and search visibility, which you can now achieve via a unified method (see `SilverStripe\FullTextSearch\Search\Services\SearchableService::isSearchable()`.)
|
||||||
|
|
||||||
|
The [silverstripe/fulltextsearch module readme provides additional information](https://github.com/silverstripe/silverstripe-fulltextsearch).
|
||||||
|
|
||||||
|
## Simplify customisation of ModelAdmin {#modeladmin-customisation}
|
||||||
|
|
||||||
|
`ModelAdmin::getEditForm()` has been split into smaller more discrete protected methods:
|
||||||
|
* `getGridField()`
|
||||||
|
* `getGridFieldConfig()`.
|
||||||
|
|
||||||
|
Two matching extension hooks have been added as well:
|
||||||
|
* `updateGridField()`
|
||||||
|
* `updateGridFieldConfig()`.
|
||||||
|
|
||||||
|
This will make it easier for developers to customise GridFields in their ModelAdmins.
|
||||||
|
|
||||||
|
Learn how to [alter the ModelAdmin GridField or Form](/developer_guides/customising_the_admin_interface/modeladmin/#altering-the-modeladmin-gridfield-or-form)
|
||||||
|
|
||||||
|
## Login forms module ships with installer {#loginforms}
|
||||||
|
|
||||||
|
The `silverstripe/login-forms` module is now part of the default installer. This alters the login form to provide
|
||||||
|
consistent styling and behaviour that's independent from the specifics in your project. Only new projects will
|
||||||
|
get the new login form. Older projects can manually require the `silverstripe/login-forms` module to get the new
|
||||||
|
login form.
|
||||||
|
|
||||||
|
View the [Silverstripe Login Forms readme](https://github.com/silverstripe/silverstripe-login-forms) on Github for more details.
|
||||||
|
|
||||||
<!--- Changes below this line will be automatically regenerated -->
|
<!--- Changes below this line will be automatically regenerated -->
|
||||||
|
|
||||||
<!--- Changes above this line will be automatically regenerated -->
|
<!--- Changes above this line will be automatically regenerated -->
|
||||||
|
@ -223,6 +223,7 @@ class DebugView
|
|||||||
->resolveURL('silverstripe/framework:client/styles/debug.css');
|
->resolveURL('silverstripe/framework:client/styles/debug.css');
|
||||||
$output = '<!DOCTYPE html><html><head><title>' . $url . '</title>';
|
$output = '<!DOCTYPE html><html><head><title>' . $url . '</title>';
|
||||||
$output .= '<link rel="stylesheet" type="text/css" href="' . $debugCSS . '" />';
|
$output .= '<link rel="stylesheet" type="text/css" href="' . $debugCSS . '" />';
|
||||||
|
$output .= '<meta name="robots" content="noindex">';
|
||||||
$output .= '</head>';
|
$output .= '</head>';
|
||||||
$output .= '<body>';
|
$output .= '<body>';
|
||||||
|
|
||||||
|
@ -1,94 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace SilverStripe\Dev\Upgrade;
|
|
||||||
|
|
||||||
use BadMethodCallException;
|
|
||||||
use Symfony\Component\Console\Input\InputInterface;
|
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides upgrade interface for bootstrapping.
|
|
||||||
*
|
|
||||||
* Note: This class is intended to be loaded from outside of a SilverStripe application
|
|
||||||
* and should not reference any SilverStripe API.
|
|
||||||
*
|
|
||||||
* See https://github.com/silverstripe/silverstripe-upgrader/ for information
|
|
||||||
* on running this task.
|
|
||||||
*/
|
|
||||||
class UpgradeBootstrap
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* List of files to install.
|
|
||||||
* Set to true if the file should be re-installed if it doesn't exist.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $files = [
|
|
||||||
'.htaccess' => true,
|
|
||||||
'index.php' => true,
|
|
||||||
'install.php' => false,
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param InputInterface $input
|
|
||||||
* @param OutputInterface $output
|
|
||||||
* @param $basePath
|
|
||||||
*/
|
|
||||||
public function __invoke(InputInterface $input, OutputInterface $output, $basePath)
|
|
||||||
{
|
|
||||||
$publicPath = file_exists("{$basePath}/public") ? "{$basePath}/public" : $basePath;
|
|
||||||
|
|
||||||
// Fail if destination isn't writable
|
|
||||||
$this->ensureWritable($publicPath);
|
|
||||||
|
|
||||||
// Check source
|
|
||||||
$source = $basePath . '/vendor/silverstripe/recipe-core/public';
|
|
||||||
if (!is_dir($source)) {
|
|
||||||
throw new BadMethodCallException("silverstripe/recipe-core is not installed.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Copy scaffolded files from recipe-core
|
|
||||||
$output->writeln("Upgrading project bootstrapping files:");
|
|
||||||
foreach ($this->files as $file => $canCreate) {
|
|
||||||
$fileSource = $source . '/' . $file;
|
|
||||||
$fileDest = $publicPath . '/' . $file;
|
|
||||||
|
|
||||||
// Skip if we should only upgrade existing files
|
|
||||||
if (!$canCreate && !file_exists($fileDest)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$output->writeln(" - Upgrading <info>{$file}</info>");
|
|
||||||
$this->copyFile(
|
|
||||||
$fileSource,
|
|
||||||
$fileDest
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Ensure path is writable
|
|
||||||
*
|
|
||||||
* @param string $path
|
|
||||||
*/
|
|
||||||
protected function ensureWritable($path)
|
|
||||||
{
|
|
||||||
if (!is_writable($path)) {
|
|
||||||
throw new BadMethodCallException("Path $path is not writable");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy file
|
|
||||||
*
|
|
||||||
* @param string $source
|
|
||||||
* @param string $dest
|
|
||||||
*/
|
|
||||||
protected function copyFile($source, $dest)
|
|
||||||
{
|
|
||||||
// Ensure existing file can be overwritten
|
|
||||||
if (file_exists($dest)) {
|
|
||||||
$this->ensureWritable($dest);
|
|
||||||
}
|
|
||||||
file_put_contents($dest, file_get_contents($source));
|
|
||||||
}
|
|
||||||
}
|
|
@ -159,7 +159,7 @@ class GridFieldDataColumns implements GridField_ColumnProvider
|
|||||||
// Allow callbacks
|
// Allow callbacks
|
||||||
if (is_array($columnInfo) && isset($columnInfo['callback'])) {
|
if (is_array($columnInfo) && isset($columnInfo['callback'])) {
|
||||||
$method = $columnInfo['callback'];
|
$method = $columnInfo['callback'];
|
||||||
$value = $method($record);
|
$value = $method($record, $columnName, $gridField);
|
||||||
|
|
||||||
// This supports simple FieldName syntax
|
// This supports simple FieldName syntax
|
||||||
} else {
|
} else {
|
||||||
|
@ -319,6 +319,8 @@ class TempDatabase
|
|||||||
$this->kill();
|
$this->kill();
|
||||||
$this->build();
|
$this->build();
|
||||||
$this->rebuildTables($extraDataObjects);
|
$this->rebuildTables($extraDataObjects);
|
||||||
|
|
||||||
|
$this->skippedException = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user