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: script:
- vendor/bin/phpunit --coverage-clover coverage.clover userforms/tests - 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 - 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 - 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) public function onAfterPublish($original)
{ {
// Remove fields on the live table which could have been orphaned. // store IDs of fields we've published
$live = Versioned::get_by_stage("EditableFormField", "Live") $seenIDs = array();
->filter('ParentID', $original->ID);
if ($live) {
foreach ($live as $field) {
$field->doDeleteFromStage('Live');
}
}
foreach ($this->owner->Fields() as $field) { 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->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

@ -487,9 +487,25 @@ class EditableFormField extends DataObject
{ {
$this->publish($fromStage, $toStage, $createNewVersion); $this->publish($fromStage, $toStage, $createNewVersion);
$seenIDs = array();
// Don't forget to publish the related custom rules... // Don't forget to publish the related custom rules...
foreach ($this->DisplayRules() as $rule) { foreach ($this->DisplayRules() as $rule) {
$seenIDs[] = $rule->ID;
$rule->doPublish($fromStage, $toStage, $createNewVersion); $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);
} }
} }