You are here

class Grid in Filebrowser 8.2

Same name and namespace in other branches
  1. 3.x src/Grid/Grid.php \Drupal\filebrowser\Grid\Grid

Hierarchy

  • class \Drupal\filebrowser\Grid\Grid

Expanded class hierarchy of Grid

1 file declares its use of Grid
Presentation.php in src/Presentation.php

File

src/Grid/Grid.php, line 12

Namespace

Drupal\filebrowser\Grid
View source
class Grid {

  /**
   * @var array Array of unsorted grids that should converted to rows or columns
   */
  protected $variables;

  /**
   * @var array Sorted grids
   */
  protected $sortedGrids;

  /**
   * @var array Options for construction of the grids
   * 'alignment' => horizontal or vertical (vertical not yet implemented,
   * 'columns' => amount of columns,
   * 'automatic_width' = true or false
   *
   */
  protected $options;
  public function __construct($variables, $options) {
    $this->variables = $variables;
    $this->options = $options;
  }
  public function get() {
    $this
      ->CreateGrids();
    return $this->sortedGrids;
  }
  protected function CreateGrids() {
    $options = $this->options;

    //debug($this->variables);
    $horizontal = $options['alignment'] === 'horizontal';
    $columns = $options['columns'];
    $row = 0;
    $col = 0;
    $items = [];
    $remainders = count($this->variables) % $columns;
    $num_rows = floor(count($this->variables) / $columns);

    //Calculate the width of the grids and pass it in the $items['options']
    $this->options['column_width'] = 100 / $columns;

    // Take each grid and assign it a row or column
    // the sorted grids will be in $items
    foreach ($this->variables as $index => $item) {

      // Add the item.
      if ($horizontal) {
        $items[$row]['row'][$col]['content'] = $item;
      }
      else {

        // $items[$col]['content'][$row]['content'] = $item;
      }

      // Create attributes for rows.
      if (!$horizontal || $horizontal && empty($items[$row]['attributes'])) {
        $row_attributes = [
          'class' => [],
        ];

        // Add custom row classes.
        //  $row_class = array_filter(explode(' ', $variables['view']->style_plugin->getCustomClass($result_index, 'row')));
        if (!empty($row_class)) {
          $row_attributes['class'] = array_merge($row_attributes['class'], $row_class);
        }

        // Add row attributes to the item.
        if ($horizontal) {
          $items[$row]['attributes'] = new Attribute($row_attributes);
        }
        else {
          $items[$col]['content'][$row]['attributes'] = new Attribute($row_attributes);
        }
      }

      // Create attributes for columns.
      if ($horizontal || !$horizontal && empty($items[$col]['attributes'])) {
        $col_attributes = [
          'class' => [],
        ];

        // Add default views column classes.
        if (!empty($col_class)) {
          $col_attributes['class'] = array_merge($col_attributes['class'], $col_class);
        }

        // Add automatic width for columns.

        //fixme: don't need'

        //        if ($auto_width) {
        $col_attributes['style'] = 'width: ' . 100 / $options['columns'] . '%;';

        //        }

        //Calculate the width of the grids and pass it in the $items['options']

        // Add column attributes to the item.
        if ($horizontal) {
          $items[$row]['row'][$col]['content']['attributes'] = new Attribute($col_attributes);
        }
        else {
          $items[$col]['attributes'] = new Attribute($col_attributes);
        }
      }

      // Increase, decrease or reset appropriate integers.
      if ($horizontal) {
        if ($col == 0 && $col != $options['columns'] - 1) {
          $col++;
        }
        elseif ($col >= $options['columns'] - 1) {
          $col = 0;
          $row++;
        }
        else {
          $col++;
        }
      }
      else {
        $row++;
        if (!$remainders && $row == $num_rows) {
          $row = 0;
          $col++;
        }
        elseif ($remainders && $row == $num_rows + 1) {
          $row = 0;
          $col++;
          $remainders--;
        }
      }
    }

    // debug($items);
    $this->sortedGrids = $items;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Grid::$options protected property 'alignment' => horizontal or vertical (vertical not yet implemented, 'columns' => amount of columns, 'automatic_width' = true or false
Grid::$sortedGrids protected property
Grid::$variables protected property
Grid::CreateGrids protected function
Grid::get public function
Grid::__construct public function