You are here

class GridStackListBuilder in GridStack 8.2

Same name and namespace in other branches
  1. 8 modules/gridstack_ui/src/Controller/GridStackListBuilder.php \Drupal\gridstack_ui\Controller\GridStackListBuilder

Provides a listing of GridStack optionsets.

Hierarchy

Expanded class hierarchy of GridStackListBuilder

File

modules/gridstack_ui/src/Controller/GridStackListBuilder.php, line 19

Namespace

Drupal\gridstack_ui\Controller
View source
class GridStackListBuilder extends DraggableListBuilder {

  /**
   * The current user.
   *
   * @var \Drupal\Core\Session\AccountInterface
   */
  protected $currentUser;

  /**
   * The gridstack manager.
   *
   * @var \Drupal\gridstack\GridStackManagerInterface
   */
  protected $manager;

  /**
   * {@inheritdoc}
   */
  public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
    $instance = new static($entity_type, $container
      ->get('entity_type.manager')
      ->getStorage($entity_type
      ->id()));
    $instance->currentUser = $container
      ->get('current_user');
    $instance->manager = $container
      ->get('gridstack.manager');
    return $instance;
  }

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'gridstack_list_form';
  }

  /**
   * {@inheritdoc}
   */
  public function buildHeader() {
    $header = [
      'label' => $this
        ->t('Optionset'),
      'id' => $this
        ->t('ID'),
      'icon' => $this
        ->t('Icon'),
      'framework' => $this
        ->t('Grid framework'),
      'grids' => $this
        ->t('Grids : Nested'),
      'provider' => $this
        ->t('Provider'),
    ];
    return $header + parent::buildHeader();
  }

  /**
   * {@inheritdoc}
   */
  public function buildRow(EntityInterface $entity) {
    $icon_uri = $entity
      ->getIconUri();
    $manager = $this->manager;
    $framework = $manager
      ->configLoad('framework', 'gridstack.settings');
    $use_framework = $framework && $entity
      ->getOption('use_framework');
    $row['label'] = Html::escape($entity
      ->label());
    $row['id'] = [
      '#markup' => $entity
        ->id(),
    ];
    $row['icon'] = [];
    $row['framework'] = [];
    $token_query = [
      IMAGE_DERIVATIVE_TOKEN => time(),
    ];
    $image_url = file_url_transform_relative(file_create_url($icon_uri));
    $image_url .= (strpos($image_url, '?') !== FALSE ? '&' : '?') . UrlHelper::buildQuery($token_query);
    if ($description = $entity
      ->description()) {
      $row['label'] .= '<br><small>' . $description . '</small>';
    }
    if (!empty($icon_uri)) {
      $row['icon'] = [
        '#theme' => 'blazy',
        '#settings' => [
          'uri' => $icon_uri,
          'lazy' => 'blazy',
          'image_url' => $image_url,
        ],
        '#item_attributes' => [
          'width' => 140,
        ],
      ];
    }
    $row['framework']['#markup'] = $use_framework ? ucwords($framework) : 'GridStack/ Native';
    $grids = $entity
      ->getLastBreakpoint();
    $nested = $entity
      ->getLastBreakpoint('nested');
    $nested = array_filter($nested);
    $counts = [];
    if (!empty($nested)) {
      foreach ($nested as $grid) {
        if (empty($grid)) {
          continue;
        }
        if (is_string($grid)) {
          $grid = Json::decode($grid);
        }
        $boxes = [];
        foreach ($grid as $item) {
          if (!isset($item['width'])) {
            continue;
          }
          $boxes[] = $item['width'];
        }
        $counts = NestedArray::mergeDeep($counts, $boxes);
      }
    }
    $nested_grids = empty($nested) ? '0' : count($counts);
    $row['grids']['#markup'] = $this
      ->t('@grids : @nested', [
      '@grids' => count($grids),
      '@nested' => $nested_grids,
    ]);
    $dependencies = $entity
      ->getDependencies();
    $row['provider']['#markup'] = isset($dependencies['module'][0]) ? $dependencies['module'][0] : 'gridstack';
    return $row + parent::buildRow($entity);
  }

  /**
   * {@inheritdoc}
   */
  public function getDefaultOperations(EntityInterface $entity) {
    $operations = parent::getDefaultOperations($entity);
    if (isset($operations['edit'])) {
      $operations['edit']['title'] = $this
        ->t('Configure');
    }
    $operations['duplicate'] = [
      'title' => $this
        ->t('Duplicate'),
      'weight' => 15,
      'url' => $entity
        ->toUrl('duplicate-form'),
    ];
    $defaults = [
      'bootstrap',
      'default',
      'foundation',
      'frontend',
    ];
    if (in_array($entity
      ->id(), $defaults)) {
      unset($operations['delete'], $operations['edit']);
    }
    return $operations;
  }

  /**
   * {@inheritdoc}
   */
  public function render() {
    $build['description'] = [
      '#markup' => '<p>' . $this
        ->t("Manage the GridStack optionsets. Optionsets are Config Entities. Use the Operations column to edit, clone and delete optionsets.<br><br>By default, four default optionsets are created: <code>Admin, Frontend, Bootstrap, Foundation</code>. GridStack supports both one-dimensional layouts like Bootstrap, Foundation, etc. (<a href=':ui'>enable here</a>), and two-dimensional layouts via GridStack JS or native browser CSS Grid Layout, and Masonry, Packery, Isotope via <a href=':outlayer'>Outlayer</a> module. To generate icons, edit and save optionsets.<br><strong>Important!</strong><br>Avoid overriding default or sample optionsets. Any customization will be lost at the next update. Use <code>Duplicate</code> button instead, unless a module declares direct usages. <br>Use <a href=':url'>config_update</a> module to revert to stored optionsets at <code>/admin/config/development/configuration/report/module/gridstack</code>, if needed. Clearing cache is required to register the new layouts for Layout Discovery/ Layout Builder.", [
        ':ui' => Url::fromRoute('gridstack.settings')
          ->toString(),
        ':url' => '//drupal.org/project/config_update',
        ':outlayer' => '//drupal.org/project/outlayer',
      ]) . '</p>',
    ];
    $build[] = parent::render();
    $attachments = $this->manager
      ->attach([
      'blazy' => TRUE,
    ]);
    $build['#attached'] = isset($build['#attached']) ? NestedArray::mergeDeep($build['#attached'], $attachments) : $attachments;
    $build['#attached']['library'][] = 'gridstack/admin';
    return $build;
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $form['#attributes']['class'][] = 'blazy';
    $form['#attributes']['data-blazy'] = '';
    return parent::buildForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    parent::submitForm($form, $form_state);
    $this
      ->messenger()
      ->addMessage($this
      ->t('The optionsets order has been updated.'));
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ConfigEntityListBuilder::load public function Loads entities of this type from storage for listing. Overrides EntityListBuilder::load 7
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
DraggableListBuilder::$entities protected property The entities being listed. 1
DraggableListBuilder::$entitiesKey protected property The key to use for the form element containing the entities. 3
DraggableListBuilder::$formBuilder protected property The form builder.
DraggableListBuilder::$limit protected property The number of entities to list per page, or FALSE to list all entities. Overrides EntityListBuilder::$limit
DraggableListBuilder::$weightKey protected property Name of the entity's weight field or FALSE if no field is provided.
DraggableListBuilder::formBuilder protected function Returns the form builder.
DraggableListBuilder::validateForm public function Form validation handler. Overrides FormInterface::validateForm 2
DraggableListBuilder::__construct public function Constructs a new EntityListBuilder object. Overrides EntityListBuilder::__construct 5
EntityHandlerBase::$moduleHandler protected property The module handler to invoke hooks on. 2
EntityHandlerBase::moduleHandler protected function Gets the module handler. 2
EntityHandlerBase::setModuleHandler public function Sets the module handler for this handler.
EntityListBuilder::$entityType protected property Information about the entity type.
EntityListBuilder::$entityTypeId protected property The entity type ID.
EntityListBuilder::$storage protected property The entity storage class. 1
EntityListBuilder::buildOperations public function Builds a renderable list of operation links for the entity. 2
EntityListBuilder::ensureDestination protected function Ensures that a destination is present on the given URL.
EntityListBuilder::getEntityIds protected function Loads entity IDs using a pager sorted by the entity id. 4
EntityListBuilder::getLabel Deprecated protected function Gets the label of an entity.
EntityListBuilder::getOperations public function Provides an array of information to build a list of operation links. Overrides EntityListBuilderInterface::getOperations 2
EntityListBuilder::getStorage public function Gets the entity storage. Overrides EntityListBuilderInterface::getStorage
EntityListBuilder::getTitle protected function Gets the title of the page. 1
GridStackListBuilder::$currentUser protected property The current user.
GridStackListBuilder::$manager protected property The gridstack manager.
GridStackListBuilder::buildForm public function Form constructor. Overrides DraggableListBuilder::buildForm
GridStackListBuilder::buildHeader public function Builds the header row for the entity listing. Overrides DraggableListBuilder::buildHeader 1
GridStackListBuilder::buildRow public function Builds a row for an entity in the entity listing. Overrides DraggableListBuilder::buildRow 1
GridStackListBuilder::createInstance public static function Instantiates a new instance of this entity handler. Overrides EntityListBuilder::createInstance
GridStackListBuilder::getDefaultOperations public function Gets this list's default operations. Overrides ConfigEntityListBuilder::getDefaultOperations 1
GridStackListBuilder::getFormId public function Returns a unique string identifying the form. Overrides FormInterface::getFormId 1
GridStackListBuilder::render public function Builds the entity listing as renderable array for table.html.twig. Overrides DraggableListBuilder::render 1
GridStackListBuilder::submitForm public function Form submission handler. Overrides DraggableListBuilder::submitForm
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.