cloud-8.x-2.0-beta1/modules/cloud_service_providers/openstack/src/Controller/ApiController.php

modules/cloud_service_providers/openstack/src/Controller/ApiController.php
<?php

namespace Drupal\openstack\Controller;

use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Messenger\Messenger;
use Drupal\Core\Render\RendererInterface;
use Drupal\openstack\Service\OpenStackEc2Service;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RequestStack;

/**
 * Api controller for interacting with OpenStack.
 */
class ApiController extends ControllerBase implements ApiControllerInterface {

  /**
   * The OpenStack EC2 Service.
   *
   * @var \Drupal\openstack\Service\OpenStackEc2Service
   */
  private $openStackEc2Service;

  /**
   * The Messenger service.
   *
   * @var \Drupal\Core\Messenger\Messenger
   */
  protected $messenger;

  /**
   * Request stack.
   *
   * @var \Symfony\Component\HttpFoundation\RequestStack
   */
  private $requestStack;

  /**
   * Renderer service.
   *
   * @var \Drupal\Core\Render\RendererInterface
   */
  private $renderer;

  /**
   * ApiController constructor.
   *
   * @param \Drupal\openstack\Service\OpenStackEc2Service $openstack_ec2_service
   *   Object for interfacing with AWS API.
   * @param \Drupal\Core\Messenger\Messenger $messenger
   *   Messanger Object.
   * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
   *   Request stack object.
   * @param \Drupal\Core\Render\RendererInterface $renderer
   *   The renderer service.
   */
  public function __construct(OpenStackEc2Service $openstack_ec2_service, Messenger $messenger, RequestStack $request_stack, RendererInterface $renderer) {
    $this->openStackEc2Service = $openstack_ec2_service;
    $this->messenger = $messenger;
    $this->requestStack = $request_stack;
    $this->renderer = $renderer;
  }

  /**
   * Dependency Injection.
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('openstack.ec2'),
      $container->get('messenger'),
      $container->get('request_stack'),
      $container->get('renderer')
    );
  }

  /**
   * {@inheritdoc}
   */
  public function updateInstanceList($cloud_context) {
    $this->openStackEc2Service->setCloudContext($cloud_context);
    $updated = $this->openStackEc2Service->updateInstances();

    if ($updated != FALSE) {
      $this->messageUser($this->t('Updated Instances.'));
    }
    else {
      $this->messageUser($this->t('Unable to update Instances.'), 'error');
    }

    return $this->redirect('entity.openstack_cloud_instance.collection', [
      'cloud_context' => $cloud_context,
    ]);
  }

  /**
   * {@inheritdoc}
   */
  public function updateAll() {
    $regions = $this->requestStack->getCurrentRequest()->query->get('regions');
    if ($regions == NULL) {
      $this->messageUser($this->t('No region specified'), 'error');
    }
    else {
      $regions_array = explode(',', $regions);

      foreach ($regions_array as $region) {
        $entity = $this->entityTypeManager()->getStorage('cloud_config')
          ->loadByProperties(
            [
              'cloud_context' => $region,
            ]);
        if ($entity) {
          openstack_update_resources(array_shift($entity));
        }
      }

      $this->messageUser($this->t('Creating cloud service provider was performed successfully.'));
      drupal_flush_all_caches();
    }
    return $this->redirect('entity.cloud_config.collection');
  }

  /**
   * Helper method to add messages for the end user.
   *
   * @param string $message
   *   The message.
   * @param string $type
   *   The message type: error or message.
   */
  private function messageUser($message, $type = 'message') {
    switch ($type) {
      case 'error':
        $this->messenger->addError($message);
        break;

      case 'message':
        $this->messenger->addMessage($message);
      default:
        break;
    }
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc