Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is supported too.

Differences Between: [Versions 310 and 311] [Versions 311 and 400] [Versions 311 and 401] [Versions 311 and 402] [Versions 311 and 403] [Versions 39 and 311]

   1  <?php
   2  
   3  namespace PhpOffice\PhpSpreadsheet\Reader\Xlsx;
   4  
   5  use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
   6  use SimpleXMLElement;
   7  
   8  class SheetViewOptions extends BaseParserClass
   9  {
  10      private $worksheet;
  11  
  12      private $worksheetXml;
  13  
  14      public function __construct(Worksheet $workSheet, ?SimpleXMLElement $worksheetXml = null)
  15      {
  16          $this->worksheet = $workSheet;
  17          $this->worksheetXml = $worksheetXml;
  18      }
  19  
  20      /**
  21       * @param bool $readDataOnly
  22       */
  23      public function load($readDataOnly = false): void
  24      {
  25          if ($this->worksheetXml === null) {
  26              return;
  27          }
  28  
  29          if (isset($this->worksheetXml->sheetPr)) {
  30              $this->tabColor($this->worksheetXml->sheetPr);
  31              $this->codeName($this->worksheetXml->sheetPr);
  32              $this->outlines($this->worksheetXml->sheetPr);
  33              $this->pageSetup($this->worksheetXml->sheetPr);
  34          }
  35  
  36          if (isset($this->worksheetXml->sheetFormatPr)) {
  37              $this->sheetFormat($this->worksheetXml->sheetFormatPr);
  38          }
  39  
  40          if (!$readDataOnly && isset($this->worksheetXml->printOptions)) {
  41              $this->printOptions($this->worksheetXml->printOptions);
  42          }
  43      }
  44  
  45      private function tabColor(SimpleXMLElement $sheetPr): void
  46      {
  47          if (isset($sheetPr->tabColor, $sheetPr->tabColor['rgb'])) {
  48              $this->worksheet->getTabColor()->setARGB((string) $sheetPr->tabColor['rgb']);
  49          }
  50      }
  51  
  52      private function codeName(SimpleXMLElement $sheetPr): void
  53      {
  54          if (isset($sheetPr['codeName'])) {
  55              $this->worksheet->setCodeName((string) $sheetPr['codeName'], false);
  56          }
  57      }
  58  
  59      private function outlines(SimpleXMLElement $sheetPr): void
  60      {
  61          if (isset($sheetPr->outlinePr)) {
  62              if (
  63                  isset($sheetPr->outlinePr['summaryRight']) &&
  64                  !self::boolean((string) $sheetPr->outlinePr['summaryRight'])
  65              ) {
  66                  $this->worksheet->setShowSummaryRight(false);
  67              } else {
  68                  $this->worksheet->setShowSummaryRight(true);
  69              }
  70  
  71              if (
  72                  isset($sheetPr->outlinePr['summaryBelow']) &&
  73                  !self::boolean((string) $sheetPr->outlinePr['summaryBelow'])
  74              ) {
  75                  $this->worksheet->setShowSummaryBelow(false);
  76              } else {
  77                  $this->worksheet->setShowSummaryBelow(true);
  78              }
  79          }
  80      }
  81  
  82      private function pageSetup(SimpleXMLElement $sheetPr): void
  83      {
  84          if (isset($sheetPr->pageSetUpPr)) {
  85              if (
  86                  isset($sheetPr->pageSetUpPr['fitToPage']) &&
  87                  !self::boolean((string) $sheetPr->pageSetUpPr['fitToPage'])
  88              ) {
  89                  $this->worksheet->getPageSetup()->setFitToPage(false);
  90              } else {
  91                  $this->worksheet->getPageSetup()->setFitToPage(true);
  92              }
  93          }
  94      }
  95  
  96      private function sheetFormat(SimpleXMLElement $sheetFormatPr): void
  97      {
  98          if (
  99              isset($sheetFormatPr['customHeight']) &&
 100              self::boolean((string) $sheetFormatPr['customHeight']) &&
 101              isset($sheetFormatPr['defaultRowHeight'])
 102          ) {
 103              $this->worksheet->getDefaultRowDimension()
 104                  ->setRowHeight((float) $sheetFormatPr['defaultRowHeight']);
 105          }
 106  
 107          if (isset($sheetFormatPr['defaultColWidth'])) {
 108              $this->worksheet->getDefaultColumnDimension()
 109                  ->setWidth((float) $sheetFormatPr['defaultColWidth']);
 110          }
 111  
 112          if (
 113              isset($sheetFormatPr['zeroHeight']) &&
 114              ((string) $sheetFormatPr['zeroHeight'] === '1')
 115          ) {
 116              $this->worksheet->getDefaultRowDimension()->setZeroHeight(true);
 117          }
 118      }
 119  
 120      private function printOptions(SimpleXMLElement $printOptions): void
 121      {
 122          if (self::boolean((string) $printOptions['gridLinesSet'])) {
 123              $this->worksheet->setShowGridlines(true);
 124          }
 125          if (self::boolean((string) $printOptions['gridLines'])) {
 126              $this->worksheet->setPrintGridlines(true);
 127          }
 128          if (self::boolean((string) $printOptions['horizontalCentered'])) {
 129              $this->worksheet->getPageSetup()->setHorizontalCentered(true);
 130          }
 131          if (self::boolean((string) $printOptions['verticalCentered'])) {
 132              $this->worksheet->getPageSetup()->setVerticalCentered(true);
 133          }
 134      }
 135  }