ConnectionAddController.php in RedHen CRM 8
File
modules/redhen_connection/src/Controller/ConnectionAddController.php
View source
<?php
namespace Drupal\redhen_connection\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Link;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class ConnectionAddController extends ControllerBase {
public function __construct(EntityStorageInterface $storage, EntityStorageInterface $type_storage) {
$this->storage = $storage;
$this->typeStorage = $type_storage;
}
public static function create(ContainerInterface $container) {
$entity_type_manager = $container
->get('entity_type.manager');
return new static($entity_type_manager
->getStorage('redhen_connection'), $entity_type_manager
->getStorage('redhen_connection_type'));
}
public function add(Request $request) {
$entity = redhen_connection_get_connection_entity_from_route();
$types = $this->typeStorage
->loadMultiple();
foreach ($types as $key => $redhen_connection_type) {
$connection = $redhen_connection_type
->getEndpointEntityTypes($entity
->getEntityTypeId(), $entity
->getType());
if (empty($connection)) {
unset($types[$key]);
}
}
if ($types && count($types) == 1) {
$type = reset($types);
return $this
->addForm($request, $type, $entity);
}
if (count($types) === 0) {
return [
'#markup' => $this
->t('You have not created any %bundle types yet. @link to add a new type.', [
'%bundle' => 'Connection',
'@link' => Link::createFromRoute($this
->t('Go to the type creation page'), 'entity.redhen_connection_type.add_form'),
]),
];
}
return [
'#theme' => 'redhen_connection_content_add_list',
'#content' => $types,
'#entity' => $entity,
];
}
public function getAddTitle() {
$entity_type = redhen_connection_get_connection_entity_from_route()
->getEntityType();
return t('Select a @type Connection Type', [
'@type' => $entity_type
->getLabel(),
]);
}
public function addForm(Request $request, EntityInterface $redhen_connection_type) {
$entity = redhen_connection_get_connection_entity_from_route();
$endpoint_fields = $redhen_connection_type
->getEndpointFields($entity
->getEntityTypeId(), $entity
->getType());
if (empty($endpoint_fields)) {
throw new NotFoundHttpException();
}
$connection_entity = $this->storage
->create([
'type' => $redhen_connection_type
->id(),
]);
$field = reset($endpoint_fields);
$connection_entity
->set($field, $entity);
return $this
->entityFormBuilder()
->getForm($connection_entity, 'default', [
'fixed_endpoint' => $field,
]);
}
public function getAddFormTitle(EntityInterface $redhen_connection_type) {
$entity = redhen_connection_get_connection_entity_from_route();
return t('Create @type Connection for @entity', [
'@type' => $redhen_connection_type
->label(),
'@entity' => $entity
->label(),
]);
}
}