, * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ namespace Chill\CustomFieldsBundle\Templating\Twig; use Chill\CustomFieldsBundle\Service\CustomFieldsHelper; use Symfony\Component\DependencyInjection\ContainerAwareInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Container; use Chill\CustomFieldsBundle\Entity\CustomField; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; /** * Add the following Twig Extension : * * chill_custom_field_widget : to render the value of the custom field, * * chill_custom_field_label : to render the label of the custom field, * * @author Julien Fastré */ class CustomFieldRenderingTwig extends AbstractExtension implements ContainerAwareInterface { /** @var Container $container The container */ private $container; /** @var array $defaultParams The default parameters */ private $defaultParams = array( 'label_layout' => 'ChillCustomFieldsBundle:CustomField:render_label.html.twig' ); /** * @var CustomFieldsHelper */ private $customFieldsHelper; public function __construct(CustomFieldsHelper $customFieldsHelper) { $this->customFieldsHelper = $customFieldsHelper; } /* * (non-PHPdoc) * @see \Symfony\Component\DependencyInjection\ContainerAwareInterface::setContainer() */ public function setContainer(ContainerInterface $container = null) { $this->container = $container; } /* * (non-PHPdoc) * @see Twig_Extension::getFunctions() */ public function getFunctions() { return [ new TwigFunction('chill_custom_field_widget', array( $this, 'renderWidget' ), array( 'is_safe' => array( 'html' ) )), new TwigFunction('chill_custom_field_label', array( $this, 'renderLabel' ), array( 'is_safe' => array( 'html' ) )), new TwigFunction('chill_custom_field_is_empty', array( $this, 'isEmptyValue' )) ]; } public function isEmptyValue($fields, CustomField $customField) { return $this->customFieldsHelper ->isEmptyValue($fields, $customField); } /* (non-PHPdoc) * @see Twig_ExtensionInterface::getName() */ public function getName() { return 'chill_custom_fields_rendering'; } /** * Twig Extension that is used to render the label of a custom field. * * @param CustomField $customField Either a customField OR a customizable_entity OR the FQDN of the entity * @param array $params The parameters for rendering. Currently, 'label_layout' allow to choose a different label. Default is 'ChillCustomFieldsBundle:CustomField:render_label.html.twig' * @return string HTML representation of the custom field label. */ public function renderLabel(CustomField $customField, array $params = array()) { $resolvedParams = array_merge($this->defaultParams, $params); return $this->container->get('templating') ->render($resolvedParams['label_layout'], array('customField' => $customField)); } /** * Twig extension that is used to render the value of a custom field. * * The presentation of the value is influenced by the document type. * * @param array $fields The array raw, as stored in the db * @param CustomField $customField Either a customField OR a customizable_entity OR the FQDN of the entity * @param string $documentType The type of the document (csv, html) * @param string $slug The slug of the custom field ONLY necessary if the first argument is NOT a CustomField instance * @return string HTML representation of the custom field value, as described in the CustomFieldInterface. Is HTML safe */ public function renderWidget(array $fields, CustomField $customField, $documentType='html') { return $this->customFieldsHelper ->renderCustomField($fields, $customField, $documentType); } }