public function PoolForm::validateForm in CMS Content Sync 2.0.x
Same name and namespace in other branches
- 8 src/Form/PoolForm.php \Drupal\cms_content_sync\Form\PoolForm::validateForm()
- 2.1.x src/Form/PoolForm.php \Drupal\cms_content_sync\Form\PoolForm::validateForm()
Validate format of input fields and make sure the Sync Core backend is accessible to actually update it.
Overrides FormBase::validateForm
File
- src/
Form/ PoolForm.php, line 196
Class
- PoolForm
- Form handler for the Pool add and edit forms.
Namespace
Drupal\cms_content_sync\FormCode
public function validateForm(array &$form, FormStateInterface $form_state) {
parent::validateForm($form, $form_state);
$step = $this
->getLastFormStep($form_state);
/**
* @var Pool $entity
*/
$entity = $this->entity;
$entity->backend_url = $form_state
->getValue('backend_url');
$allowed_length = 0;
if (!$entity
->useV2()) {
try {
$client = $entity
->getClient();
$client
->getReportingService()
->getStatus();
// In MongoDB (used by the Sync Core, the name of the database + collection name mustn't be longer than 120 characters)
$longest_entity_name = 0;
$bundleInfoService = \Drupal::service('entity_type.bundle.info');
$entity_types = $bundleInfoService
->getAllBundleInfo();
foreach ($entity_types as $type_key => $entity_type) {
foreach ($entity_type as $entity_bundle_name => $entity_bundle) {
$length = strlen($type_key) + strlen($entity_bundle_name) + 1;
if ($length > $longest_entity_name) {
$longest_entity_name = $length;
}
}
}
$allowed_length = 120 - 7;
// Full name is formatted like this: [database].drupal-[pool]-[site]-[entity]-[bundle].
$allowed_length = $allowed_length - 6 - 1 - 1 - 1 - $longest_entity_name - 1;
} catch (SyncCoreException $e) {
$form_state
->setErrorByName('backend_url', $this
->t('The Sync Core is not accessible (did not respond with 200 OK). Please configure your outbound traffic to allow traffic to the Sync Core. The error message is @message', [
'@message' => $e
->getMessage(),
]));
}
}
if (self::STEP_POOL === $step) {
$api = $form_state
->getValue('id');
if (!preg_match('@^([a-z0-9\\-_]+)$@', $api)) {
$form_state
->setErrorByName('id', $this
->t('Please only use letters, numbers and dashes.'));
}
if ('drupal' == $api || 'api-unify' == $api) {
$form_state
->setErrorByName('api', $this
->t('This name is reserved.'));
}
$site_id = $form_state
->getValue('site_id');
$length = strlen($api) + strlen($site_id);
if ($allowed_length && $length > $allowed_length) {
$form_state
->setErrorByName('id', $this
->t('The Pool machine name + site id combined mustn\'t be longer than @allowed characters.', [
'@allowed' => $allowed_length,
]));
}
}
}