![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/laminas/laminas-text/src/Table/ |
<?php namespace Laminas\Text\Table; use Laminas\Stdlib\StringUtils; use function explode; use function implode; use function in_array; use function is_int; use function is_string; use function str_repeat; use function strtolower; use const PHP_OS; use const STR_PAD_BOTH; use const STR_PAD_LEFT; use const STR_PAD_RIGHT; /** * Column class for Laminas\Text\Table\Row */ class Column { /** * Aligns for columns */ public const ALIGN_LEFT = 'left'; public const ALIGN_CENTER = 'center'; public const ALIGN_RIGHT = 'right'; /** * Content of the column * * @var string */ protected $content = ''; /** * Align of the column * * @var string */ protected $align = self::ALIGN_LEFT; /** * Colspan of the column * * @var int */ protected $colSpan = 1; /** * Allowed align parameters * * @var array */ protected $allowedAligns = [self::ALIGN_LEFT, self::ALIGN_CENTER, self::ALIGN_RIGHT]; /** * Create a column for a Laminas\Text\Table\Row object. * * @param string $content The content of the column * @param string $align The align of the content * @param int $colSpan The colspan of the column * @param string $charset The encoding of the content */ public function __construct($content = null, $align = null, $colSpan = null, $charset = null) { if ($content !== null) { $this->setContent($content, $charset); } if ($align !== null) { $this->setAlign($align); } if ($colSpan !== null) { $this->setColSpan($colSpan); } } /** * Set the content. * * If $charset is not defined, it is assumed that $content is encoded in * the charset defined via Laminas\Text\Table::setInputCharset() (defaults * to utf-8). * * @param string $content Content of the column * @param string $charset The charset of the content * @throws Exception\InvalidArgumentException When $content is not a string. * @return Column */ public function setContent($content, $charset = null) { if (is_string($content) === false) { throw new Exception\InvalidArgumentException('$content must be a string'); } if ($charset === null) { $inputCharset = Table::getInputCharset(); } else { $inputCharset = strtolower($charset); } $outputCharset = Table::getOutputCharset(); if ($inputCharset !== $outputCharset) { if (PHP_OS !== 'AIX') { // AIX does not understand these character sets $strWrapper = StringUtils::getWrapper($inputCharset, $outputCharset); $content = $strWrapper->convert($content); } } $this->content = $content; return $this; } /** * Set the align * * @param string $align Align of the column * @throws Exception\OutOfBoundsException When supplied align is invalid. * @return Column */ public function setAlign($align) { if (in_array($align, $this->allowedAligns) === false) { throw new Exception\OutOfBoundsException('Invalid align supplied'); } $this->align = $align; return $this; } /** * Set the colspan * * @param int $colSpan * @throws Exception\InvalidArgumentException When $colSpan is smaller than 1. * @return Column */ public function setColSpan($colSpan) { if (is_int($colSpan) === false || $colSpan < 1) { throw new Exception\InvalidArgumentException('$colSpan must be an integer and greater than 0'); } $this->colSpan = $colSpan; return $this; } /** * Get the colspan * * @return int */ public function getColSpan() { return $this->colSpan; } /** * Render the column width the given column width * * @param int $columnWidth The width of the column * @param int $padding The padding for the column * @throws Exception\InvalidArgumentException When $columnWidth is lower than 1. * @throws Exception\OutOfBoundsException When padding is greater than columnWidth. * @return string */ public function render($columnWidth, $padding = 0) { if (is_int($columnWidth) === false || $columnWidth < 1) { throw new Exception\InvalidArgumentException('$columnWidth must be an integer and greater than 0'); } $columnWidth -= $padding * 2; if ($columnWidth < 1) { throw new Exception\OutOfBoundsException('Padding (' . $padding . ') is greater than column width'); } switch ($this->align) { case self::ALIGN_LEFT: $padMode = STR_PAD_RIGHT; break; case self::ALIGN_CENTER: $padMode = STR_PAD_BOTH; break; case self::ALIGN_RIGHT: $padMode = STR_PAD_LEFT; break; default: // This can never happen, but the CS tells I have to have it ... break; } $outputCharset = Table::getOutputCharset(); $strWrapper = StringUtils::getWrapper($outputCharset); $lines = explode("\n", $strWrapper->wordWrap($this->content, $columnWidth, "\n", true)); $paddedLines = []; foreach ($lines as $line) { $paddedLines[] = str_repeat(' ', $padding) . $strWrapper->strPad($line, $columnWidth, ' ', $padMode) . str_repeat(' ', $padding); } return implode("\n", $paddedLines); } }