cloud-8.x-2.0-beta1/modules/cloud_service_providers/aws_cloud/src/Form/Vpc/SubnetCreateForm.php
modules/cloud_service_providers/aws_cloud/src/Form/Vpc/SubnetCreateForm.php
<?php
namespace Drupal\aws_cloud\Form\Vpc;
use Drupal\Core\Form\FormStateInterface;
use Drupal\aws_cloud\Form\Ec2\AwsCloudContentForm;
use Drupal\aws_cloud\Entity\Vpc\Subnet;
/**
* Form controller for the subnet entity create form.
*
* @ingroup aws_cloud
*/
class SubnetCreateForm extends AwsCloudContentForm {
/**
* Overrides Drupal\Core\Entity\EntityFormController::buildForm().
*/
public function buildForm(array $form, FormStateInterface $form_state, $cloud_context = '') {
/* @var $entity \Drupal\aws_cloud\Entity\Ec2\Snapshot */
$form = parent::buildForm($form, $form_state);
$this->ec2Service->setCloudContext($cloud_context);
$entity = $this->entity;
$weight = -50;
$form['subnet'] = [
'#type' => 'details',
'#title' => $this->t('Subnet'),
'#open' => TRUE,
'#weight' => $weight++,
];
$form['subnet']['name'] = [
'#type' => 'textfield',
'#title' => $this->t('Name'),
'#maxlength' => 255,
'#size' => 60,
'#required' => TRUE,
];
$vpcs = $this->ec2Service->getVpcs();
ksort($vpcs);
$form['subnet']['vpc_id'] = [
'#type' => 'select',
'#title' => $this->t('VPC CIDR (ID)'),
'#options' => $vpcs,
'#default_value' => $entity->getVpcId(),
'#required' => TRUE,
];
$form['subnet']['cidr_block'] = [
'#type' => 'textfield',
'#title' => $this->t('IPv4 CIDR block'),
'#description' => $this->t('The range of IPv4 addresses for your VPC in CIDR block format, for example, 10.0.0.0/24. Block sizes must be between a /16 netmask and /28 netmask.'),
'#maxlength' => 255,
'#size' => 60,
'#required' => TRUE,
];
unset($form['tags']);
$this->addOthersFieldset($form, $weight++, $cloud_context);
$form['actions'] = $this->actions($form, $form_state, $cloud_context);
return $form;
}
/**
* Overrides Drupal\Core\Entity\EntityFormController::save().
*/
public function save(array $form, FormStateInterface $form_state) {
$this->trimTextfields($form, $form_state);
$cloud_context = $this->routeMatch->getParameter('cloud_context');
$entity = $this->entity;
$entity->setCloudContext($cloud_context);
$result = $this->ec2Service->createSubnet([
'VpcId' => $entity->getVpcId(),
'CidrBlock' => $entity->getCidrBlock(),
]);
if (isset($result['Subnet'])
&& ($entity->setSubnetId($result['Subnet']['SubnetId']))
&& ($entity->save())
) {
$this->setTagsInAws($entity->getSubnetId(), [
Subnet::TAG_CREATED_BY_UID => $entity->getOwner()->id(),
'Name' => $entity->getName(),
]);
// Update the subnet.
$this->ec2Service->updateSubnets([
'SubnetIds' => [$entity->getSubnetId()],
], FALSE);
$message = $this->t('The @label "%label" has been created.', [
'@label' => $entity->getEntityType()->getLabel(),
'%label' => $entity->label(),
]);
$this->messenger->addMessage($message);
$form_state->setRedirect('view.aws_cloud_subnet.list', ['cloud_context' => $entity->getCloudContext()]);
}
else {
$message = $this->t('The @label "%label" couldn\'t create.', [
'@label' => $entity->getEntityType()->getLabel(),
'%label' => $entity->label(),
]);
$this->messenger->addError($message);
}
}
}
