Merge branch '4.1' into 4.2

This commit is contained in:
Daniel Hensby 2017-02-03 15:05:03 +00:00
commit 94bbbc0954
No known key found for this signature in database
GPG Key ID: B00D1E9767F0B06E
3 changed files with 57 additions and 26 deletions

View File

@ -23,8 +23,9 @@ before_script:
script:
- vendor/bin/phpunit --coverage-clover coverage.clover userforms/tests
after_success:
- mv coverage.clover ~/build/$TRAVIS_REPO_SLUG/
- cd ~/build/$TRAVIS_REPO_SLUG
- wget https://scrutinizer-ci.com/ocular.phar
- cd ./userforms
- git remote rm origin
- git remote add origin git@github.com:silverstripe/silverstripe-userforms.git
- php ocular.phar code-coverage:upload --format=php-clover coverage.clover

View File

@ -142,18 +142,32 @@ class UserFormFieldEditorExtension extends DataExtension
*/
public function onAfterPublish($original)
{
// Remove fields on the live table which could have been orphaned.
$live = Versioned::get_by_stage("EditableFormField", "Live")
->filter('ParentID', $original->ID);
if ($live) {
foreach ($live as $field) {
$field->doDeleteFromStage('Live');
}
}
// store IDs of fields we've published
$seenIDs = array();
foreach ($this->owner->Fields() as $field) {
// store any IDs of fields we publish so we don't unpublish them
$seenIDs[] = $field->ID;
$field->doPublish('Stage', 'Live');
$field->destroy();
}
// fetch any orphaned live records
$live = Versioned::get_by_stage("EditableFormField", "Live")
->filter(array(
'ParentID' => $original->ID,
));
if (!empty($seenIDs)) {
$live = $live->exclude(array(
'ID' => $seenIDs,
));
}
// delete orphaned records
foreach ($live as $field) {
$field->doDeleteFromStage('Live');
$field->destroy();
}
}

View File

@ -83,14 +83,14 @@ class EditableFormField extends DataObject
"CustomSettings" => "Text", // @deprecated from 2.0
"Migrated" => "Boolean", // set to true when migrated
"ExtraClass" => "Text", // from CustomSettings
"RightTitle" => "Varchar(255)", // from CustomSettings
"ShowOnLoad" => "Boolean(1)", // from CustomSettings
);
private static $defaults = array(
'ShowOnLoad' => true,
);
"ExtraClass" => "Text", // from CustomSettings
"RightTitle" => "Varchar(255)", // from CustomSettings
"ShowOnLoad" => "Boolean(1)", // from CustomSettings
);
private static $defaults = array(
'ShowOnLoad' => true,
);
/**
@ -380,8 +380,8 @@ class EditableFormField extends DataObject
if ($parent && $parent->exists()) {
return $parent->canEdit($member) && !$this->isReadonly();
} elseif (!$this->exists() && Controller::has_curr()) {
// This is for GridFieldOrderableRows support as it checks edit permissions on
// singleton of the class. Allows editing of User Defined Form pages by
// This is for GridFieldOrderableRows support as it checks edit permissions on
// singleton of the class. Allows editing of User Defined Form pages by
// 'Content Authors' and those with permission to edit the UDF page. (ie. CanEditType/EditorGroups)
// This is to restore User Forms 2.x backwards compatibility.
$controller = Controller::curr();
@ -487,11 +487,27 @@ class EditableFormField extends DataObject
{
$this->publish($fromStage, $toStage, $createNewVersion);
// Don't forget to publish the related custom rules...
foreach ($this->DisplayRules() as $rule) {
$rule->doPublish($fromStage, $toStage, $createNewVersion);
$seenIDs = array();
// Don't forget to publish the related custom rules...
foreach ($this->DisplayRules() as $rule) {
$seenIDs[] = $rule->ID;
$rule->doPublish($fromStage, $toStage, $createNewVersion);
$rule->destroy();
}
// remove any orphans from the "fromStage"
$rules = Versioned::get_by_stage('EditableCustomRule', $toStage)
->filter('ParentID', $this->ID);
if (!empty($seenIDs)) {
$rules = $rules->exclude('ID', $seenIDs);
}
}
foreach ($rules as $rule) {
$rule->deleteFromStage($toStage);
}
}
/**
* Delete this field from a given stage