You are here

class GridStackListBuilder in GridStack 8

Same name and namespace in other branches
  1. 8.2 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 20

Namespace

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

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

  /**
   * Constructs a new GridStackListBuilder object.
   *
   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
   *   The entity type definition.
   * @param \Drupal\Core\Entity\EntityStorageInterface $storage
   *   The entity storage class.
   * @param \Drupal\gridstack\GridStackManagerInterface $manager
   *   The gridstack manager.
   */
  public function __construct(EntityTypeInterface $entity_type, EntityStorageInterface $storage, GridStackManagerInterface $manager) {
    parent::__construct($entity_type, $storage);
    $this->manager = $manager;
  }

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

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

  /**
   * {@inheritdoc}
   */
  public function buildHeader() {
    $header = [
      'label' => $this
        ->t('Optionset'),
      '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['icon'] = [];
    $row['framework'] = [];
    if (!empty($icon_uri)) {
      $row['icon'] = [
        '#theme' => 'blazy',
        '#settings' => [
          'uri' => $icon_uri,
          'lazy' => 'blazy',
        ],
      ];
    }
    $row['framework']['#markup'] = $use_framework ? ucwords($framework) : 'GridStack JS';
    $grids = $entity
      ->getEndBreakpointGrids();
    $nested = $entity
      ->getEndBreakpointGrids('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'),
    ];
    if ($entity
      ->id() == 'default') {
      unset($operations['delete'], $operations['edit']);
    }
    if ($entity
      ->id() == 'frontend') {
      unset($operations['delete']);
    }
    return $operations;
  }

  /**
   * Adds some descriptive text to the gridstack optionsets list.
   *
   * @return array
   *   Renderable array.
   *
   * @see admin/config/development/configuration/single/export
   */
  public function render() {
    $build['description'] = [
      '#markup' => $this
        ->t("<p>Manage the GridStack optionsets. Optionsets are Config Entities.</p><p>By default, when this module is enabled, four optionsets are created from configuration: Default Admin, Default Frontend, Default Bootstrap/ Foundation. Install GridStack example module to speed up by cloning them. Use the Operations column to edit, clone and delete optionsets. GridStack supports both magazine layout (GridStack JS), and static float layout (Bootstrap/ Foundation). The main difference is no fixed height, no JS, just CSS, for static float layout. Visit <a href=':ui'>GridStack UI</a> page to enable its support. To generate icons, edit and save optionsets. Press <code>F5</code>, or <code>CTRL/CMD + R</code> to refresh cached icons whenever updated.<br><strong>Important!</strong><br>Avoid overriding Default Admin (hidden) optionset as it is meant for Default -- checking and cleaning the frontend. Use Duplicate Default Frontend (GridStack JS), or Default Bootstrap/ Foundation, accordingly instead. Otherwise possible messes.<br>Use <a href=':url'>config_update</a> module to revert to stored optionsets at <em>/admin/config/development/configuration/report/module/gridstack</em>, if needed.</p>", [
        ':ui' => Url::fromRoute('gridstack.settings')
          ->toString(),
        ':url' => '//drupal.org/project/config_update',
      ]),
    ];
    $build[] = parent::render();
    $build['#attached']['library'][] = 'blazy/load';
    $build['#attached']['library'][] = 'gridstack/admin';
    return $build;
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    parent::submitForm($form, $form_state);
    drupal_set_message($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::buildForm public function Form constructor. Overrides FormInterface::buildForm 4
DraggableListBuilder::formBuilder protected function Returns the form builder.
DraggableListBuilder::validateForm public function Form validation handler. Overrides FormInterface::validateForm 2
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::$manager protected property The gridstack manager.
GridStackListBuilder::buildHeader public function Builds the header row for the entity listing. Overrides DraggableListBuilder::buildHeader
GridStackListBuilder::buildRow public function Builds a row for an entity in the entity listing. Overrides DraggableListBuilder::buildRow
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
GridStackListBuilder::getFormId public function Returns a unique string identifying the form. Overrides FormInterface::getFormId
GridStackListBuilder::render public function Adds some descriptive text to the gridstack optionsets list. Overrides DraggableListBuilder::render
GridStackListBuilder::submitForm public function Form submission handler. Overrides DraggableListBuilder::submitForm
GridStackListBuilder::__construct public function Constructs a new GridStackListBuilder object. Overrides DraggableListBuilder::__construct
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.