Skip to content

Commit

Permalink
Merge pull request #672 from creative-commoners/pulls/userform-trait
Browse files Browse the repository at this point in the history
API Add ability to run a UserForm on any DataObject via traits.
  • Loading branch information
wilr committed Oct 17, 2017
2 parents 82acc4e + 28581ca commit deba422
Show file tree
Hide file tree
Showing 14 changed files with 487 additions and 403 deletions.
4 changes: 2 additions & 2 deletions .upgrade.yml
Expand Up @@ -13,7 +13,7 @@ mappings:
UserFormsStepField: SilverStripe\UserForms\FormField\UserFormsStepField
EditableCustomRule: SilverStripe\UserForms\Model\EditableCustomRule
UserDefinedForm: SilverStripe\UserForms\Model\UserDefinedForm
UserDefinedFormController: SilverStripe\UserForms\Model\UserDefinedFormController
UserDefinedFormController: SilverStripe\UserForms\Control\UserDefinedFormController
EditableCheckbox: SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox
EditableCheckboxGroupField: SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField
EditableCountryDropdownField: SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField
Expand Down Expand Up @@ -47,7 +47,7 @@ mappings:
UserFormTest: SilverStripe\UserForms\Tests\Form\UserFormTest
UserFormsCheckboxSetFieldTest: SilverStripe\UserForms\Tests\FormField\UserFormsCheckboxSetFieldTest
EditableCustomRuleTest: SilverStripe\UserForms\Tests\Model\EditableCustomRuleTest
UserDefinedFormControllerTest: SilverStripe\UserForms\Tests\Model\UserDefinedFormControllerTest
UserDefinedFormControllerTest: SilverStripe\UserForms\Tests\Control\UserDefinedFormControllerTest
UserDefinedFormTest: SilverStripe\UserForms\Tests\Model\UserDefinedFormTest
EditableDropdownTest: SilverStripe\UserForms\Tests\Model\EditableFormField\EditableDropdownTest
EditableFileFieldTest: SilverStripe\UserForms\Tests\Model\EditableFormField\EditableFileFieldTest
Expand Down
2 changes: 1 addition & 1 deletion _config/routes.yml
Expand Up @@ -4,4 +4,4 @@ After: framework/routes#coreroutes
---
SilverStripe\Control\Director:
rules:
UserDefinedFormController//$Action: SilverStripe\UserForms\Model\UserDefinedFormController
UserDefinedFormController//$Action: SilverStripe\UserForms\Control\UserDefinedFormController
@@ -1,6 +1,6 @@
<?php

namespace SilverStripe\UserForms\Model;
namespace SilverStripe\UserForms\Control;

use PageController;
use SilverStripe\Assets\File;
Expand Down
2 changes: 2 additions & 0 deletions code/Form/UserForm.php
Expand Up @@ -40,6 +40,7 @@ public function __construct(Controller $controller, $name = Form::class)
);

$this->setFields($fields = $this->getFormFields());

$fields->setForm($this);
$this->setActions($actions = $this->getFormActions());
$actions->setForm($this);
Expand Down Expand Up @@ -120,6 +121,7 @@ public function getFormFields()
{
$fields = new UserFormsFieldList();
$target = $fields;

foreach ($this->controller->Fields() as $field) {
$target = $target->processNext($field);
}
Expand Down
15 changes: 14 additions & 1 deletion code/Model/EditableFormField.php
Expand Up @@ -25,6 +25,7 @@
use SilverStripe\Forms\TextField;
use SilverStripe\ORM\ArrayList;
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\DB;
use SilverStripe\ORM\FieldType\DBField;
use SilverStripe\ORM\ValidationException;
use SilverStripe\UserForms\Extension\UserFormFieldEditorExtension;
Expand All @@ -36,6 +37,7 @@
use SilverStripe\UserForms\Model\Submission\SubmittedFormField;
use SilverStripe\UserForms\Modifier\DisambiguationSegmentFieldModifier;
use SilverStripe\UserForms\Modifier\UnderscoreSegmentFieldModifier;
use SilverStripe\UserForms\UserForm;
use SilverStripe\Versioned\Versioned;
use Symbiote\GridFieldExtensions\GridFieldAddNewInlineButton;
use Symbiote\GridFieldExtensions\GridFieldEditableColumns;
Expand Down Expand Up @@ -146,7 +148,7 @@ class EditableFormField extends DataObject
* @var array
*/
private static $has_one = [
'Parent' => UserDefinedForm::class,
'Parent' => DataObject::class,
];

/**
Expand Down Expand Up @@ -321,6 +323,17 @@ public function getCMSFields()
return $fields;
}


public function requireDefaultRecords()
{
parent::requireDefaultRecords();

// make sure to migrate the class across (prior to v5.x)
DB::query("UPDATE EditableFormField SET ParentClass = 'Page' WHERE ParentClass IS NULL");
DB::query("UPDATE EditableFormField_Live SET ParentClass = 'Page' WHERE ParentClass IS NULL");
DB::query("UPDATE EditableFormField_Versions SET ParentClass = 'Page' WHERE ParentClass IS NULL");
}

/**
* Return fields to display on the 'Display Rules' tab
*
Expand Down
26 changes: 22 additions & 4 deletions code/Model/Recipient/EmailRecipient.php
Expand Up @@ -26,13 +26,15 @@
use SilverStripe\Forms\TextField;
use SilverStripe\ORM\ArrayList;
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\DB;
use SilverStripe\ORM\FieldType\DBField;
use SilverStripe\UserForms\Model\EditableFormField\EditableEmailField;
use SilverStripe\UserForms\Model\EditableFormField;
use SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField;
use SilverStripe\UserForms\Model\EditableFormField\EditableTextField;
use SilverStripe\UserForms\Model\Recipient\EmailRecipientCondition;
use SilverStripe\UserForms\Model\UserDefinedForm;
use SilverStripe\UserForms\UserForm;
use SilverStripe\View\Requirements;
use Symbiote\GridFieldExtensions\GridFieldAddNewInlineButton;
use Symbiote\GridFieldExtensions\GridFieldEditableColumns;
Expand All @@ -59,7 +61,7 @@ class EmailRecipient extends DataObject
];

private static $has_one = [
'Form' => UserDefinedForm::class,
'Form' => DataObject::class,
'SendEmailFromField' => EditableFormField::class,
'SendEmailToField' => EditableFormField::class,
'SendEmailSubjectField' => EditableFormField::class
Expand Down Expand Up @@ -96,6 +98,14 @@ class EmailRecipient extends DataObject
*/
private static $allow_unbound_recipient_fields = false;

public function requireDefaultRecords()
{
parent::requireDefaultRecords();

// make sure to migrate the class across (prior to v5.x)
DB::query("UPDATE UserDefinedForm_EmailRecipient SET FormClass = 'Page' WHERE FormClass IS NULL");
}

public function summaryFields()
{
$fields = parent::summaryFields();
Expand Down Expand Up @@ -436,7 +446,11 @@ protected function getCanCreateContext($args)
*/
public function canView($member = null)
{
return $this->Form()->canView($member);
if ($form = $this->Form()) {
return $form->canView($member);
}

return parent::canView($member);
}

/**
Expand All @@ -446,7 +460,11 @@ public function canView($member = null)
*/
public function canEdit($member = null)
{
return $this->Form()->canEdit($member);
if ($form = $this->Form()) {
return $form->canEdit($member);
}

return parent::canEdit($member);
}

/**
Expand All @@ -459,7 +477,7 @@ public function canDelete($member = null)
return $this->canEdit($member);
}

/*
/**
* Determine if this recipient may receive notifications for this submission
*
* @param array $data
Expand Down
44 changes: 33 additions & 11 deletions code/Model/Submission/SubmittedForm.php
Expand Up @@ -9,20 +9,16 @@
use SilverStripe\Forms\GridField\GridFieldPrintButton;
use SilverStripe\Forms\ReadonlyField;
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\DB;
use SilverStripe\Security\Member;
use SilverStripe\UserForms\Model\UserDefinedForm;
use SilverStripe\UserForms\Model\Submission\SubmittedFormField;

/**
* Contents of an UserDefinedForm submission
*
* @package userforms
*/
class SubmittedForm extends DataObject
{
private static $has_one = [
'SubmittedBy' => Member::class,
'Parent' => UserDefinedForm::class,
'Parent' => DataObject::class,
];

private static $has_many = [
Expand All @@ -40,6 +36,14 @@ class SubmittedForm extends DataObject

private static $table_name = 'SubmittedForm';

public function requireDefaultRecords()
{
parent::requireDefaultRecords();

// make sure to migrate the class across (prior to v5.x)
DB::query("UPDATE SubmittedForm SET ParentClass = 'Page' WHERE ParentClass IS NULL");
}

/**
* Returns the value of a relation or, in the case of this form, the value
* of a given child {@link SubmittedFormField}
Expand Down Expand Up @@ -138,10 +142,16 @@ public function canCreate($member = null, $context = [])
public function canView($member = null)
{
$extended = $this->extendedCan(__FUNCTION__, $member);

if ($extended !== null) {
return $extended;
}
return $this->Parent()->canView();

if ($this->Parent()) {
return $this->Parent()->canView($member);
}

return parent::canView($member);
}

/**
Expand All @@ -152,10 +162,16 @@ public function canView($member = null)
public function canEdit($member = null)
{
$extended = $this->extendedCan(__FUNCTION__, $member);

if ($extended !== null) {
return $extended;
}
return $this->Parent()->canEdit();

if ($this->Parent()) {
return $this->Parent()->canEdit($member);
}

return parent::canEdit($member);
}

/**
Expand All @@ -166,15 +182,21 @@ public function canEdit($member = null)
public function canDelete($member = null)
{
$extended = $this->extendedCan(__FUNCTION__, $member);

if ($extended !== null) {
return $extended;
}
return $this->Parent()->canDelete();

if ($this->Parent()) {
return $this->Parent()->canDelete($member);
}

return parent::canDelete($member);
}

/**
* Before we delete this form make sure we delete all the
* field values so that we don't leave old data round
* Before we delete this form make sure we delete all the field values so
* that we don't leave old data round.
*
* @return void
*/
Expand Down

0 comments on commit deba422

Please sign in to comment.