ScheduledUpdateAddController.php in Scheduled Updates 8
File
src/Controller/ScheduledUpdateAddController.php
View source
<?php
namespace Drupal\scheduled_updates\Controller;
use Drupal\Core\Link;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Url;
use Drupal\scheduled_updates\ScheduledUpdateTypeInterface;
use Drupal\scheduled_updates\UpdateRunnerUtils;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Request;
class ScheduledUpdateAddController extends ControllerBase {
protected $typeStorage;
protected $storage;
protected $runnerUtils;
public function __construct(EntityTypeManagerInterface $entityTypeManager, UpdateRunnerUtils $runnerUtils) {
$this->storage = $entityTypeManager
->getStorage('scheduled_update');
$this->typeStorage = $entityTypeManager
->getStorage('scheduled_update_type');
$this->runnerUtils = $runnerUtils;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('entity_type.manager'), $container
->get('scheduled_updates.update_runner'));
}
public function add(Request $request) {
$types = $this
->getIndependentTypes();
if ($types && count($types) == 1) {
$type = reset($types);
return $this
->addForm($type, $request);
}
if (count($types) === 0) {
return array(
'#markup' => $this
->t('You have not created any %bundle types yet. @link to add a new type.', [
'%bundle' => 'Scheduled update',
'@link' => Link::fromTextAndUrl($this
->t('Go to the type creation page'), Url::fromRoute('entity.scheduled_update_type.add_form')),
]),
);
}
return array(
'#theme' => 'scheduled_update_content_add_list',
'#content' => $types,
);
}
public function addForm(EntityInterface $scheduled_update_type, Request $request) {
$entity = $this->storage
->create(array(
'type' => $scheduled_update_type
->id(),
));
return $this
->entityFormBuilder()
->getForm($entity);
}
public function getAddFormTitle(EntityInterface $scheduled_update_type) {
return t('Create <em>@label</em> Scheduled Update', array(
'@label' => $scheduled_update_type
->label(),
));
}
protected function getIndependentTypes() {
$types = [];
foreach ($this->typeStorage
->loadMultiple() as $type) {
if ($this->runnerUtils
->isIndependentUpdater($type)) {
$types[] = $type;
}
}
return $types;
}
public function addPageAccess(AccountInterface $account) {
$types = $this->typeStorage
->loadMultiple();
$perms = [];
foreach ($types as $type_id => $type) {
$perms[] = "create {$type_id} scheduled updates";
}
return AccessResult::allowedIfHasPermissions($account, $perms, 'OR');
}
public function addFormAccess(AccountInterface $account, ScheduledUpdateTypeInterface $scheduled_update_type) {
if ($scheduled_update_type
->isEmbeddedType()) {
return AccessResult::forbidden();
}
$type_id = $scheduled_update_type
->id();
return AccessResult::allowedIfHasPermission($account, "create {$type_id} scheduled updates");
}
}