You are here

class DefaultController in Background Process 8

Same name in this branch
  1. 8 src/Controller/DefaultController.php \Drupal\background_process\Controller\DefaultController
  2. 8 background_batch/src/Controller/DefaultController.php \Drupal\background_batch\Controller\DefaultController

Implements Default controller for the background_process module.

Hierarchy

Expanded class hierarchy of DefaultController

File

src/Controller/DefaultController.php, line 15

Namespace

Drupal\background_process\Controller
View source
class DefaultController extends ControllerBase {

  /**
   * Implements Background Process Service Access.
   */
  public function backgroundProcessServiceAccess($handle, $token, AccountInterface $account) {

    // Setup service.
    ignore_user_abort(TRUE);
    $handle = rawurldecode($handle);
    $token = rawurldecode($token);

    // Ensure no session!
    unset($_SESSION);
    $process = background_process_get_process($handle);
    if (!$process) {
      \Drupal::logger('bg_process')
        ->notice('Unknown process: %handle', [
        '%handle' => $handle,
      ]);
      return FALSE;
    }
    if ($token !== $process->token) {
      \Drupal::logger('bg_process')
        ->notice('Invalid token: %token for handle: %handle', [
        '%token' => $token,
        '%handle' => $handle,
      ]);
      return FALSE;
    }

    // Login as the user that requested the call.
    $user = \Drupal::currentUser();
    if ($process->uid) {
      $load_user = \Drupal::entityManager()
        ->getStorage('user')
        ->load($process->uid);
      if (!$load_user) {

        // Invalid user!
        \Drupal::logger('bg_process')
          ->notice('Invalid user: %uid for handle: %handle', [
          '%uid' => $process->uid,
          '%handle' => $handle,
        ]);
        return FALSE;
      }
      $user = $load_user;
    }
    else {
      $user = new AnonymousUserSession();
    }
    return AccessResult::allowedIf($account
      ->hasPermission(TRUE));
  }

  /**
   * Implements Background Process Service Start.
   */
  public function backgroundProcessServiceStart($handle, $return = FALSE) {
    header("Content-Type: text/plain");

    // Clean up the mess the menu-router system leaves behind.
    $cid = 'menu_item:' . hash('sha256', $_GET['q']);
    drupal_register_shutdown_function('_background_process_cleanup_menu', $cid);

    // Setup service.
    ignore_user_abort(TRUE);
    @set_time_limit(\Drupal::config('background_process.settings')
      ->get('background_process_service_timeout'));
    $handle = rawurldecode($handle);
    return background_process_service_execute($handle, $return);
  }

  /**
   * Implements Background Process Service Unlock.
   */
  public function backgroundProcessServiceUnlock($handle) {
    $handle = rawurldecode($handle);
    if (background_process_unlock($handle)) {
      drupal_set_message($this
        ->t('Process %handle unlocked', [
        '%handle' => $handle,
      ]));
    }
    else {
      drupal_set_message($this
        ->t('Process %handle could not be unlocked', [
        '%handle' => $handle,
      ]), 'error');
    }
    return new RedirectResponse('/admin/config/system/background-process/overview');
  }

  /**
   * Implements to Check Token.
   */
  public function backgroundProcessCheckToken() {
    header("Content-Type: text/plain");
    print \Drupal::config('background_process.settings')
      ->get('background_process_token');
    exit;
  }

  /**
   * Implements Background Process Overview Page.
   */
  public function backgroundProcessOverviewPage() {
    $processes = background_process_get_processes();
    $data = [];
    global $base_url;
    foreach ($processes as $process) {
      $progress = progress_get_progress($process->handle);
      $url = Url::fromUri($base_url . '/background-process/unlock/' . rawurlencode($process->handle));
      $external_link = \Drupal::l($this
        ->t('Unlock'), $url);
      if ($process->callback[1] != '') {
        $process->callback = $process->callback[1];
      }
      $data[] = [
        $process->handle,
        _background_process_callback_name($process->callback),
        $process->uid,
        $process->service_host,
        \Drupal::service('date.formatter')
          ->format((int) $process->start, 'custom', 'Y-m-d H:i:s'),
        $progress ? sprintf("%.02f%%", $progress->progress * 100) : $this
          ->t('N/A'),
        $external_link,
        [
          'attributes' => [
            'class' => 'button-unlock',
          ],
          'query' => \Drupal::service('redirect.destination')
            ->getAsArray(),
        ],
      ];
    }
    $header = [
      'Handle',
      'Callback',
      'User',
      'Host',
      'Start time',
      'Progress',
      'Unlock',
    ];

    // The table description.
    $markup = [
      '#type' => 'table',
      '#header' => $header,
      '#rows' => $data,
    ];
    return $markup;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ControllerBase::$configFactory protected property The configuration factory.
ControllerBase::$currentUser protected property The current user service. 1
ControllerBase::$entityFormBuilder protected property The entity form builder.
ControllerBase::$entityManager protected property The entity manager.
ControllerBase::$entityTypeManager protected property The entity type manager.
ControllerBase::$formBuilder protected property The form builder. 2
ControllerBase::$keyValue protected property The key-value storage. 1
ControllerBase::$languageManager protected property The language manager. 1
ControllerBase::$moduleHandler protected property The module handler. 2
ControllerBase::$stateService protected property The state service.
ControllerBase::cache protected function Returns the requested cache bin.
ControllerBase::config protected function Retrieves a configuration object.
ControllerBase::container private function Returns the service container.
ControllerBase::create public static function Instantiates a new instance of this class. Overrides ContainerInjectionInterface::create 40
ControllerBase::currentUser protected function Returns the current user. 1
ControllerBase::entityFormBuilder protected function Retrieves the entity form builder.
ControllerBase::entityManager Deprecated protected function Retrieves the entity manager service.
ControllerBase::entityTypeManager protected function Retrieves the entity type manager.
ControllerBase::formBuilder protected function Returns the form builder service. 2
ControllerBase::keyValue protected function Returns a key/value storage collection. 1
ControllerBase::languageManager protected function Returns the language manager service. 1
ControllerBase::moduleHandler protected function Returns the module handler. 2
ControllerBase::redirect protected function Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait::redirect
ControllerBase::state protected function Returns the state storage service.
DefaultController::backgroundProcessCheckToken public function Implements to Check Token.
DefaultController::backgroundProcessOverviewPage public function Implements Background Process Overview Page.
DefaultController::backgroundProcessServiceAccess public function Implements Background Process Service Access.
DefaultController::backgroundProcessServiceStart public function Implements Background Process Service Start.
DefaultController::backgroundProcessServiceUnlock public function Implements Background Process Service Unlock.
LinkGeneratorTrait::$linkGenerator protected property The link generator. 1
LinkGeneratorTrait::getLinkGenerator Deprecated protected function Returns the link generator.
LinkGeneratorTrait::l Deprecated protected function Renders a link to a route given a route name and its parameters.
LinkGeneratorTrait::setLinkGenerator Deprecated public function Sets the link generator service.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
UrlGeneratorTrait::$urlGenerator protected property The url generator.
UrlGeneratorTrait::getUrlGenerator Deprecated protected function Returns the URL generator service.
UrlGeneratorTrait::setUrlGenerator Deprecated public function Sets the URL generator service.
UrlGeneratorTrait::url Deprecated protected function Generates a URL or path for a specific route based on the given parameters.