entityURLGenerator = $entityURLGenerator; $this->markdownParser = $markdownParser; $this->serializer = $serializer; $this->treeBuilder = $treeBuilder; $this->moneyFormatter = $moneyFormatter; $this->siformatter = $SIFormatter; $this->amountFormatter = $amountFormatter; $this->attachmentURLGenerator = $attachmentURLGenerator; } public function getFilters() { return [ new TwigFilter('entityURL', [$this, 'generateEntityURL']), new TwigFilter('markdown', [$this->markdownParser, 'parse'], ['pre_escape' => 'html', 'is_safe' => ['html']]), new TwigFilter('moneyFormat', [$this, 'formatCurrency']), new TwigFilter('siFormat', [$this, 'siFormat']), new TwigFilter('amountFormat', [$this, 'amountFormat']), new TwigFilter('loginPath', [$this, 'loginPath']) ]; } public function getTests() { return [ new TwigTest('instanceof', function ($var, $instance) { return $var instanceof $instance; } ) ]; } public function getFunctions() { return [ new TwigFunction('generateTreeData', [$this, 'treeData']), new TwigFunction('attachment_thumbnail', [$this->attachmentURLGenerator, 'getThumbnailURL']) ]; } public function treeData(DBElement $element, string $type = 'newEdit') : string { $tree = $this->treeBuilder->typeToTree(get_class($element), $type, $element); return $this->serializer->serialize($tree, 'json', ['skip_null_values' => true]); } /** * This function/filter generates an path * @param string $path * @return string */ public function loginPath(string $path) : string { $parts = explode("/" ,$path); //Remove the part with unset($parts[1]); return implode("/", $parts); } public function generateEntityURL(DBElement $entity, string $method = 'info'): string { return $this->entityURLGenerator->getURL($entity, $method); } public function formatCurrency($amount, Currency $currency = null, int $decimals = 5) { return $this->moneyFormatter->format($amount, $currency, $decimals); } public function siFormat($value, $unit, $decimals = 2, bool $show_all_digits = false) { return $this->siformatter->format($value, $unit, $decimals, $show_all_digits); } public function amountFormat($value, ?MeasurementUnit $unit, array $options = []) { return $this->amountFormatter->format($value, $unit, $options); } }