From 5c9417da215dcd8e9b1c50a42e0cc7da04ebd5ca Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Tue, 15 Aug 2017 15:30:59 +1200 Subject: [PATCH] API Implement cascading deletes API for model relations --- .../UserFormFieldEditorExtension.php | 89 +++++++------- code/Model/EditableCustomRule.php | 21 ---- code/Model/EditableFormField.php | 113 ++---------------- .../EditableFormField/EditableFieldGroup.php | 28 ++--- .../EditableFieldGroupEnd.php | 10 -- .../EditableMultipleOptionField.php | 99 ++------------- .../EditableFormField/EditableOption.php | 87 -------------- code/Model/Recipient/EmailRecipient.php | 10 +- code/Model/Submission/SubmittedForm.php | 4 + code/Model/UserDefinedForm.php | 6 + tests/Model/EditableFormFieldTest.php | 20 ++-- tests/Model/EditableFormFieldTest.yml | 40 +++---- tests/Model/UserDefinedFormTest.php | 21 ++-- 13 files changed, 129 insertions(+), 419 deletions(-) diff --git a/code/Extension/UserFormFieldEditorExtension.php b/code/Extension/UserFormFieldEditorExtension.php index 96bb80e..4d88390 100644 --- a/code/Extension/UserFormFieldEditorExtension.php +++ b/code/Extension/UserFormFieldEditorExtension.php @@ -14,9 +14,9 @@ use SilverStripe\Forms\GridField\GridFieldDetailForm; use SilverStripe\Forms\GridField\GridFieldToolbarHeader; use SilverStripe\ORM\DataExtension; use SilverStripe\UserForms\Form\GridFieldAddClassesButton; +use SilverStripe\UserForms\Model\EditableFormField; use SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroup; use SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroupEnd; -use SilverStripe\UserForms\Model\EditableFormField; use SilverStripe\UserForms\Model\EditableFormField\EditableFormStep; use SilverStripe\UserForms\Model\EditableFormField\EditableTextField; use SilverStripe\Versioned\Versioned; @@ -36,6 +36,14 @@ class UserFormFieldEditorExtension extends DataExtension 'Fields' => EditableFormField::class ); + private static $owns = [ + 'Fields' + ]; + + private static $cascade_deletes = [ + 'Fields' + ]; + /** * Adds the field editor to the page. * @@ -159,31 +167,23 @@ class UserFormFieldEditorExtension extends DataExtension } /** - * @see SiteTree::doPublish - * @param Page $original - * - * @return void + * Remove any orphaned child records on publish */ - public function onAfterPublish($original) + public function onAfterPublish() { - if (!$original) { - return; - } - // store IDs of fields we've published - $seenIDs = array(); - + $seenIDs = []; foreach ($this->owner->Fields() as $field) { // store any IDs of fields we publish so we don't unpublish them $seenIDs[] = $field->ID; - $field->publishRecursive(); + $field->doPublish(Versioned::DRAFT, Versioned::LIVE); $field->destroy(); } // fetch any orphaned live records - $live = Versioned::get_by_stage(EditableFormField::class, "Live") + $live = Versioned::get_by_stage(EditableFormField::class, Versioned::LIVE) ->filter([ - 'ParentID' => $original->ID, + 'ParentID' => $this->owner->ID, ]); if (!empty($seenIDs)) { @@ -194,35 +194,34 @@ class UserFormFieldEditorExtension extends DataExtension // delete orphaned records foreach ($live as $field) { - $field->doDeleteFromStage('Live'); + $field->deleteFromStage(Versioned::LIVE); $field->destroy(); } } /** - * @see SiteTree::doUnpublish - * @param Page $page - * - * @return void + * Remove all fields from the live stage when unpublishing the page */ - public function onAfterUnpublish($page) + public function onAfterUnpublish() { - foreach ($page->Fields() as $field) { - $field->doDeleteFromStage('Live'); + foreach ($this->owner->Fields() as $field) { + $field->deleteFromStage(Versioned::LIVE); } } /** - * @see SiteTree::duplicate - * @param DataObject $newPage + * When duplicating a UserDefinedForm, duplicate all of its fields and display rules * + * @see DataObject::duplicate + * @param DataObject $newPage + * @param bool $doWrite + * @param string $manyMany * @return DataObject */ - public function onAfterDuplicate($newPage) + public function onAfterDuplicate($newPage, $doWrite, $manyMany) { - // List of EditableFieldGroups, where the - // key of the array is the ID of the old end group - $fieldGroups = array(); + // List of EditableFieldGroups, where the key of the array is the ID of the old end group + $fieldGroups = []; foreach ($this->owner->Fields() as $field) { $newField = $field->duplicate(false); $newField->ParentID = $newPage->ID; @@ -254,35 +253,29 @@ class UserFormFieldEditorExtension extends DataExtension } /** - * @see SiteTree::getIsModifiedOnStage - * @param boolean $isModified + * Checks child fields to see if any are modified in draft as well. The owner of this extension will still + * use the Versioned method to determine its own status. * - * @return boolean + * @see Versioned::isModifiedOnDraft + * + * @return boolean|null */ - public function getIsModifiedOnStage($isModified) + public function isModifiedOnDraft() { - if (!$isModified) { - foreach ($this->owner->Fields() as $field) { - if ($field->getIsModifiedOnStage()) { - $isModified = true; - break; - } + foreach ($this->owner->Fields() as $field) { + if ($field->isModifiedOnDraft()) { + return true; } } - - return $isModified; } /** - * @see SiteTree::doRevertToLive - * @param Page $page - * - * @return void + * @see Versioned::doRevertToLive */ - public function onAfterRevertToLive($page) + public function onAfterRevertToLive() { - foreach ($page->Fields() as $field) { - $field->copyVersionToStage('Live', 'Stage', false); + foreach ($this->owner->Fields() as $field) { + $field->copyVersionToStage(Versioned::LIVE, Versioned::STAGE, false); $field->writeWithoutVersion(); } } diff --git a/code/Model/EditableCustomRule.php b/code/Model/EditableCustomRule.php index 98fc87f..812031d 100644 --- a/code/Model/EditableCustomRule.php +++ b/code/Model/EditableCustomRule.php @@ -57,27 +57,6 @@ class EditableCustomRule extends DataObject private static $table_name = 'EditableCustomRule'; - /** - * Publish this custom rule to the live site - * - * Wrapper for the {@link Versioned} publish function - */ - public function doPublish($fromStage, $toStage, $createNewVersion = false) - { - $this->publish($fromStage, $toStage, $createNewVersion); - } - - /** - * Delete this custom rule from a given stage - * - * Wrapper for the {@link Versioned} deleteFromStage function - */ - public function doDeleteFromStage($stage) - { - $this->deleteFromStage($stage); - } - - /** * @param Member $member * @return bool diff --git a/code/Model/EditableFormField.php b/code/Model/EditableFormField.php index 5109859..d29b250 100755 --- a/code/Model/EditableFormField.php +++ b/code/Model/EditableFormField.php @@ -173,6 +173,14 @@ class EditableFormField extends DataObject 'DisplayRules' => EditableCustomRule::class . '.Parent' ]; + private static $owns = [ + 'DisplayRules', + ]; + + private static $cascade_deletes = [ + 'DisplayRules', + ]; + /** * @var bool */ @@ -198,10 +206,12 @@ class EditableFormField extends DataObject * Set the visibility of an individual form field * * @param bool + * @return $this */ public function setReadonly($readonly = true) { $this->readonly = $readonly; + return $this; } /** @@ -546,92 +556,6 @@ class EditableFormField extends DataObject return null; } - /** - * Check if can publish - * - * @param Member $member - * @return bool - */ - public function canPublish($member = null) - { - return $this->canEdit($member); - } - - /** - * Check if can unpublish - * - * @param Member $member - * @return bool - */ - public function canUnpublish($member = null) - { - return $this->canDelete($member); - } - - /** - * Publish this Form Field to the live site - * - * Wrapper for the {@link Versioned} publish function - * - * @param string $fromStage - * @param string $toStage - * @param bool $createNewVersion - */ - public function doPublish($fromStage, $toStage, $createNewVersion = false) - { - $this->publish($fromStage, $toStage, $createNewVersion); - $this->publishRules($fromStage, $toStage, $createNewVersion); - } - - /** - * Publish all field rules - * - * @param string $fromStage - * @param string $toStage - * @param bool $createNewVersion - */ - protected function publishRules($fromStage, $toStage, $createNewVersion) - { - $seenRuleIDs = []; - - // Don't forget to publish the related custom rules... - foreach ($this->DisplayRules() as $rule) { - $seenRuleIDs[] = $rule->ID; - $rule->doPublish($fromStage, $toStage, $createNewVersion); - $rule->destroy(); - } - - // remove any orphans from the "fromStage" - $rules = Versioned::get_by_stage(EditableCustomRule::class, $toStage) - ->filter('ParentID', $this->ID); - - if (!empty($seenRuleIDs)) { - $rules = $rules->exclude('ID', $seenRuleIDs); - } - - foreach ($rules as $rule) { - $rule->deleteFromStage($toStage); - } - } - - /** - * Delete this field from a given stage - * - * Wrapper for the {@link Versioned} deleteFromStage function - */ - public function doDeleteFromStage($stage) - { - // Remove custom rules in this stage - $rules = Versioned::get_by_stage(EditableCustomRule::class, $stage) - ->filter('ParentID', $this->ID); - foreach ($rules as $rule) { - $rule->deleteFromStage($stage); - } - - // Remove record - $this->deleteFromStage($stage); - } - /** * checks whether record is new, copied from SiteTree */ @@ -648,23 +572,6 @@ class EditableFormField extends DataObject return stripos($this->ID, 'new') === 0; } - /** - * checks if records is changed on stage - * @return boolean - */ - public function getIsModifiedOnStage() - { - // new unsaved fields could be never be published - if ($this->isNew()) { - return false; - } - - $stageVersion = Versioned::get_versionnumber_by_stage(EditableFormField::class, 'Stage', $this->ID); - $liveVersion = Versioned::get_versionnumber_by_stage(EditableFormField::class, 'Live', $this->ID); - - return ($stageVersion && $stageVersion != $liveVersion); - } - /** * @deprecated since version 4.0 */ diff --git a/code/Model/EditableFormField/EditableFieldGroup.php b/code/Model/EditableFormField/EditableFieldGroup.php index dd893af..bed5c55 100644 --- a/code/Model/EditableFormField/EditableFieldGroup.php +++ b/code/Model/EditableFormField/EditableFieldGroup.php @@ -14,7 +14,15 @@ use SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroupEnd; class EditableFieldGroup extends EditableFormField { private static $has_one = [ - 'End' => EditableFieldGroupEnd::class + 'End' => EditableFieldGroupEnd::class, + ]; + + private static $owns = [ + 'End', + ]; + + private static $cascade_deletes = [ + 'End', ]; /** @@ -86,22 +94,4 @@ class EditableFieldGroup extends EditableFormField $field->addExtraClass($this->ExtraClass); } } - - protected function onBeforeDelete() - { - parent::onBeforeDelete(); - - // Ensures EndID is lazy-loaded for onAfterDelete - $this->EndID; - } - - protected function onAfterDelete() - { - parent::onAfterDelete(); - - // Delete end - if (($end = $this->End()) && $end->exists()) { - $end->delete(); - } - } } diff --git a/code/Model/EditableFormField/EditableFieldGroupEnd.php b/code/Model/EditableFormField/EditableFieldGroupEnd.php index 3147f71..9335f95 100644 --- a/code/Model/EditableFormField/EditableFieldGroupEnd.php +++ b/code/Model/EditableFormField/EditableFieldGroupEnd.php @@ -98,14 +98,4 @@ class EditableFieldGroupEnd extends EditableFormField } } } - - protected function onAfterDelete() - { - parent::onAfterDelete(); - - // Delete group - if (($group = $this->Group()) && $group->exists()) { - $group->delete(); - } - } } diff --git a/code/Model/EditableFormField/EditableMultipleOptionField.php b/code/Model/EditableFormField/EditableMultipleOptionField.php index b5cde83..2f5983f 100644 --- a/code/Model/EditableFormField/EditableMultipleOptionField.php +++ b/code/Model/EditableFormField/EditableMultipleOptionField.php @@ -43,7 +43,15 @@ class EditableMultipleOptionField extends EditableFormField private static $abstract = true; private static $has_many = [ - 'Options' => EditableOption::class + 'Options' => EditableOption::class, + ]; + + private static $owns = [ + 'Options', + ]; + + private static $cascade_deletes = [ + 'Options', ]; private static $table_name = 'EditableMultipleOptionField'; @@ -103,100 +111,15 @@ class EditableMultipleOptionField extends EditableFormField return $fields; } - /** - * Publishing Versioning support. - * - * When publishing it needs to handle copying across / publishing - * each of the individual field options - * - * @param string $fromStage - * @param string $toStage - * @param bool $createNewVersion - */ - public function copyVersionToStage($fromStage, $toStage, $createNewVersion = false) - { - parent::copyVersionToStage($fromStage, $toStage, $createNewVersion); - $this->publishOptions($fromStage, $toStage, $createNewVersion); - } - - - /** - * Publish list options - * - * @param string $fromStage - * @param string $toStage - * @param bool $createNewVersion - */ - protected function publishOptions($fromStage, $toStage, $createNewVersion) - { - $seenIDs = []; - - // Publish all options - foreach ($this->Options() as $option) { - $seenIDs[] = $option->ID; - $option->copyVersionToStage($fromStage, $toStage, $createNewVersion); - } - - // remove any orphans from the "fromStage" - $options = Versioned::get_by_stage(EditableOption::class, $toStage) - ->filter('ParentID', $this->ID); - - if (!empty($seenIDs)) { - $options = $options->exclude('ID', $seenIDs); - } - - foreach ($options as $rule) { - $rule->deleteFromStage($toStage); - } - } - - /** - * Unpublishing Versioning support - * - * When unpublishing the field it has to remove all options attached - * - * @return void - */ - public function doDeleteFromStage($stage) - { - // Remove options - $options = Versioned::get_by_stage(EditableOption::class, $stage) - ->filter('ParentID', $this->ID); - foreach ($options as $option) { - $option->deleteFromStage($stage); - } - - parent::doDeleteFromStage($stage); - } - - /** - * Deletes all the options attached to this field before deleting the - * field. Keeps stray options from floating around - * - * @return void - */ - public function delete() - { - $options = $this->Options(); - - if ($options) { - foreach ($options as $option) { - $option->delete(); - } - } - - parent::delete(); - } - /** * Duplicate a pages content. We need to make sure all the fields attached * to that page go with it * - * @return DataObject + * {@inheritDoc} */ public function duplicate($doWrite = true, $manyMany = 'many_many') { - $clonedNode = parent::duplicate(); + $clonedNode = parent::duplicate($doWrite, $manyMany); foreach ($this->Options() as $field) { $newField = $field->duplicate(false); diff --git a/code/Model/EditableFormField/EditableOption.php b/code/Model/EditableFormField/EditableOption.php index 86ddfb8..f77918e 100644 --- a/code/Model/EditableFormField/EditableOption.php +++ b/code/Model/EditableFormField/EditableOption.php @@ -65,26 +65,6 @@ class EditableOption extends DataObject self::$allow_empty_values = (bool) $allow; } - /** - * @param Member $member - * - * @return boolean - */ - public function canEdit($member = null) - { - return $this->Parent()->canEdit($member); - } - - /** - * @param Member $member - * - * @return boolean - */ - public function canDelete($member = null) - { - return $this->canEdit($member); - } - /** * @deprecated 5.0 Use "$Title.XML" in templates instead * @return string @@ -94,73 +74,6 @@ class EditableOption extends DataObject return Convert::raw2att($this->Title); } - /** - * @param Member $member - * @return bool - */ - public function canView($member = null) - { - return $this->Parent()->canView($member); - } - - /** - * Return whether a user can create an object of this type - * - * @param Member $member - * @param array $context Virtual parameter to allow context to be passed in to check - * @return bool - */ - public function canCreate($member = null, $context = []) - { - // Check parent page - $parent = $this->getCanCreateContext(func_get_args()); - if ($parent) { - return $parent->canEdit($member); - } - - // Fall back to secure admin permissions - return parent::canCreate($member); - } - - /** - * Helper method to check the parent for this object - * - * @param array $args List of arguments passed to canCreate - * @return DataObject Some parent dataobject to inherit permissions from - */ - protected function getCanCreateContext($args) - { - // Inspect second parameter to canCreate for a 'Parent' context - if (isset($args[1]['Parent'])) { - return $args[1]['Parent']; - } - // Hack in currently edited page if context is missing - if (Controller::has_curr() && Controller::curr() instanceof CMSMain) { - return Controller::curr()->currentPage(); - } - - // No page being edited - return null; - } - - /** - * @param Member $member - * @return bool - */ - public function canPublish($member = null) - { - return $this->canEdit($member); - } - - /** - * @param Member $member - * @return bool - */ - public function canUnpublish($member = null) - { - return $this->canDelete($member); - } - /** * Fetches a value for $this->Value. If empty values are not allowed, * then this will return the title in the case of an empty value. diff --git a/code/Model/Recipient/EmailRecipient.php b/code/Model/Recipient/EmailRecipient.php index 23e2d86..6437bcc 100644 --- a/code/Model/Recipient/EmailRecipient.php +++ b/code/Model/Recipient/EmailRecipient.php @@ -65,7 +65,15 @@ class EmailRecipient extends DataObject ]; private static $has_many = [ - 'CustomRules' => EmailRecipientCondition::class + 'CustomRules' => EmailRecipientCondition::class, + ]; + + private static $owns = [ + 'CustomRules', + ]; + + private static $cascade_deetes = [ + 'CustomRules', ]; private static $summary_fields = [ diff --git a/code/Model/Submission/SubmittedForm.php b/code/Model/Submission/SubmittedForm.php index 532d66e..ba9d99b 100755 --- a/code/Model/Submission/SubmittedForm.php +++ b/code/Model/Submission/SubmittedForm.php @@ -29,6 +29,10 @@ class SubmittedForm extends DataObject 'Values' => SubmittedFormField::class ]; + private static $cascade_deletes = [ + 'Values', + ]; + private static $summary_fields = [ 'ID', 'Created' diff --git a/code/Model/UserDefinedForm.php b/code/Model/UserDefinedForm.php index 30a3b5e..e2117c0 100755 --- a/code/Model/UserDefinedForm.php +++ b/code/Model/UserDefinedForm.php @@ -129,6 +129,10 @@ class UserDefinedForm extends Page 'EmailRecipients' => EmailRecipient::class ]; + private static $cascade_deletes = [ + 'EmailRecipients', + ]; + /** * @var array * @config @@ -160,6 +164,8 @@ class UserDefinedForm extends Page */ private static $recipients_warning_enabled = false; + private static $non_live_permissions = ['SITETREE_VIEW_ALL']; + /** * Temporary storage of field ids when the form is duplicated. * Example layout: array('EditableCheckbox3' => 'EditableCheckbox14') diff --git a/tests/Model/EditableFormFieldTest.php b/tests/Model/EditableFormFieldTest.php index 2d8a42c..180d55b 100644 --- a/tests/Model/EditableFormFieldTest.php +++ b/tests/Model/EditableFormFieldTest.php @@ -1,18 +1,15 @@ objFromFixture(EditableTextField::class, 'basic-text'); $this->logInWithPermission('ADMIN'); + $this->assertTrue($text->canCreate()); $this->assertTrue($text->canView()); $this->assertTrue($text->canEdit()); @@ -45,9 +43,9 @@ class EditableFormFieldTest extends FunctionalTest $this->assertTrue($text->canEdit()); $this->assertTrue($text->canDelete()); - Injector::inst()->get(IdentityStore::class)->logOut(Controller::curr()->getRequest()); - + $this->logOut(); $this->logInWithPermission('SITETREE_VIEW_ALL'); + $this->assertFalse($text->canCreate()); $text->setReadonly(false); @@ -139,12 +137,12 @@ class EditableFormFieldTest extends FunctionalTest $clone = $dropdown->duplicate(); - $this->assertEquals($clone->Options()->Count(), $dropdown->Options()->Count()); + $this->assertEquals($dropdown->Options()->Count(), $clone->Options()->Count()); foreach ($clone->Options() as $option) { - $orginal = $dropdown->Options()->find('Title', $option->Title); + $original = $dropdown->Options()->find('Title', $option->Title); - $this->assertEquals($orginal->Sort, $option->Sort); + $this->assertEquals($original->Sort, $option->Sort); } } @@ -221,7 +219,7 @@ class EditableFormFieldTest extends FunctionalTest public function testFormatDisplayRules() { - $field = $this->objFromFixture(EditableFormField::class, 'irdNumberField'); + $field = $this->objFromFixture(EditableTextField::class, 'irdNumberField'); $displayRules = $field->formatDisplayRules(); $this->assertNotNull($displayRules); $this->assertCount(1, $displayRules['operations']); diff --git a/tests/Model/EditableFormFieldTest.yml b/tests/Model/EditableFormFieldTest.yml index 341db69..1a51527 100644 --- a/tests/Model/EditableFormFieldTest.yml +++ b/tests/Model/EditableFormFieldTest.yml @@ -1,25 +1,40 @@ -SilverStripe\UserForms\Model\EditableFormField: +SilverStripe\UserForms\Model\EditableFormField\EditableTextField: + basic-text: + Name: basic-text-name + Title: Basic Text Field + + basic-text-2: + Name: basic-text-name + Title: Basic Text Field + + required-text: + Name: required-text-field + Title: Required Text Field + CustomErrorMessage: Custom Error Message + Required: true + irdNumberField: - ClassName: SilverStripe\UserForms\Model\EditableFormField\EditableTextField Name: IRDNumber Title: "Enter your IRD Number" + countryTextField: - ClassName: SilverStripe\UserForms\Model\EditableFormField\EditableTextField Name: CountryTextSelection Title: "Enter your country (2 digit prefix)" DisplayRulesConjunction: And ShowOnLoad: false + SilverStripe\UserForms\Model\EditableCustomRule: rule1: Display: Show ConditionOption: HasValue FieldValue: NZ - ConditionField: =>SilverStripe\UserForms\Model\EditableFormField.countryTextField - Parent: =>SilverStripe\UserForms\Model\EditableFormField.irdNumberField + ConditionField: =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.countryTextField + Parent: =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.irdNumberField rule-1: Display: Hide ConditionOption: HasValue FieldValue: 6 + SilverStripe\UserForms\Model\EditableFormField\EditableOption: option-1: Name: Option1 @@ -79,21 +94,6 @@ SilverStripe\UserForms\Model\Recipient\EmailRecipient: EmailFrom: no-reply@example.com HideFormData: true -SilverStripe\UserForms\Model\EditableFormField\EditableTextField: - basic-text: - Name: basic-text-name - Title: Basic Text Field - - basic-text-2: - Name: basic-text-name - Title: Basic Text Field - - required-text: - Name: required-text-field - Title: Required Text Field - CustomErrorMessage: Custom Error Message - Required: true - SilverStripe\UserForms\Model\EditableFormField\EditableDropdown: basic-dropdown: Name: basic-dropdown diff --git a/tests/Model/UserDefinedFormTest.php b/tests/Model/UserDefinedFormTest.php index 0524cd6..27662a5 100644 --- a/tests/Model/UserDefinedFormTest.php +++ b/tests/Model/UserDefinedFormTest.php @@ -15,9 +15,9 @@ use SilverStripe\Security\Member; use SilverStripe\UserForms\Extension\UserFormFieldEditorExtension; use SilverStripe\UserForms\Extension\UserFormValidator; use SilverStripe\UserForms\Model\EditableCustomRule; +use SilverStripe\UserForms\Model\EditableFormField; use SilverStripe\UserForms\Model\EditableFormField\EditableEmailField; use SilverStripe\UserForms\Model\EditableFormField\EditableDropdown; -use SilverStripe\UserForms\Model\EditableFormField; use SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroup; use SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroupEnd; use SilverStripe\UserForms\Model\Recipient\EmailRecipient; @@ -47,12 +47,12 @@ class UserDefinedFormTest extends FunctionalTest $form->SubmitButtonText = 'Button Text'; $form->write(); - $form->doPublish(); + $form->publishSingle(); $origVersion = $form->Version; $form->SubmitButtonText = 'Updated Button Text'; $form->write(); - $form->doPublish(); + $form->publishSingle(); // check published site $updated = Versioned::get_one_by_stage(UserDefinedForm::class, 'Stage', "\"UserDefinedForm\".\"ID\" = $form->ID"); @@ -209,7 +209,7 @@ class UserDefinedFormTest extends FunctionalTest $form = $this->objFromFixture(UserDefinedForm::class, 'basic-form-page'); $form->write(); - $form->doPublish(); + $form->publishSingle(); $live = Versioned::get_one_by_stage(UserDefinedForm::class, 'Live', "\"UserDefinedForm_Live\".\"ID\" = $form->ID"); @@ -227,7 +227,7 @@ class UserDefinedFormTest extends FunctionalTest $this->assertNull($liveDropdown); // when publishing it should have added it - $form->doPublish(); + $form->publishSingle(); $live = Versioned::get_one_by_stage(UserDefinedForm::class, 'Live', "\"UserDefinedForm_Live\".\"ID\" = $form->ID"); $this->assertEquals(3, $live->Fields()->Count()); @@ -240,7 +240,7 @@ class UserDefinedFormTest extends FunctionalTest $liveText = Versioned::get_one_by_stage(EditableFormField::class, 'Live', "\"EditableFormField_Live\".\"ID\" = $text->ID"); $this->assertFalse($liveText->Title == $text->Title); - $form->doPublish(); + $form->publishSingle(); $liveText = Versioned::get_one_by_stage(EditableFormField::class, 'Live', "\"EditableFormField_Live\".\"ID\" = $text->ID"); $this->assertTrue($liveText->Title == $text->Title); @@ -257,7 +257,7 @@ class UserDefinedFormTest extends FunctionalTest $this->assertEmpty($liveRule); // Publish form, it's now live - $form->doPublish(); + $form->publishSingle(); $liveRule = Versioned::get_one_by_stage(EditableCustomRule::class, 'Live', "\"EditableCustomRule_Live\".\"ID\" = $ruleID"); $this->assertNotEmpty($liveRule); @@ -269,7 +269,7 @@ class UserDefinedFormTest extends FunctionalTest $this->assertNotEmpty($liveRule); // Publish form, it should remove this rule - $form->doPublish(); + $form->publishSingle(); $liveRule = Versioned::get_one_by_stage(EditableCustomRule::class, 'Live', "\"EditableCustomRule_Live\".\"ID\" = $ruleID"); $this->assertEmpty($liveRule); } @@ -280,7 +280,7 @@ class UserDefinedFormTest extends FunctionalTest $form = $this->objFromFixture(UserDefinedForm::class, 'basic-form-page'); $form->write(); $this->assertEquals(0, DB::query("SELECT COUNT(*) FROM \"EditableFormField_Live\"")->value()); - $form->doPublish(); + $form->publishSingle(); // assert that it exists and has a field $live = Versioned::get_one_by_stage(UserDefinedForm::class, 'Live', "\"UserDefinedForm_Live\".\"ID\" = $form->ID"); @@ -304,7 +304,7 @@ class UserDefinedFormTest extends FunctionalTest $field->Title = 'Title'; $field->write(); - $form->doPublish(); + $form->publishSingle(); $field->Title = 'Edited title'; $field->write(); @@ -331,7 +331,6 @@ class UserDefinedFormTest extends FunctionalTest $duplicate = $form->duplicate(); $this->assertEquals($form->Fields()->Count(), $duplicate->Fields()->Count()); - $this->assertEquals($form->EmailRecipients()->Count(), $form->EmailRecipients()->Count()); // can't compare object since the dates/ids change $this->assertEquals($form->Fields()->First()->Title, $duplicate->Fields()->First()->Title);