public function JsonForm::submitForm in CMS Content Sync 2.1.x
Form submission handler.
Parameters
array $form: An associative array containing the structure of the form.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
Overrides FormInterface::submitForm
File
- src/
Form/ JsonForm.php, line 67
Class
- JsonForm
- Content Sync general settings form.
Namespace
Drupal\cms_content_sync\FormCode
public function submitForm(array &$form, FormStateInterface $form_state) {
if ('save-flow' === $form_state
->getValue('action')) {
$data = json_decode($form_state
->getValue('json'), TRUE);
$values = $data['values'];
$flows = Flow::getAll(TRUE);
$machine_name = $values['machineName'];
// Create any new Pools that don't exist yet.
$pools = Pool::getAll();
foreach ($data['pools'] as $pool_definition) {
$pool_machine_name = $pool_definition['machineName'];
if (!isset($pools[$pool_machine_name])) {
$pool = Pool::create([
'id' => $pool_machine_name,
'label' => $pool_definition['name'],
]);
$pool
->save();
$pools[$pool_machine_name] = $pool;
}
}
// Update existing or create new Flow.
if (isset($flows[$machine_name])) {
$flow = $flows[$machine_name];
}
else {
$flow = Flow::create([
'variant' => Flow::VARIANT_SIMPLE,
'type' => $values['type'],
'id' => $machine_name,
'name' => $values['name'],
]);
}
$flow
->getController()
->setFormValues($values);
$flow
->save();
// Export to the Sync Core
foreach (Pool::getAll() as $pool) {
if (!PoolExport::validateBaseUrl($pool)) {
throw new \Exception('The site does not have a valid base url. The base url must not contain "localhost" and is not allowed to be an IP address. The base url of the site can be configured at the CMS Content Sync settings page.');
}
$exporter = new SyncCorePoolExport($pool);
$sites = $exporter
->verifySiteId();
if ($sites && count($sites)) {
throw new \Exception('Another site with id ' . array_keys($sites)[0] . ' and base url ' . array_values($sites)[0] . ' already exists for the pool "' . $pool->id . '"');
}
}
$flow
->getController()
->updateEntityTypeVersions();
$exporter = new SyncCoreFlowExport($flow);
$batch = $exporter
->prepareBatch(FALSE);
$batch
->executeAll();
// Conditionally redirect to the migration page.
if ($data['migrateNext']) {
// If this was set, our redirect would be ignored. It's automatically set by Drupal if you hit Edit on the list page.
\Drupal::request()->query
->remove('destination');
$form_state
->setRedirect('cms_content_sync.syndication', [], [
'query' => [
'flow' => $flow->id,
'startNew' => 'true',
],
]);
}
else {
// In this case it's fine if a ?destination query param overwrites our default to go to the Flow list page.
$form_state
->setRedirect('entity.cms_content_sync_flow.collection');
}
}
}