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.
<?php

namespace PhpOffice\PhpSpreadsheet\Writer;

< use PhpOffice\PhpSpreadsheet\Shared\File;
use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Exception as WriterException; use PhpOffice\PhpSpreadsheet\Writer\Ods\Content; use PhpOffice\PhpSpreadsheet\Writer\Ods\Meta; use PhpOffice\PhpSpreadsheet\Writer\Ods\MetaInf; use PhpOffice\PhpSpreadsheet\Writer\Ods\Mimetype; use PhpOffice\PhpSpreadsheet\Writer\Ods\Settings; use PhpOffice\PhpSpreadsheet\Writer\Ods\Styles; use PhpOffice\PhpSpreadsheet\Writer\Ods\Thumbnails; use ZipStream\Exception\OverflowException; use ZipStream\Option\Archive; use ZipStream\ZipStream; class Ods extends BaseWriter { /**
< * Private writer parts. < * < * @var Ods\WriterPart[] < */ < private $writerParts = []; < < /**
* Private PhpSpreadsheet. * * @var Spreadsheet */ private $spreadSheet; /**
> * @var Content * Create a new Ods. > */ */ > private $writerPartContent; public function __construct(Spreadsheet $spreadsheet) > { > /** $this->setSpreadsheet($spreadsheet); > * @var Meta > */ $writerPartsArray = [ > private $writerPartMeta; 'content' => Content::class, > 'meta' => Meta::class, > /** 'meta_inf' => MetaInf::class, > * @var MetaInf 'mimetype' => Mimetype::class, > */ 'settings' => Settings::class, > private $writerPartMetaInf; 'styles' => Styles::class, > 'thumbnails' => Thumbnails::class, > /** ]; > * @var Mimetype > */ foreach ($writerPartsArray as $writer => $class) { > private $writerPartMimetype; $this->writerParts[$writer] = new $class($this); > } > /** } > * @var Settings > */ /** > private $writerPartSettings; * Get writer part. > * > /** * @param string $pPartName Writer part name > * @var Styles * > */ * @return null|Ods\WriterPart > private $writerPartStyles; */ > public function getWriterPart($pPartName) > /** { > * @var Thumbnails if ($pPartName != '' && isset($this->writerParts[strtolower($pPartName)])) { > */ return $this->writerParts[strtolower($pPartName)]; > private $writerPartThumbnails; } > > /**
< $writerPartsArray = [ < 'content' => Content::class, < 'meta' => Meta::class, < 'meta_inf' => MetaInf::class, < 'mimetype' => Mimetype::class, < 'settings' => Settings::class, < 'styles' => Styles::class, < 'thumbnails' => Thumbnails::class, < ];
> $this->writerPartContent = new Content($this); > $this->writerPartMeta = new Meta($this); > $this->writerPartMetaInf = new MetaInf($this); > $this->writerPartMimetype = new Mimetype($this); > $this->writerPartSettings = new Settings($this); > $this->writerPartStyles = new Styles($this); > $this->writerPartThumbnails = new Thumbnails($this); > }
< foreach ($writerPartsArray as $writer => $class) { < $this->writerParts[$writer] = new $class($this);
> public function getWriterPartContent(): Content > { > return $this->writerPartContent;
throw new WriterException('PhpSpreadsheet object unassigned.');
> } > public function getWriterPartMeta(): Meta > { // garbage collect > return $this->writerPartMeta;
< /** < * Get writer part. < * < * @param string $pPartName Writer part name < * < * @return null|Ods\WriterPart < */ < public function getWriterPart($pPartName)
> public function getWriterPartMetaInf(): MetaInf
< if ($pPartName != '' && isset($this->writerParts[strtolower($pPartName)])) { < return $this->writerParts[strtolower($pPartName)];
> return $this->writerPartMetaInf;
< return null;
> public function getWriterPartMimetype(): Mimetype > { > return $this->writerPartMimetype; > } > > public function getWriterPartSettings(): Settings > { > return $this->writerPartSettings; > } > > public function getWriterPartStyles(): Styles > { > return $this->writerPartStyles; > } > > public function getWriterPartThumbnails(): Thumbnails > { > return $this->writerPartThumbnails;
< * @param resource|string $pFilename
> * @param resource|string $filename
< public function save($pFilename): void
> public function save($filename, int $flags = 0): void
< if (!$this->spreadSheet) { < throw new WriterException('PhpSpreadsheet object unassigned.'); < }
> $this->processFlags($flags);
< $this->openFileHandle($pFilename);
> $this->openFileHandle($filename);
< $zip->addFile('META-INF/manifest.xml', $this->getWriterPart('meta_inf')->writeManifest()); < $zip->addFile('Thumbnails/thumbnail.png', $this->getWriterPart('thumbnails')->writeThumbnail()); < $zip->addFile('content.xml', $this->getWriterPart('content')->write()); < $zip->addFile('meta.xml', $this->getWriterPart('meta')->write()); < $zip->addFile('mimetype', $this->getWriterPart('mimetype')->write()); < $zip->addFile('settings.xml', $this->getWriterPart('settings')->write()); < $zip->addFile('styles.xml', $this->getWriterPart('styles')->write());
> $zip->addFile('META-INF/manifest.xml', $this->getWriterPartMetaInf()->write()); > $zip->addFile('Thumbnails/thumbnail.png', $this->getWriterPartthumbnails()->write()); > // Settings always need to be written before Content; Styles after Content > $zip->addFile('settings.xml', $this->getWriterPartsettings()->write()); > $zip->addFile('content.xml', $this->getWriterPartcontent()->write()); > $zip->addFile('meta.xml', $this->getWriterPartmeta()->write()); > $zip->addFile('mimetype', $this->getWriterPartmimetype()->write()); > $zip->addFile('styles.xml', $this->getWriterPartstyles()->write());
/** * Create zip object. * * @return ZipStream */ private function createZip() { // Try opening the ZIP file if (!is_resource($this->fileHandle)) { throw new WriterException('Could not open resource for writing.'); } // Create new ZIP stream $options = new Archive(); $options->setEnableZip64(false); $options->setOutputStream($this->fileHandle); return new ZipStream(null, $options); } /** * Get Spreadsheet object. * * @return Spreadsheet */ public function getSpreadsheet() {
< if ($this->spreadSheet !== null) {
return $this->spreadSheet;
< } < < throw new WriterException('No PhpSpreadsheet assigned.');
} /** * Set Spreadsheet object. * * @param Spreadsheet $spreadsheet PhpSpreadsheet object * * @return $this */ public function setSpreadsheet(Spreadsheet $spreadsheet) { $this->spreadSheet = $spreadsheet; return $this; } }