You are here

class WebformAddonsController in Webform 8.5

Same name and namespace in other branches
  1. 6.x src/Controller/WebformAddonsController.php \Drupal\webform\Controller\WebformAddonsController

Provides route responses for Webform add-ons.

Hierarchy

Expanded class hierarchy of WebformAddonsController

File

src/Controller/WebformAddonsController.php, line 17

Namespace

Drupal\webform\Controller
View source
class WebformAddonsController extends ControllerBase implements ContainerInjectionInterface {

  /**
   * The current request.
   *
   * @var \Symfony\Component\HttpFoundation\Request
   */
  protected $request;

  /**
   * The webform theme manager.
   *
   * @var \Drupal\webform\WebformThemeManagerInterface
   */
  protected $themeManager;

  /**
   * The webform add-ons manager.
   *
   * @var \Drupal\webform\WebformAddonsManagerInterface
   */
  protected $addons;

  /**
   * Constructs a WebformAddonsController object.
   *
   * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
   *   The request stack.
   * @param \Drupal\webform\WebformThemeManagerInterface $theme_manager
   *   The webform theme manager.
   * @param \Drupal\webform\WebformAddonsManagerInterface $addons
   *   The webform add-ons manager.
   */
  public function __construct(RequestStack $request_stack, WebformThemeManagerInterface $theme_manager, WebformAddonsManagerInterface $addons) {
    $this->request = $request_stack
      ->getCurrentRequest();
    $this->themeManager = $theme_manager;
    $this->addons = $addons;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static($container
      ->get('request_stack'), $container
      ->get('webform.theme_manager'), $container
      ->get('webform.addons_manager'));
  }

  /**
   * Returns the Webform add-ons page.
   *
   * @return array
   *   The webform submission webform.
   */
  public function index() {
    $build = [
      '#type' => 'container',
      '#attributes' => [
        'class' => [
          'webform-addons',
        ],
      ],
    ];

    // Support.
    if (!$this
      ->config('webform.settings')
      ->get('ui.support_disabled')) {
      $build['support'] = [
        '#theme' => 'webform_help_support',
      ];
    }

    // Filter.
    $is_claro_theme = $this->themeManager
      ->isActiveTheme('claro');
    $data_source = $is_claro_theme ? '.admin-item' : 'li';
    $data_parent = $is_claro_theme ? '.admin-item' : 'li';
    $build['filter'] = [
      '#type' => 'search',
      '#title' => $this
        ->t('Filter'),
      '#title_display' => 'invisible',
      '#size' => 30,
      '#placeholder' => $this
        ->t('Filter by keyword'),
      '#attributes' => [
        'name' => 'text',
        'class' => [
          'webform-form-filter-text',
        ],
        'data-summary' => '.webform-addons-summary',
        'data-item-singlular' => $this
          ->t('add-on'),
        'data-item-plural' => $this
          ->t('add-ons'),
        'data-no-results' => '.webform-addons-no-results',
        'data-element' => '.admin-list',
        'data-source' => $data_source,
        'data-parent' => $data_parent,
        'title' => $this
          ->t('Enter a keyword to filter by.'),
        'autofocus' => 'autofocus',
      ],
    ];

    // Display info.
    $build['info'] = [
      '#markup' => $this
        ->t('@total add-ons', [
        '@total' => count($this->addons
          ->getProjects()),
      ]),
      '#prefix' => '<p class="webform-addons-summary">',
      '#suffix' => '</p>',
    ];

    // Projects.
    $build['projects'] = [
      '#type' => 'container',
      '#attributes' => [
        'class' => [
          'webform-addons-projects',
          'js-webform-details-toggle',
          'webform-details-toggle',
        ],
      ],
    ];

    // Store and disable compact mode.
    // @see system_admin_compact_mode
    $system_admin_compact_mode = system_admin_compact_mode();
    $this->request->cookies
      ->set('Drupal_visitor_admin_compact_mode', FALSE);
    $categories = $this->addons
      ->getCategories();
    foreach ($categories as $category_name => $category) {
      $build['projects'][$category_name] = [
        '#type' => 'details',
        '#title' => $category['title'],
        '#attributes' => [
          'data-webform-element-id' => 'webform-addons-' . $category_name,
        ],
        '#open' => TRUE,
      ];
      $projects = $this->addons
        ->getProjects($category_name);
      foreach ($projects as $project_name => &$project) {

        // Append (Experimental) to title.
        if (!empty($project['experimental'])) {
          $project['title'] .= ' [' . $this
            ->t('EXPERIMENTAL') . ']';
        }

        // Prepend logo to title.
        if (isset($project['logo'])) {
          $project['title'] = Markup::create('<img src="' . $project['logo']
            ->toString() . '" alt="' . $project['title'] . '"/>' . $project['title']);
        }
        $project['description'] .= '<br /><small>' . $project['url']
          ->toString() . '</small>';

        // Append recommended to project's description.
        if (!empty($project['recommended'])) {
          $project['description'] .= '<br /><b class="color-success"> ★' . $this
            ->t('Recommended') . '</b>';
        }
        if (!empty($project['install']) && !$this
          ->moduleHandler()
          ->moduleExists($project_name)) {

          // If current user can install module then display a dismissible warning.
          if ($this
            ->currentUser()
            ->hasPermission('administer modules')) {
            $build['projects'][$project_name . '_message'] = [
              '#type' => 'webform_message',
              '#message_id' => $project_name . '_message',
              '#message_type' => 'warning',
              '#message_close' => TRUE,
              '#message_storage' => WebformMessage::STORAGE_USER,
              '#message_message' => $this
                ->t('Please install to the <a href=":href">@title</a> project to improve the Webform module\'s user experience.', [
                ':href' => $project['url']
                  ->toString(),
                '@title' => $project['title'],
              ]) . ' <em>' . $project['install'] . '</em>',
              '#weight' => -100,
            ];
          }
        }
      }
      $build['projects'][$category_name]['content'] = [
        '#theme' => 'admin_block_content',
        '#content' => $projects,
      ];
    }

    // Reset compact mode to stored setting.
    $this->request->cookies
      ->get('Drupal_visitor_admin_compact_mode', $system_admin_compact_mode);

    // No results.
    $build['no_results'] = [
      '#type' => 'webform_message',
      '#message_message' => $this
        ->t('No add-ons found. Try a different search.'),
      '#message_type' => 'info',
      '#attributes' => [
        'class' => [
          'webform-addons-no-results',
        ],
      ],
    ];
    $build['#attached']['library'][] = 'webform/webform.addons';
    $build['#attached']['library'][] = 'webform/webform.admin';
    return $build;
  }

}

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::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.
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.
WebformAddonsController::$addons protected property The webform add-ons manager.
WebformAddonsController::$request protected property The current request.
WebformAddonsController::$themeManager protected property The webform theme manager.
WebformAddonsController::create public static function Instantiates a new instance of this class. Overrides ControllerBase::create
WebformAddonsController::index public function Returns the Webform add-ons page.
WebformAddonsController::__construct public function Constructs a WebformAddonsController object.