diff --git a/datamodels/2.x/itop-portal-base/portal/src/forms/objectformmanager.class.inc.php b/datamodels/2.x/itop-portal-base/portal/src/forms/objectformmanager.class.inc.php
index 305c1296e..5daf17c47 100644
--- a/datamodels/2.x/itop-portal-base/portal/src/forms/objectformmanager.class.inc.php
+++ b/datamodels/2.x/itop-portal-base/portal/src/forms/objectformmanager.class.inc.php
@@ -357,6 +357,7 @@ class ObjectFormManager extends FormManager
{
// Creating sandbox twig env. to load and test the custom form template
$oTwig = new \Twig_Environment(new \Twig_Loader_String());
+ ApplicationHelper::RegisterTwigExtensions($oTwig);
$sRendered = $oTwig->render($this->aFormProperties['layout']['content'], array('oRenderer' => $this->oRenderer, 'oObject' => $this->oObject));
}
else
@@ -366,7 +367,8 @@ class ObjectFormManager extends FormManager
// Parsing rendered template to find the fields
$oHtmlDocument = new \DOMDocument();
- $oHtmlDocument->loadHTML('' . $sRendered . '');
+ // Note: Loading as XML instead of HTML avoid some encoding issues (eg. 'é' was transformed to '˜©')
+ $oHtmlDocument->loadXML('' . $sRendered . '');
// Adding fields to the list
$oXPath = new \DOMXPath($oHtmlDocument);
diff --git a/datamodels/2.x/itop-portal-base/portal/src/helpers/applicationhelper.class.inc.php b/datamodels/2.x/itop-portal-base/portal/src/helpers/applicationhelper.class.inc.php
index 403a9a319..72bf34328 100644
--- a/datamodels/2.x/itop-portal-base/portal/src/helpers/applicationhelper.class.inc.php
+++ b/datamodels/2.x/itop-portal-base/portal/src/helpers/applicationhelper.class.inc.php
@@ -25,6 +25,7 @@ use \Symfony\Component\Debug\ErrorHandler;
//use \Symfony\Component\Debug\ExceptionHandler;
use \Combodo\iTop\Portal\Handler\ExceptionHandler;
use \Symfony\Component\HttpFoundation\Request;
+use \Twig_Environment;
use \Twig_SimpleFilter;
use \Dict;
use \utils;
@@ -192,13 +193,13 @@ class ApplicationHelper
* Registers Twig extensions such as filters or functions.
* It allows us to access some stuff directly in twig.
*
- * @param \Silex\Application $oApp
+ * @param \Twig_Environment $oTwigEnv
*/
- static function RegisterTwigExtensions(Application $oApp)
+ static function RegisterTwigExtensions(Twig_Environment &$oTwigEnv)
{
// A filter to translate a string via the Dict::S function
// Usage in twig : {{ 'String:ToTranslate'|dict_s }}
- $oApp['twig']->addFilter(new Twig_SimpleFilter('dict_s', function($sStringCode, $sDefault = null, $bUserLanguageOnly = false)
+ $oTwigEnv->addFilter(new Twig_SimpleFilter('dict_s', function($sStringCode, $sDefault = null, $bUserLanguageOnly = false)
{
return Dict::S($sStringCode, $sDefault, $bUserLanguageOnly);
})
@@ -206,7 +207,7 @@ class ApplicationHelper
// A filter to format a string via the Dict::Format function
// Usage in twig : {{ 'String:ToTranslate'|dict_format() }}
- $oApp['twig']->addFilter(new Twig_SimpleFilter('dict_format', function($sStringCode, $sParam01 = null, $sParam02 = null, $sParam03 = null, $sParam04 = null)
+ $oTwigEnv->addFilter(new Twig_SimpleFilter('dict_format', function($sStringCode, $sParam01 = null, $sParam02 = null, $sParam03 = null, $sParam04 = null)
{
return Dict::Format($sStringCode, $sParam01, $sParam02, $sParam03, $sParam04);
})
@@ -214,19 +215,19 @@ class ApplicationHelper
// Filters to enable base64 encode/decode
// Usage in twig : {{ 'String to encode'|base64_encode }}
- $oApp['twig']->addFilter(new Twig_SimpleFilter('base64_encode', 'base64_encode'));
- $oApp['twig']->addFilter(new Twig_SimpleFilter('base64_decode', 'base64_decode'));
+ $oTwigEnv->addFilter(new Twig_SimpleFilter('base64_encode', 'base64_encode'));
+ $oTwigEnv->addFilter(new Twig_SimpleFilter('base64_decode', 'base64_decode'));
// Filters to enable json decode (encode already exists)
// Usage in twig : {{ aSomeArray|json_decode }}
- $oApp['twig']->addFilter(new Twig_SimpleFilter('json_decode', function($sJsonString, $bAssoc = false)
+ $oTwigEnv->addFilter(new Twig_SimpleFilter('json_decode', function($sJsonString, $bAssoc = false)
{
return json_decode($sJsonString, $bAssoc);
})
);
// Filter to add itopversion to an url
- $oApp['twig']->addFilter(new Twig_SimpleFilter('add_itop_version', function($sUrl)
+ $oTwigEnv->addFilter(new Twig_SimpleFilter('add_itop_version', function($sUrl)
{
if (strpos($sUrl, '?') === false)
{
@@ -1084,5 +1085,3 @@ class ApplicationHelper
}
}
-
-?>
\ No newline at end of file
diff --git a/datamodels/2.x/itop-portal-base/portal/web/index.php b/datamodels/2.x/itop-portal-base/portal/web/index.php
index c7531bb62..a859b21a8 100644
--- a/datamodels/2.x/itop-portal-base/portal/web/index.php
+++ b/datamodels/2.x/itop-portal-base/portal/web/index.php
@@ -101,7 +101,7 @@ ApplicationHelper::LoadRouters();
ApplicationHelper::RegisterRoutes($oApp);
ApplicationHelper::LoadBricks();
ApplicationHelper::LoadFormManagers();
-ApplicationHelper::RegisterTwigExtensions($oApp);
+ApplicationHelper::RegisterTwigExtensions($oApp['twig']);
// Loading portal configuration from the module design
ApplicationHelper::LoadPortalConfiguration($oApp);