From ef5ce6bcfbcbeff7eec9afbbddbd9a88fd47f73b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=B4me=20Chilliet?= <come@opensides.be>
Date: Thu, 18 Oct 2018 13:34:58 +0200
Subject: [PATCH] :ambulance: fix(attributes) Remove form validation attributes
 from template edition

This removes required, pattern and special input types from template
 edition rendering so that masks can be used.

issue #5910
---
 .../attributes/class_IntAttribute.inc         | 11 ++---
 .../attributes/class_StringAttribute.inc      | 44 +++++++++++++------
 2 files changed, 36 insertions(+), 19 deletions(-)

diff --git a/include/simpleplugin/attributes/class_IntAttribute.inc b/include/simpleplugin/attributes/class_IntAttribute.inc
index d54cab6bb..4ee6404f2 100644
--- a/include/simpleplugin/attributes/class_IntAttribute.inc
+++ b/include/simpleplugin/attributes/class_IntAttribute.inc
@@ -120,12 +120,13 @@ class IntAttribute extends Attribute
   function renderTemplateInput ()
   {
     $id = $this->getHtmlId();
-    $display = $this->renderInputField(
-      'text', $id,
-      array(
-        'value' => '{literal}'.htmlentities($this->getValue(), ENT_COMPAT, 'UTF-8').'{/literal}'
-      )
+    $attributes = array(
+      'value' => '{literal}'.htmlentities($this->getValue(), ENT_COMPAT, 'UTF-8').'{/literal}'
     );
+    if ($this->isSubAttribute) {
+      $attributes['class'] = 'subattribute';
+    }
+    $display = $this->renderInputField('text', $id, $attributes);
     return $this->renderAcl($display);
   }
 }
diff --git a/include/simpleplugin/attributes/class_StringAttribute.inc b/include/simpleplugin/attributes/class_StringAttribute.inc
index a51f64068..9ea60c5cb 100644
--- a/include/simpleplugin/attributes/class_StringAttribute.inc
+++ b/include/simpleplugin/attributes/class_StringAttribute.inc
@@ -91,6 +91,22 @@ class StringAttribute extends Attribute
     return $this->renderAcl($display);
   }
 
+  function renderTemplateInput ()
+  {
+    $id = $this->getHtmlId();
+    $attributes = array(
+      'value' => '{literal}'.htmlentities($this->getValue(), ENT_COMPAT, 'UTF-8').'{/literal}'
+    );
+    if ($this->autocomplete !== NULL) {
+      $attributes['autocomplete'] = ($this->autocomplete ? 'on' : 'off' );
+    }
+    if ($this->isSubAttribute) {
+      $attributes['class'] = 'subattribute';
+    }
+    $display  = $this->renderInputField('text', $id, $attributes);
+    return $this->renderAcl($display);
+  }
+
   function fixPostValue ($value)
   {
     /* Replace CRLF by LF, to avoid non-ASCII chars in multiline values (mainly useful for textarea) */
@@ -166,6 +182,17 @@ class TextAreaAttribute extends StringAttribute
                 '{literal}'.htmlentities($this->getValue(), ENT_COMPAT, 'UTF-8').'{/literal}</textarea>';
     return $this->renderAcl($display);
   }
+
+  function renderTemplateInput ()
+  {
+    $id = $this->getHtmlId();
+    $display  = '<textarea name="'.$id.'" id="'.$id.'"'.
+                ($this->disabled ? ' disabled="disabled"' : '').
+                ($this->isSubAttribute ? ' class="subattribute"' : '').
+                '>'.
+                '{literal}'.htmlentities($this->getValue(), ENT_COMPAT, 'UTF-8').'{/literal}</textarea>';
+    return $this->renderAcl($display);
+  }
 }
 
 /*! \brief This class allow to handle easily a String LDAP attribute that contains a password
@@ -174,25 +201,14 @@ class TextAreaAttribute extends StringAttribute
 class PasswordAttribute extends StringAttribute
 {
   protected $autocomplete = FALSE;
+  protected $inputType    = 'password';
 
   function renderFormInput ()
   {
-    $id = $this->getHtmlId();
-    $display  = $this->renderInputField(
-      'password', $id,
-      array(
-        'value' => '{literal}'.htmlentities($this->getValue(), ENT_COMPAT, 'UTF-8').'{/literal}',
-        'autocomplete' => ($this->autocomplete ? 'on' : 'off'),
-      )
-    );
+    $display = parent::renderFormInput();
     if ($this->autocomplete === FALSE) {
       $display = '{literal}<input autocomplete="off" value="foolautocompleteworkaround" type="text" style="display:none;"/>{/literal}'.$display;
     }
-    return $this->renderAcl($display);
-  }
-
-  function renderTemplateInput ()
-  {
-    return parent::renderFormInput();
+    return $display;
   }
 }
-- 
GitLab