mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-09-05 22:35:01 +00:00
Add line splitting in user render string functionality
Introduce a new option to split lines in user job and scope render strings based on a specified character limit. Implement a corresponding test to verify the correct behavior of this feature.
This commit is contained in:
@@ -13,8 +13,6 @@ namespace Chill\MainBundle\Templating\Entity;
|
||||
|
||||
use Chill\MainBundle\Entity\User;
|
||||
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
|
||||
use DateTime;
|
||||
use DateTimeImmutable;
|
||||
use Symfony\Component\Clock\ClockInterface;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
use Twig\Error\LoaderError;
|
||||
@@ -26,11 +24,17 @@ use Twig\Error\SyntaxError;
|
||||
*/
|
||||
class UserRender implements ChillEntityRenderInterface
|
||||
{
|
||||
public const SPLIT_LINE_BEFORE_CHARACTER = 'split_lines_before_characters';
|
||||
final public const DEFAULT_OPTIONS = [
|
||||
'main_scope' => true,
|
||||
'user_job' => true,
|
||||
'absence' => true,
|
||||
'at_date' => null, // instanceof DateTimeInterface
|
||||
/*
|
||||
* when set, the jobs and service will be splitted in multiple lines. The line will be splitted
|
||||
* before the given character. Only for renderString, renderBox is not concerned.
|
||||
*/
|
||||
self::SPLIT_LINE_BEFORE_CHARACTER => null,
|
||||
];
|
||||
|
||||
public function __construct(
|
||||
@@ -65,8 +69,6 @@ class UserRender implements ChillEntityRenderInterface
|
||||
{
|
||||
$opts = \array_merge(self::DEFAULT_OPTIONS, $options);
|
||||
|
||||
// $immutableAtDate = $opts['at_date'] instanceOf DateTime ? DateTimeImmutable::createFromMutable($opts['at_date']) : $opts['at_date'];
|
||||
|
||||
if (null === $opts['at_date']) {
|
||||
$opts['at_date'] = $this->clock->now();
|
||||
} elseif ($opts['at_date'] instanceof \DateTime) {
|
||||
@@ -89,6 +91,28 @@ class UserRender implements ChillEntityRenderInterface
|
||||
$str .= ' ('.$this->translator->trans('absence.Absent').')';
|
||||
}
|
||||
|
||||
if (null !== $opts[self::SPLIT_LINE_BEFORE_CHARACTER]) {
|
||||
if (!is_int($opts[self::SPLIT_LINE_BEFORE_CHARACTER])) {
|
||||
throw new \InvalidArgumentException('Only integer for option split_lines_before_characters is allowed');
|
||||
}
|
||||
|
||||
$characterPerLine = $opts[self::SPLIT_LINE_BEFORE_CHARACTER];
|
||||
$exploded = explode(' ', $str);
|
||||
$charOnLine = 0;
|
||||
$str = '';
|
||||
foreach ($exploded as $word) {
|
||||
if ($charOnLine + strlen($word) > $characterPerLine) {
|
||||
$str .= "\n";
|
||||
$charOnLine = 0;
|
||||
}
|
||||
if ($charOnLine > 0) {
|
||||
$str .= ' ';
|
||||
}
|
||||
$str .= $word;
|
||||
$charOnLine += strlen($word);
|
||||
}
|
||||
}
|
||||
|
||||
return $str;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user