Integrated changes #135
This commit is contained in:
parent
b2c5797c72
commit
47cafb0216
21
README.md
21
README.md
@ -156,22 +156,19 @@ Adding borders to a row requires a ```Border``` object.
|
|||||||
use Box\Spout\Common\Type;
|
use Box\Spout\Common\Type;
|
||||||
use Box\Spout\Writer\WriterFactory;
|
use Box\Spout\Writer\WriterFactory;
|
||||||
use Box\Spout\Writer\Style\StyleBuilder;
|
use Box\Spout\Writer\Style\StyleBuilder;
|
||||||
use Box\Spout\Writer\Style\Border;
|
use Box\Spout\Writer\Style\BorderBuilder;
|
||||||
use Box\Spout\Writer\Style\BorderPart;
|
|
||||||
|
|
||||||
$border = new Border();
|
$border = (new BorderBuilder())
|
||||||
$border
|
->setBorderBottom(Border::STYLE_DASHED, Color::GREEN, Border::WIDTH_THIN)
|
||||||
->addPart(new BorderPart(Border::BOTTOM, Border::STYLE_SOLID, Border::WIDTH_THICK, Color::ORANGE))
|
->build();
|
||||||
->addPart(new BorderPart(Border::RIGHT, Border::STYLE_DASHED, BOrder::WIDTH_THIN, Color::GREEN));
|
|
||||||
|
|
||||||
$style = (new StyleBuilder())
|
$style = (new StyleBuilder())
|
||||||
->setBorder($border)
|
->setBorder($border)
|
||||||
->build();
|
->build();
|
||||||
|
|
||||||
$writerXlsx = WriterFactory::create(Type::XLSX);
|
$writer->addRowWithStyle(['Border Bottom Dashed Green Thin'], $style);
|
||||||
$writerXlsx->openToFile('borders.xlsx');
|
|
||||||
$writerXlsx->addRowsWithStyle($multipleRows, $style);
|
$writer->close();
|
||||||
$writerXlsx->close();
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Box\Spout\Writer\Exception;
|
namespace Box\Spout\Writer\Exception\Border;
|
||||||
|
|
||||||
|
use Box\Spout\Writer\Exception\WriterException;
|
||||||
use Box\Spout\Writer\Style\BorderPart;
|
use Box\Spout\Writer\Style\BorderPart;
|
||||||
|
|
||||||
class InvalidBorderNameException extends WriterException
|
class InvalidNameException extends WriterException
|
||||||
{
|
{
|
||||||
|
|
||||||
public function __construct($name)
|
public function __construct($name)
|
@ -1,10 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Box\Spout\Writer\Exception;
|
namespace Box\Spout\Writer\Exception\Border;
|
||||||
|
|
||||||
|
use Box\Spout\Writer\Exception\WriterException;
|
||||||
use Box\Spout\Writer\Style\BorderPart;
|
use Box\Spout\Writer\Style\BorderPart;
|
||||||
|
|
||||||
class InvalidBorderStyleException extends WriterException
|
class InvalidStyleException extends WriterException
|
||||||
{
|
{
|
||||||
public function __construct($name)
|
public function __construct($name)
|
||||||
{
|
{
|
@ -1,17 +1,18 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Box\Spout\Writer\Exception;
|
namespace Box\Spout\Writer\Exception\Border;
|
||||||
|
|
||||||
|
use Box\Spout\Writer\Exception\WriterException;
|
||||||
use Box\Spout\Writer\Style\BorderPart;
|
use Box\Spout\Writer\Style\BorderPart;
|
||||||
|
|
||||||
class InvalidBorderWidthException extends WriterException
|
class InvalidWidthException extends WriterException
|
||||||
{
|
{
|
||||||
|
|
||||||
public function __construct($name)
|
public function __construct($name)
|
||||||
{
|
{
|
||||||
$msg = '%s is not a valid width identifier for a border. Valid identifiers are: %s.';
|
$msg = '%s is not a valid width identifier for a border. Valid identifiers are: %s.';
|
||||||
|
|
||||||
parent::__construct(sprintf($msg, $name, implode(',', BorderPart::getAllowedWidth())));
|
parent::__construct(sprintf($msg, $name, implode(',', BorderPart::getAllowedWidths())));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -21,28 +21,27 @@ use Box\Spout\Writer\Style\Border;
|
|||||||
*/
|
*/
|
||||||
class BorderHelper
|
class BorderHelper
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ODS border attributes
|
* Width mappings
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
public static $odsStyleMap = [
|
public static $widthMap = [
|
||||||
Border::STYLE_SOLID.'%'.Border::WIDTH_THIN => '0.75pt solid',
|
Border::WIDTH_THIN => '0.75pt',
|
||||||
Border::STYLE_SOLID.'%'.Border::WIDTH_MEDIUM => '1.75pt solid',
|
Border::WIDTH_MEDIUM => '1.75pt',
|
||||||
Border::STYLE_SOLID.'%'.Border::WIDTH_THICK => '2.5pt solid',
|
Border::WIDTH_THICK => '2.5pt',
|
||||||
Border::STYLE_DOTTED.'%'.Border::WIDTH_THIN => '0.75pt dotted',
|
];
|
||||||
Border::STYLE_DOTTED.'%'.Border::WIDTH_MEDIUM => '1.75pt dotted',
|
|
||||||
Border::STYLE_DOTTED.'%'.Border::WIDTH_THICK => '2.5pt dotted',
|
/**
|
||||||
Border::STYLE_DASHED.'%'.Border::WIDTH_THIN => '0.75pt dashed',
|
* Style mapping
|
||||||
Border::STYLE_DASHED.'%'.Border::WIDTH_MEDIUM => '1.75pt dashed',
|
*
|
||||||
Border::STYLE_DASHED.'%'.Border::WIDTH_THICK => '2.5pt dashed',
|
* @var array
|
||||||
Border::STYLE_DOUBLE.'%'.Border::WIDTH_THIN => '0.75pt double',
|
*/
|
||||||
Border::STYLE_DOUBLE.'%'.Border::WIDTH_MEDIUM => '1.75pt double',
|
public static $styleMap = [
|
||||||
Border::STYLE_DOUBLE.'%'.Border::WIDTH_THICK => '2.5pt double',
|
Border::STYLE_SOLID => 'solid',
|
||||||
Border::STYLE_NONE.'%'.Border::WIDTH_THIN => 'none',
|
Border::STYLE_DASHED => 'dashed',
|
||||||
Border::STYLE_NONE.'%'.Border::WIDTH_MEDIUM => 'none',
|
Border::STYLE_DOTTED => 'dotted',
|
||||||
Border::STYLE_NONE.'%'.Border::WIDTH_THICK => 'none',
|
Border::STYLE_DOUBLE => 'double',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -51,15 +50,19 @@ class BorderHelper
|
|||||||
*/
|
*/
|
||||||
public static function serializeBorderPart(BorderPart $borderPart)
|
public static function serializeBorderPart(BorderPart $borderPart)
|
||||||
{
|
{
|
||||||
$styleDef = $borderPart->getStyle() .'%' . $borderPart->getWidth();
|
$definition = 'fo:border-%s="%s"';
|
||||||
$borderStyle = self::$odsStyleMap[$styleDef];
|
|
||||||
$colorEl = ($borderPart->getColor() && $borderPart->getStyle() !== Border::STYLE_NONE)
|
if ($borderPart->getStyle() === Border::STYLE_NONE) {
|
||||||
? '#' . $borderPart->getColor() : '';
|
$borderPartDefinition = sprintf($definition, $borderPart->getName(), 'none');
|
||||||
$partEl = sprintf(
|
} else {
|
||||||
'fo:border-%s="%s"',
|
$attributes = [
|
||||||
$borderPart->getName(),
|
self::$widthMap[$borderPart->getWidth()],
|
||||||
$borderStyle . ' ' .$colorEl
|
self::$styleMap[$borderPart->getStyle()],
|
||||||
);
|
'#' . $borderPart->getColor(),
|
||||||
return $partEl;
|
];
|
||||||
|
$borderPartDefinition = sprintf($definition, $borderPart->getName(), implode(' ', $attributes));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $borderPartDefinition;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -258,16 +258,15 @@ EOD;
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($style->shouldApplyBorder()) {
|
if ($style->shouldApplyBorder()) {
|
||||||
$el = '<style:table-cell-properties %s />';
|
$borderProperty = '<style:table-cell-properties %s />';
|
||||||
$borders = array_map(function (BorderPart $borderPart) {
|
$borders = array_map(function (BorderPart $borderPart) {
|
||||||
return BorderHelper::serializeBorderPart($borderPart);
|
return BorderHelper::serializeBorderPart($borderPart);
|
||||||
}, $style->getBorder()->getParts());
|
}, $style->getBorder()->getParts());
|
||||||
$content .= sprintf($el, implode(' ', $borders));
|
$content .= sprintf($borderProperty, implode(' ', $borders));
|
||||||
}
|
}
|
||||||
|
|
||||||
$content .= '</style:style>';
|
$content .= '</style:style>';
|
||||||
|
|
||||||
|
|
||||||
return $content;
|
return $content;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
namespace Box\Spout\Writer\Style;
|
namespace Box\Spout\Writer\Style;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Border
|
||||||
|
*/
|
||||||
class Border
|
class Border
|
||||||
{
|
{
|
||||||
const LEFT = 'left';
|
const LEFT = 'left';
|
||||||
|
75
src/Spout/Writer/Style/BorderBuilder.php
Normal file
75
src/Spout/Writer/Style/BorderBuilder.php
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Box\Spout\Writer\Style;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class BorderBuilder
|
||||||
|
*/
|
||||||
|
class BorderBuilder
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var Border
|
||||||
|
*/
|
||||||
|
protected $border;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->border = new Border();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $style Border style @see BorderPart::allowedStyles
|
||||||
|
* @param string $color Border A RGB color code
|
||||||
|
* @param string $width Border width @see BorderPart::allowedWidths
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public function setBorderTop($style = Border::STYLE_SOLID, $color = Color::BLACK, $width = Border::WIDTH_THICK)
|
||||||
|
{
|
||||||
|
$this->border->addPart(new BorderPart(Border::TOP, $style, $color, $width));
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $style Border style @see BorderPart::allowedStyles
|
||||||
|
* @param string $color Border A RGB color code
|
||||||
|
* @param string $width Border width @see BorderPart::allowedWidths
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public function setBorderRight($style = Border::STYLE_SOLID, $color = Color::BLACK, $width = Border::WIDTH_THICK)
|
||||||
|
{
|
||||||
|
$this->border->addPart(new BorderPart(Border::RIGHT, $style, $color, $width));
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $style Border style @see BorderPart::allowedStyles
|
||||||
|
* @param string $color Border A RGB color code
|
||||||
|
* @param string $width Border width @see BorderPart::allowedWidths
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public function setBorderBottom($style = Border::STYLE_SOLID, $color = Color::BLACK, $width = Border::WIDTH_THICK)
|
||||||
|
{
|
||||||
|
$this->border->addPart(new BorderPart(Border::BOTTOM, $style, $color, $width));
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $style Border style @see BorderPart::allowedStyles
|
||||||
|
* @param string $color Border A RGB color code
|
||||||
|
* @param string $width Border width @see BorderPart::allowedWidths
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public function setBorderLeft($style = Border::STYLE_SOLID, $color = Color::BLACK, $width = Border::WIDTH_THICK)
|
||||||
|
{
|
||||||
|
$this->border->addPart(new BorderPart(Border::LEFT, $style, $color, $width));
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Border
|
||||||
|
*/
|
||||||
|
public function build()
|
||||||
|
{
|
||||||
|
return $this->border;
|
||||||
|
}
|
||||||
|
}
|
@ -2,10 +2,13 @@
|
|||||||
|
|
||||||
namespace Box\Spout\Writer\Style;
|
namespace Box\Spout\Writer\Style;
|
||||||
|
|
||||||
use Box\Spout\Writer\Exception\InvalidBorderNameException;
|
use Box\Spout\Writer\Exception\Border\InvalidNameException;
|
||||||
use Box\Spout\Writer\Exception\InvalidBorderStyleException;
|
use Box\Spout\Writer\Exception\Border\InvalidStyleException;
|
||||||
use Box\Spout\Writer\Exception\InvalidBorderWidthException;
|
use Box\Spout\Writer\Exception\Border\InvalidWidthException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class BorderPart
|
||||||
|
*/
|
||||||
class BorderPart
|
class BorderPart
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -52,7 +55,7 @@ class BorderPart
|
|||||||
/**
|
/**
|
||||||
* @var array Allowed width constants for border parts.
|
* @var array Allowed width constants for border parts.
|
||||||
*/
|
*/
|
||||||
protected static $allowedWidth = [
|
protected static $allowedWidths = [
|
||||||
'thin',
|
'thin',
|
||||||
'medium',
|
'medium',
|
||||||
'thick',
|
'thick',
|
||||||
@ -61,13 +64,13 @@ class BorderPart
|
|||||||
/**
|
/**
|
||||||
* @param string $name @see BorderPart::allowedNames
|
* @param string $name @see BorderPart::allowedNames
|
||||||
* @param string $style @see BorderPart::allowedStyles
|
* @param string $style @see BorderPart::allowedStyles
|
||||||
* @param string $width @see BorderPart::allowedWidth
|
* @param string $width @see BorderPart::allowedWidths
|
||||||
* @param string $color A RGB color code
|
* @param string $color A RGB color code
|
||||||
* @throws InvalidBorderNameException
|
* @throws InvalidNameException
|
||||||
* @throws InvalidBorderStyleException
|
* @throws InvalidStyleException
|
||||||
* @throws InvalidBorderWidthException
|
* @throws InvalidWidthException
|
||||||
*/
|
*/
|
||||||
public function __construct($name, $style = Border::STYLE_SOLID, $width = Border::WIDTH_MEDIUM, $color = Color::BLACK)
|
public function __construct($name, $style = Border::STYLE_SOLID, $color = Color::BLACK, $width = Border::WIDTH_MEDIUM)
|
||||||
{
|
{
|
||||||
$this->setName($name);
|
$this->setName($name);
|
||||||
$this->setStyle($style);
|
$this->setStyle($style);
|
||||||
@ -89,7 +92,7 @@ class BorderPart
|
|||||||
public function setName($name)
|
public function setName($name)
|
||||||
{
|
{
|
||||||
if (!in_array($name, self::$allowedNames)) {
|
if (!in_array($name, self::$allowedNames)) {
|
||||||
throw new InvalidBorderNameException($name);
|
throw new InvalidNameException($name);
|
||||||
}
|
}
|
||||||
$this->name = $name;
|
$this->name = $name;
|
||||||
}
|
}
|
||||||
@ -108,7 +111,7 @@ class BorderPart
|
|||||||
public function setStyle($style)
|
public function setStyle($style)
|
||||||
{
|
{
|
||||||
if (!in_array($style, self::$allowedStyles)) {
|
if (!in_array($style, self::$allowedStyles)) {
|
||||||
throw new InvalidBorderStyleException($style);
|
throw new InvalidStyleException($style);
|
||||||
}
|
}
|
||||||
$this->style = $style;
|
$this->style = $style;
|
||||||
}
|
}
|
||||||
@ -142,8 +145,8 @@ class BorderPart
|
|||||||
*/
|
*/
|
||||||
public function setWidth($width)
|
public function setWidth($width)
|
||||||
{
|
{
|
||||||
if(!in_array($width, self::$allowedWidth)) {
|
if (!in_array($width, self::$allowedWidths)) {
|
||||||
throw new InvalidBorderWidthException($width);
|
throw new InvalidWidthException($width);
|
||||||
}
|
}
|
||||||
$this->width = $width;
|
$this->width = $width;
|
||||||
}
|
}
|
||||||
@ -167,8 +170,8 @@ class BorderPart
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function getAllowedWidth()
|
public static function getAllowedWidths()
|
||||||
{
|
{
|
||||||
return self::$allowedWidth;
|
return self::$allowedWidths;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,27 +2,37 @@
|
|||||||
|
|
||||||
namespace Box\Spout\Writer\XLSX\Helper;
|
namespace Box\Spout\Writer\XLSX\Helper;
|
||||||
|
|
||||||
use Box\Spout\Writer\Style\BorderPart;
|
|
||||||
use Box\Spout\Writer\Style\Border;
|
use Box\Spout\Writer\Style\Border;
|
||||||
|
use Box\Spout\Writer\Style\BorderPart;
|
||||||
|
|
||||||
class BorderHelper
|
class BorderHelper
|
||||||
{
|
{
|
||||||
public static $xlsxStyleMap = [
|
public static $xlsxStyleMap = [
|
||||||
Border::STYLE_SOLID.'%'.Border::WIDTH_THIN => 'thin',
|
Border::STYLE_SOLID => [
|
||||||
Border::STYLE_SOLID.'%'.Border::WIDTH_MEDIUM => 'medium',
|
Border::WIDTH_THIN => 'thin',
|
||||||
Border::STYLE_SOLID.'%'.Border::WIDTH_THICK => 'thick',
|
Border::WIDTH_MEDIUM => 'medium',
|
||||||
Border::STYLE_DOTTED.'%'.Border::WIDTH_THIN => 'dotted',
|
Border::WIDTH_THICK => 'thick'
|
||||||
Border::STYLE_DOTTED.'%'.Border::WIDTH_MEDIUM => 'dotted',
|
],
|
||||||
Border::STYLE_DOTTED.'%'.Border::WIDTH_THICK => 'dotted',
|
Border::STYLE_DOTTED => [
|
||||||
Border::STYLE_DASHED.'%'.Border::WIDTH_THIN => 'dashed',
|
Border::WIDTH_THIN => 'dotted',
|
||||||
Border::STYLE_DASHED.'%'.Border::WIDTH_MEDIUM => 'mediumDashed',
|
Border::WIDTH_MEDIUM => 'dotted',
|
||||||
Border::STYLE_DASHED.'%'.Border::WIDTH_THICK => 'mediumDashed',
|
Border::WIDTH_THICK => 'dotted',
|
||||||
Border::STYLE_DOUBLE.'%'.Border::WIDTH_THIN => 'double',
|
],
|
||||||
Border::STYLE_DOUBLE.'%'.Border::WIDTH_MEDIUM => 'double',
|
Border::STYLE_DASHED => [
|
||||||
Border::STYLE_DOUBLE.'%'.Border::WIDTH_THICK => 'double',
|
Border::WIDTH_THIN => 'dashed',
|
||||||
Border::STYLE_NONE.'%'.Border::WIDTH_THIN => 'none',
|
Border::WIDTH_MEDIUM => 'mediumDashed',
|
||||||
Border::STYLE_NONE.'%'.Border::WIDTH_MEDIUM => 'none',
|
Border::WIDTH_THICK => 'mediumDashed',
|
||||||
Border::STYLE_NONE.'%'.Border::WIDTH_THICK => 'none',
|
],
|
||||||
|
Border::STYLE_DOUBLE => [
|
||||||
|
Border::WIDTH_THIN => 'double',
|
||||||
|
Border::WIDTH_MEDIUM => 'double',
|
||||||
|
Border::WIDTH_THICK => 'double',
|
||||||
|
],
|
||||||
|
Border::STYLE_NONE => [
|
||||||
|
Border::WIDTH_THIN => 'none',
|
||||||
|
Border::WIDTH_MEDIUM => 'none',
|
||||||
|
Border::WIDTH_THICK => 'none',
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -31,13 +41,17 @@ class BorderHelper
|
|||||||
*/
|
*/
|
||||||
public static function serializeBorderPart(BorderPart $borderPart)
|
public static function serializeBorderPart(BorderPart $borderPart)
|
||||||
{
|
{
|
||||||
$styleDef = $borderPart->getStyle() .'%' . $borderPart->getWidth();
|
$borderStyle = self::$xlsxStyleMap[$borderPart->getStyle()][$borderPart->getWidth()];
|
||||||
$borderStyle = self::$xlsxStyleMap[$styleDef];
|
|
||||||
|
|
||||||
$colorEl = $borderPart->getColor() ? sprintf('<color rgb="%s"/>', $borderPart->getColor()) : '';
|
$colorEl = $borderPart->getColor() ? sprintf('<color rgb="%s"/>', $borderPart->getColor()) : '';
|
||||||
$partEl = sprintf(
|
$partEl = sprintf(
|
||||||
'<%s style="%s">%s</%s>', $borderPart->getName(), $borderStyle, $colorEl, $borderPart->getName()
|
'<%s style="%s">%s</%s>',
|
||||||
|
$borderPart->getName(),
|
||||||
|
$borderStyle,
|
||||||
|
$colorEl,
|
||||||
|
$borderPart->getName()
|
||||||
);
|
);
|
||||||
return $partEl.PHP_EOL;
|
|
||||||
|
return $partEl . PHP_EOL;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -101,6 +101,7 @@ EOD;
|
|||||||
protected function getBordersSectionContent()
|
protected function getBordersSectionContent()
|
||||||
{
|
{
|
||||||
$content = '<borders count="' . count($this->styleIdToStyleMappingTable) . '">';
|
$content = '<borders count="' . count($this->styleIdToStyleMappingTable) . '">';
|
||||||
|
|
||||||
/** @var \Box\Spout\Writer\Style\Style $style */
|
/** @var \Box\Spout\Writer\Style\Style $style */
|
||||||
foreach ($this->getRegisteredStyles() as $style) {
|
foreach ($this->getRegisteredStyles() as $style) {
|
||||||
$border = $style->getBorder();
|
$border = $style->getBorder();
|
||||||
@ -115,7 +116,9 @@ EOD;
|
|||||||
$content .= '<border><left/><right/><top/><bottom/><diagonal/></border>';
|
$content .= '<border><left/><right/><top/><bottom/><diagonal/></border>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$content .= '</borders>';
|
$content .= '</borders>';
|
||||||
|
|
||||||
return $content;
|
return $content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user