From 5a76b5a5a7e5e6707daec5cf5afb89677d814af4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=B4me=20Chilliet?= <come@opensides.be>
Date: Wed, 20 Dec 2017 11:17:28 +0100
Subject: [PATCH] :sparkles: feat(templates): Allow to use special caller*
 attributes in templates

issue #5745
---
 include/class_template.inc         | 9 ++++++++-
 include/class_templateHandling.inc | 4 ++--
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/include/class_template.inc b/include/class_template.inc
index 46037cdb0..12e49848a 100644
--- a/include/class_template.inc
+++ b/include/class_template.inc
@@ -35,6 +35,8 @@ class template
 
   protected $applied = FALSE;
 
+  static protected $uiSpecialAttributes = array('dn','cn','uid','sn','givenName');
+
   static function plInfo()
   {
     return array(
@@ -268,7 +270,12 @@ class template
     }
     unset($array);
 
-    $this->attrs = templateHandling::parseArray($this->attrs);
+    $ui           = get_userinfo();
+    $specialAttrs = array();
+    foreach (static::$uiSpecialAttributes as $attr) {
+      $specialAttrs['caller'.strtoupper($attr)] = $ui->$attr;
+    }
+    $this->attrs = templateHandling::parseArray($this->attrs, $specialAttrs);
     $this->tabObject->adapt_from_template($this->attrs, call_user_func_array('array_merge', $this->attributes));
 
     $this->applied = TRUE;
diff --git a/include/class_templateHandling.inc b/include/class_templateHandling.inc
index 7ee22cd7f..731aca9e0 100644
--- a/include/class_templateHandling.inc
+++ b/include/class_templateHandling.inc
@@ -187,7 +187,7 @@ class templateHandling
    *
    * \return array An array with the final values of attributes
    */
-  public static function parseArray(array $attrs)
+  public static function parseArray(array $attrs, array $specialAttrs)
   {
     foreach ($attrs as &$attr) {
       if (is_array($attr)) {
@@ -195,7 +195,7 @@ class templateHandling
           if (!is_numeric($key)) {
             continue;
           }
-          $string = static::parseString($string, $attrs);
+          $string = static::parseString($string, array_merge($attrs, $specialAttrs));
         }
         unset($string);
       }
-- 
GitLab