cloud-8.x-2.0-beta1/modules/cloud_service_providers/k8s/src/Form/K8sDeleteForm.php
modules/cloud_service_providers/k8s/src/Form/K8sDeleteForm.php
<?php
namespace Drupal\k8s\Form;
use Drupal\cloud\Form\CloudContentDeleteForm;
use Drupal\cloud\Plugin\cloud\config\CloudConfigPluginManagerInterface;
use Drupal\cloud\Service\EntityLinkRendererInterface;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Entity\EntityManagerInterface;
use Drupal\Core\Entity\EntityRepositoryInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Messenger\Messenger;
use Drupal\Core\Plugin\CachedDiscoveryClearerInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\k8s\Service\K8sServiceInterface;
use Drupal\k8s\Service\K8sServiceException;
use Drupal\k8s\Traits\K8sFormTrait;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Class K8sDeleteForm - Base Delete class.
*
* This class injects the K8sServiceInterface and Messenger for use.
*
* @package Drupal\k8s\Form
*/
class K8sDeleteForm extends CloudContentDeleteForm {
use K8sFormTrait;
/**
* The K8s Service.
*
* @var \Drupal\k8s\Service\K8sServiceInterface
*/
protected $k8sService;
/**
* The Entity Type Manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* The current user.
*
* @var \Drupal\Core\Session\AccountInterface
*/
protected $currentUser;
/**
* A plugin cache clear instance.
*
* @var \Drupal\Core\Plugin\CachedDiscoveryClearerInterface
*/
protected $pluginCacheClearer;
/**
* A cache backend interface instance.
*
* @var \Drupal\Core\Cache\CacheBackendInterface
*/
protected $cacheRender;
/**
* Entity link renderer object.
*
* @var \Drupal\cloud\Service\EntityLinkRendererInterface
*/
protected $entityLinkRenderer;
/**
* The cloud service provider plugin manager (CloudConfigPluginManager).
*
* @var \Drupal\cloud\Plugin\cloud\config\CloudConfigPluginManagerInterface
*/
protected $cloudConfigPluginManager;
/**
* K8sDeleteForm constructor.
*
* @param \Drupal\Core\Entity\EntityManagerInterface $manager
* The Entity Manager.
* @param \Drupal\k8s\Service\K8sServiceInterface $k8s_service
* The K8s Service.
* @param \Drupal\Core\Messenger\Messenger $messenger
* The Messenger Service.
* @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository
* The entity repository service.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The Entity Type Manager.
* @param \Drupal\Core\Cache\CacheBackendInterface $cacheRender
* A cache backend interface instance.
* @param \Drupal\Core\Plugin\Cloud\Config\CachedDiscoveryClearerInterface $plugin_cache_clearer
* A plugin cache clear instance.
* @param \Drupal\cloud\Service\EntityLinkRendererInterface $entity_link_renderer
* The entity link render service.
* @param \Drupal\cloud\Plugin\cloud\config\CloudConfigPluginManagerInterface $cloud_config_plugin_manager
* The cloud service provider plugin manager (CloudConfigPluginManager).
*/
public function __construct(
EntityManagerInterface $manager,
K8sServiceInterface $k8s_service,
Messenger $messenger,
EntityRepositoryInterface $entity_repository,
EntityTypeManagerInterface $entity_type_manager,
CacheBackendInterface $cacheRender,
CachedDiscoveryClearerInterface $plugin_cache_clearer,
EntityLinkRendererInterface $entity_link_renderer,
CloudConfigPluginManagerInterface $cloud_config_plugin_manager
) {
parent::__construct($manager, $entity_repository, $messenger);
$this->k8sService = $k8s_service;
$this->entityTypeManager = $entity_type_manager;
$this->entityLinkRenderer = $entity_link_renderer;
$this->cacheRender = $cacheRender;
$this->pluginCacheClearer = $plugin_cache_clearer;
$this->cloudConfigPluginManager = $cloud_config_plugin_manager;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('entity.manager'),
$container->get('k8s'),
$container->get('messenger'),
$container->get('entity.repository'),
$container->get('entity_type.manager'),
$container->get('cache.render'),
$container->get('plugin.cache_clearer'),
$container->get('entity.link_renderer'),
$container->get('plugin.manager.cloud_config_plugin')
);
}
/**
* Helper method to clear cache values.
*/
protected function clearCacheValues() {
$this->pluginCacheClearer->clearCachedDefinitions();
$this->cacheRender->invalidateAll();
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$entity = $this->entity;
$name_underscore = $this->getShortEntityTypeNameUnderscore($entity);
$name_camel = $this->getShortEntityTypeNameCamel($this->entity);
$this->k8sService->setCloudContext($entity->getCloudContext());
try {
$method_name = "delete{$name_camel}";
$this->k8sService->$method_name($entity->getNamespace(), [
'metadata' => [
'name' => $entity->getName(),
],
]);
$message = $this->t('The @type "@label" has been deleted.', [
'@type' => $entity->getEntityType()->getLabel(),
'@label' => $entity->label(),
]);
$entity->delete();
$this->messenger->addMessage($message);
}
catch (K8sServiceException $e) {
$message = $this->t('The @type "@label" couldn\'t delete.', [
'@type' => $entity->getEntityType()->getLabel(),
'@label' => $entity->label(),
]);
$this->messenger->addError($message);
}
$form_state->setRedirect("view.k8s_{$name_underscore}.list", ['cloud_context' => $entity->getCloudContext()]);
}
}
