Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.
<?php

namespace Box\Spout\Writer\Common\Manager\Style;

use Box\Spout\Common\Entity\Cell;
use Box\Spout\Common\Entity\Style\Style;

/**
 * Class StyleManager
 * Manages styles to be applied to a cell
 */
class StyleManager implements StyleManagerInterface
{
    /** @var StyleRegistry Registry for all used styles */
    protected $styleRegistry;

    /**
     * @param StyleRegistry $styleRegistry
     */
    public function __construct(StyleRegistry $styleRegistry)
    {
        $this->styleRegistry = $styleRegistry;
    }

    /**
     * Returns the default style
     *
     * @return Style Default style
     */
    protected function getDefaultStyle()
    {
        // By construction, the default style has ID 0
        return $this->styleRegistry->getRegisteredStyles()[0];
    }

    /**
     * Registers the given style as a used style.
     * Duplicate styles won't be registered more than once.
     *
     * @param Style $style The style to be registered
     * @return Style The registered style, updated with an internal ID.
     */
    public function registerStyle($style)
    {
        return $this->styleRegistry->registerStyle($style);
    }

    /**
     * Apply additional styles if the given row needs it.
     * Typically, set "wrap text" if a cell contains a new line.
     *
     * @param Cell $cell
< * @return Style
> * @return PossiblyUpdatedStyle The eventually updated style
*/
< public function applyExtraStylesIfNeeded(Cell $cell)
> public function applyExtraStylesIfNeeded(Cell $cell) : PossiblyUpdatedStyle
{
< $updatedStyle = $this->applyWrapTextIfCellContainsNewLine($cell); < < return $updatedStyle;
> return $this->applyWrapTextIfCellContainsNewLine($cell);
} /** * Set the "wrap text" option if a cell of the given row contains a new line. * * @NOTE: There is a bug on the Mac version of Excel (2011 and below) where new lines * are ignored even when the "wrap text" option is set. This only occurs with * inline strings (shared strings do work fine). * A workaround would be to encode "\n" as "_x000D_" but it does not work * on the Windows version of Excel... * * @param Cell $cell The cell the style should be applied to
< * @return \Box\Spout\Common\Entity\Style\Style The eventually updated style
> * @return PossiblyUpdatedStyle The eventually updated style
*/
< protected function applyWrapTextIfCellContainsNewLine(Cell $cell)
> protected function applyWrapTextIfCellContainsNewLine(Cell $cell) : PossiblyUpdatedStyle
{ $cellStyle = $cell->getStyle(); // if the "wrap text" option is already set, no-op
< if ($cellStyle->hasSetWrapText()) { < return $cellStyle; < } < < if ($cell->isString() && strpos($cell->getValue(), "\n") !== false) {
> if (!$cellStyle->hasSetWrapText() && $cell->isString() && \strpos($cell->getValue(), "\n") !== false) {
$cellStyle->setShouldWrapText();
> } > return new PossiblyUpdatedStyle($cellStyle, true);
< return $cellStyle;
> return new PossiblyUpdatedStyle($cellStyle, false);
} }