diff --git a/code/migration/UserFormsMigrationTask.php b/code/migration/UserFormsMigrationTask.php
index 7dc1481..b7db795 100644
--- a/code/migration/UserFormsMigrationTask.php
+++ b/code/migration/UserFormsMigrationTask.php
@@ -2,12 +2,17 @@
/**
* Migration Task for older versions of userforms to the newer version of userforms.
- * Handles the datamodel changes
+ * This will handle the datamodel changes of the form page as well as the form fields.
+ * Nothing is done with Submissions as the datamodel for that has not changed
*
* This has been designed to port 0.1 userforms to 0.2 userforms as this had major
* api changes
*
- * @todo Finish this off.
+ * You can import 1 form at a time by entering the formID in the URL
+ * - /dev/tasks/UserFormsMigrationTask/?formID=12
+ *
+ * You can also run this without writing anything to the database - by doing a dryrun
+ * - /dev/tasks/UserFormsMigrationTask/?dryRun=1
*
* @package userforms
*/
@@ -31,22 +36,44 @@ class UserFormsMigrationTask extends MigrationTask {
// load the forms
$forms = DataObject::get("UserDefinedForm");
- if(!$forms) return;
- echo "Proceeding to update ". $forms->Count() . " Forms to ensure proper structure
";
+ // set debugging / useful test
+ $this->dryRun = (isset($_GET['dryRun'])) ? true : false;
+
+ if($this->dryRun) {
+ echo "Will be running this test as a dry run. No data will be added or removed.
";
+ }
+
+ // if they want to import just 1 form - eg for testing
+ if(isset($_GET['formID'])) {
+ $id = Convert::raw2sql($_GET['formID']);
+ $forms = DataObject::get("UserDefinedForm", "`UserDefinedForm`.ID = '$id'");
+ }
+
+ if(!$forms) {
+ echo "No UserForms Found on Database";
+ return;
+ }
+
+ echo "Proceeding to update ". $forms->Count() . " Forms
";
foreach($forms as $form) {
echo " -- Updating $form->URLSegment
";
// easy step first port over email data from the structure
if($form->EmailOnSubmit && $form->EmailTo) {
- $emailTo = new UserDefinedForm_EmailRecipient();
- $emailTo->EmailAddress = $form->EmailTo;
- $emailTo->EmailSubject = _t('UserFormsMigrationTask.DEFAULTSUBMISSIONTITLE',"Submission Data");
- $emailTo->EmailFrom = Email::getAdminEmail();
- $emailTo->EmailBody = $form->EmailMessageToSubmitter;
- $emailTo->FormID = $form->ID;
- $emailTo->write();
+ // EmailTo can be a comma separated list so we need to explode that
+ $emails = explode(",", $form->EmailTo);
+ if($emails) {
+ foreach($emails as $email) {
+ $emailTo = new UserDefinedForm_EmailRecipient();
+ $emailTo->EmailAddress = trim($email);
+ $emailTo->EmailSubject = ($form) ? $form->Title : _t('UserFormsMigrationTask.DEFAULTSUBMISSIONTITLE',"Submission Data");
+ $emailTo->EmailFrom = Email::getAdminEmail();
+ $emailTo->FormID = $form->ID;
+ echo " -- -- Created new Email Recipient $email
";
+ if(!$this->dryRun) $emailTo->write();
+ }
+ }
}
-
// now fix all the fields
if($form->Fields()) {
foreach($form->Fields() as $field) {
@@ -54,15 +81,13 @@ class UserFormsMigrationTask extends MigrationTask {
case 'EditableDropdown':
case 'EditableRadioField':
case 'EditableCheckboxGroupField':
-
$optionClass = "EditableDropdownOption";
- if($field->ClassName = "EditableRadioField") {
+ if($field->ClassName == "EditableRadioField") {
$optionClass = "EditableRadioOption";
}
- else if($field->ClassName = "EditableCheckboxGroupField") {
+ else if($field->ClassName == "EditableCheckboxGroupField") {
$optionClass = "EditableCheckboxOption";
}
-
$query = DB::query("SELECT * FROM $optionClass WHERE ParentID = '$field->ID'");
$result = $query->first();
if($result) {
@@ -72,9 +97,8 @@ class UserFormsMigrationTask extends MigrationTask {
}
break;
- case 'EditableTextField':
- // find what table to use
+ case 'EditableTextField':
$database = $this->findDatabaseTableName('EditableTextField');
// get the data from the table
@@ -90,6 +114,7 @@ class UserFormsMigrationTask extends MigrationTask {
}
break;
+
case 'EditableLiteralField':
if($field->Content) {
// find what table to use
@@ -105,6 +130,7 @@ class UserFormsMigrationTask extends MigrationTask {
}
}
break;
+
case 'EditableMemberListField':
if($field->GroupID) {
// find what table to use
@@ -120,7 +146,8 @@ class UserFormsMigrationTask extends MigrationTask {
}
}
break;
- case 'EditableCheckbox':
+
+ case 'EditableCheckbox':
if($field->Checked) {
// find what table to use
$database = $this->findDatabaseTableName('EditableCheckbox');
@@ -135,11 +162,28 @@ class UserFormsMigrationTask extends MigrationTask {
}
}
break;
+
+ case 'EditableEmailField':
+ $database = $this->findDatabaseTableName('EditableEmailField');
+ $result = DB::query("SELECT * FROM $database WHERE ID = $field->ID")->first();
+ if($result && isset($result['SendCopy']) && $result['SendCopy'] == true) {
+ // we do not store send copy on email field anymore. This has been wrapped into
+ // the email recipients
+ $emailTo = new UserDefinedForm_EmailRecipient();
+ $emailTo->EmailSubject = ($form) ? $form->Title : _t('UserFormsMigrationTask.DEFAULTSUBMISSIONTITLE',"Submission Data");
+ $emailTo->EmailFrom = Email::getAdminEmail();
+ $emailTo->FormID = $form->ID;
+ $emailTo->SendEmailToFieldID = $field->ID;
+ $emailTo->EmailBody = $form->EmailMessageToSubmitter;
+ if(!$this->dryRun) $emailTo->write();
+ }
+ break;
}
- $field->write();
+ if(!$this->dryRun) $field->write();
}
}
}
+ echo "