Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.0.x will end 8 May 2023 (12 months).
  • Bug fixes for security issues in 4.0.x will end 13 November 2023 (18 months).
  • PHP version: minimum PHP 7.3.0 Note: the minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is also supported.

Differences Between: [Versions 400 and 402] [Versions 400 and 403]

   1  <?php
   2  
   3  namespace PhpOffice\PhpSpreadsheet\Writer\Ods;
   4  
   5  use PhpOffice\PhpSpreadsheet\Shared\XMLWriter;
   6  use PhpOffice\PhpSpreadsheet\Spreadsheet;
   7  use PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter;
   8  use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
   9  
  10  class AutoFilters
  11  {
  12      /**
  13       * @var XMLWriter
  14       */
  15      private $objWriter;
  16  
  17      /**
  18       * @var Spreadsheet
  19       */
  20      private $spreadsheet;
  21  
  22      public function __construct(XMLWriter $objWriter, Spreadsheet $spreadsheet)
  23      {
  24          $this->objWriter = $objWriter;
  25          $this->spreadsheet = $spreadsheet;
  26      }
  27  
  28      public function write(): void
  29      {
  30          $wrapperWritten = false;
  31          $sheetCount = $this->spreadsheet->getSheetCount();
  32          for ($i = 0; $i < $sheetCount; ++$i) {
  33              $worksheet = $this->spreadsheet->getSheet($i);
  34              $autofilter = $worksheet->getAutoFilter();
  35              if ($autofilter !== null && !empty($autofilter->getRange())) {
  36                  if ($wrapperWritten === false) {
  37                      $this->objWriter->startElement('table:database-ranges');
  38                      $wrapperWritten = true;
  39                  }
  40                  $this->objWriter->startElement('table:database-range');
  41                  $this->objWriter->writeAttribute('table:orientation', 'column');
  42                  $this->objWriter->writeAttribute('table:display-filter-buttons', 'true');
  43                  $this->objWriter->writeAttribute(
  44                      'table:target-range-address',
  45                      $this->formatRange($worksheet, $autofilter)
  46                  );
  47                  $this->objWriter->endElement();
  48              }
  49          }
  50  
  51          if ($wrapperWritten === true) {
  52              $this->objWriter->endElement();
  53          }
  54      }
  55  
  56      protected function formatRange(Worksheet $worksheet, Autofilter $autofilter): string
  57      {
  58          $title = $worksheet->getTitle();
  59          $range = $autofilter->getRange();
  60  
  61          return "'{$title}'.{$range}";
  62      }
  63  }