Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.2.x will end 22 April 2024 (12 months).
  • Bug fixes for security issues in 4.2.x will end 7 October 2024 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.1.x is supported too.
   1  <?php
   2  
   3  declare(strict_types=1);
   4  
   5  namespace OpenSpout\Writer\Common;
   6  
   7  use OpenSpout\Common\Entity\Style\Style;
   8  use OpenSpout\Common\TempFolderOptionTrait;
   9  
  10  abstract class AbstractOptions
  11  {
  12      use TempFolderOptionTrait;
  13  
  14      public Style $DEFAULT_ROW_STYLE;
  15      public bool $SHOULD_CREATE_NEW_SHEETS_AUTOMATICALLY = true;
  16      public ?float $DEFAULT_COLUMN_WIDTH = null;
  17      public ?float $DEFAULT_ROW_HEIGHT = null;
  18  
  19      /** @var ColumnWidth[] Array of min-max-width arrays */
  20      private array $COLUMN_WIDTHS = [];
  21  
  22      public function __construct()
  23      {
  24          $this->DEFAULT_ROW_STYLE = new Style();
  25      }
  26  
  27      /**
  28       * @param positive-int ...$columns One or more columns with this width
  29       */
  30      final public function setColumnWidth(float $width, int ...$columns): void
  31      {
  32          // Gather sequences
  33          $sequence = [];
  34          foreach ($columns as $column) {
  35              $sequenceLength = \count($sequence);
  36              if ($sequenceLength > 0) {
  37                  $previousValue = $sequence[$sequenceLength - 1];
  38                  if ($column !== $previousValue + 1) {
  39                      $this->setColumnWidthForRange($width, $sequence[0], $previousValue);
  40                      $sequence = [];
  41                  }
  42              }
  43              $sequence[] = $column;
  44          }
  45          $this->setColumnWidthForRange($width, $sequence[0], $sequence[\count($sequence) - 1]);
  46      }
  47  
  48      /**
  49       * @param float        $width The width to set
  50       * @param positive-int $start First column index of the range
  51       * @param positive-int $end   Last column index of the range
  52       */
  53      final public function setColumnWidthForRange(float $width, int $start, int $end): void
  54      {
  55          $this->COLUMN_WIDTHS[] = new ColumnWidth($start, $end, $width);
  56      }
  57  
  58      /**
  59       * @internal
  60       *
  61       * @return ColumnWidth[]
  62       */
  63      final public function getColumnWidths(): array
  64      {
  65          return $this->COLUMN_WIDTHS;
  66      }
  67  }