From df4cad3ff1f7f6dde07decf1fd5976f9945e9c19 Mon Sep 17 00:00:00 2001 From: Guillaume Lajarige Date: Tue, 8 Aug 2017 11:59:53 +0000 Subject: [PATCH] =?UTF-8?q?N=C2=B0844=20Portal:=20ExternalField=20support?= =?UTF-8?q?=20in=20forms=20has=20been=20improved.=20For=20example,=20email?= =?UTF-8?q?=20and=20url=20links=20were=20not=20displayed=20as=20proper=20H?= =?UTF-8?q?TML.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SVN:trunk[4854] --- core/attributedef.class.inc.php | 19 ++++---- sources/autoload.php | 1 + sources/form/field/emailfield.class.inc.php | 43 +++++++++++++++++++ .../bootstrap/bsformrenderer.class.inc.php | 1 + .../bssimplefieldrenderer.class.inc.php | 7 ++- 5 files changed, 61 insertions(+), 10 deletions(-) create mode 100644 sources/form/field/emailfield.class.inc.php diff --git a/core/attributedef.class.inc.php b/core/attributedef.class.inc.php index c7c9ebaa8..4acba369f 100644 --- a/core/attributedef.class.inc.php +++ b/core/attributedef.class.inc.php @@ -3331,6 +3331,11 @@ class AttributeEmailAddress extends AttributeString return $this->GetOptional('validation_pattern', '^'.utils::GetConfig()->Get('email_validation_pattern').'$'); } + static public function GetFormFieldClass() + { + return '\\Combodo\\iTop\\Form\\Field\\EmailField'; + } + public function GetAsHTML($sValue, $oHostObject = null, $bLocalize = true) { if (empty($sValue)) return ''; @@ -5078,19 +5083,15 @@ class AttributeExternalField extends AttributeDefinition { if ($oFormField === null) { - $sFormFieldClass = static::GetFormFieldClass(); + // ExternalField's FormField are actually based on the FormField from the target attribute. + $oRemoteAttDef = $this->GetExtAttDef(); + $sFormFieldClass = $oRemoteAttDef::GetFormFieldClass(); $oFormField = new $sFormFieldClass($this->GetCode()); } parent::MakeFormField($oObject, $oFormField); - // Note : As of today, this attribute is -by nature- only supported in readonly mode, not edition - $sAttCode = $this->GetCode(); - $sAttCodeFriendlyname = $sAttCode . '_friendlyname'; - if ($this->IsExternalKey(EXTKEY_ABSOLUTE) && MetaModel::IsValidAttCode(get_class($oObject), $sAttCodeFriendlyname)) - { - $sAttCode = $sAttCodeFriendlyname; - } - $oFormField->SetCurrentValue(html_entity_decode($oObject->GetAsHTML($sAttCode), ENT_QUOTES, 'UTF-8')); + // Readonly field because we can't update external fields + $oFormField->SetReadOnly(true); return $oFormField; } diff --git a/sources/autoload.php b/sources/autoload.php index 9dd228f55..69da065be 100644 --- a/sources/autoload.php +++ b/sources/autoload.php @@ -32,6 +32,7 @@ require_once APPROOT . 'sources/form/field/hiddenfield.class.inc.php'; require_once APPROOT . 'sources/form/field/labelfield.class.inc.php'; require_once APPROOT . 'sources/form/field/stringfield.class.inc.php'; require_once APPROOT . 'sources/form/field/urlfield.class.inc.php'; +require_once APPROOT . 'sources/form/field/emailfield.class.inc.php'; require_once APPROOT . 'sources/form/field/passwordfield.class.inc.php'; require_once APPROOT . 'sources/form/field/datetimefield.class.inc.php'; require_once APPROOT . 'sources/form/field/durationfield.class.inc.php'; diff --git a/sources/form/field/emailfield.class.inc.php b/sources/form/field/emailfield.class.inc.php new file mode 100644 index 000000000..7994941b1 --- /dev/null +++ b/sources/form/field/emailfield.class.inc.php @@ -0,0 +1,43 @@ + + +namespace Combodo\iTop\Form\Field; + +use \Str; +use \Combodo\iTop\Form\Field\StringField; + +/** + * Description of EmailField + * + * @author Guillaume Lajarige + */ +class EmailField extends StringField +{ + public function GetDisplayValue() + { + $sLabel = Str::pure2html($this->currentValue); + if (strlen($sLabel) > 128) + { + // Truncate the length to 128 characters, by removing the middle + $sLabel = substr($sLabel, 0, 100).'.....'.substr($sLabel, -20); + } + + return "currentValue\">$sLabel"; + } +} diff --git a/sources/renderer/bootstrap/bsformrenderer.class.inc.php b/sources/renderer/bootstrap/bsformrenderer.class.inc.php index c44236cdd..45a436e07 100644 --- a/sources/renderer/bootstrap/bsformrenderer.class.inc.php +++ b/sources/renderer/bootstrap/bsformrenderer.class.inc.php @@ -45,6 +45,7 @@ class BsFormRenderer extends FormRenderer $this->AddSupportedField('PasswordField', 'BsSimpleFieldRenderer'); $this->AddSupportedField('StringField', 'BsSimpleFieldRenderer'); $this->AddSupportedField('UrlField', 'BsSimpleFieldRenderer'); + $this->AddSupportedField('EmailField', 'BsSimpleFieldRenderer'); $this->AddSupportedField('TextAreaField', 'BsSimpleFieldRenderer'); $this->AddSupportedField('CaseLogField', 'BsSimpleFieldRenderer'); $this->AddSupportedField('SelectField', 'BsSimpleFieldRenderer'); diff --git a/sources/renderer/bootstrap/fieldrenderer/bssimplefieldrenderer.class.inc.php b/sources/renderer/bootstrap/fieldrenderer/bssimplefieldrenderer.class.inc.php index e2cfd03ab..65e057f86 100644 --- a/sources/renderer/bootstrap/fieldrenderer/bssimplefieldrenderer.class.inc.php +++ b/sources/renderer/bootstrap/fieldrenderer/bssimplefieldrenderer.class.inc.php @@ -59,6 +59,7 @@ class BsSimpleFieldRenderer extends FieldRenderer case 'Combodo\\iTop\\Form\\Field\\PasswordField': case 'Combodo\\iTop\\Form\\Field\\StringField': case 'Combodo\\iTop\\Form\\Field\\UrlField': + case 'Combodo\\iTop\\Form\\Field\\EmailField': case 'Combodo\\iTop\\Form\\Field\\SelectField': case 'Combodo\\iTop\\Form\\Field\\MultipleSelectField': // Opening container @@ -98,6 +99,7 @@ EOF case 'Combodo\\iTop\\Form\\Field\\StringField': case 'Combodo\\iTop\\Form\\Field\\UrlField': + case 'Combodo\\iTop\\Form\\Field\\EmailField': $oOutput->AddHtml(''); break; @@ -226,6 +228,7 @@ EOF case 'Combodo\\iTop\\Form\\Field\\LabelField': case 'Combodo\\iTop\\Form\\Field\\StringField': case 'Combodo\\iTop\\Form\\Field\\UrlField': + case 'Combodo\\iTop\\Form\\Field\\EmailField': case 'Combodo\\iTop\\Form\\Field\\DateTimeField': case 'Combodo\\iTop\\Form\\Field\\DurationField': // Opening container @@ -243,7 +246,7 @@ EOF $oOutput->AddHtml(''); // Value - $bEncodeHtmlEntities = ($sFieldClass === 'Combodo\\iTop\\Form\\Field\\UrlField') ? false : true; + $bEncodeHtmlEntities = (in_array($sFieldClass, array('Combodo\\iTop\\Form\\Field\\UrlField', 'Combodo\\iTop\\Form\\Field\\EmailField'))) ? false : true; $oOutput->AddHtml('
'); $oOutput->AddHtml('
')->AddHtml($this->oField->GetDisplayValue(), $bEncodeHtmlEntities)->AddHtml('
'); $oOutput->AddHtml('
'); @@ -392,6 +395,7 @@ EOF case 'Combodo\\iTop\\Form\\Field\\PasswordField': case 'Combodo\\iTop\\Form\\Field\\StringField': case 'Combodo\\iTop\\Form\\Field\\UrlField': + case 'Combodo\\iTop\\Form\\Field\\EmailField': case 'Combodo\\iTop\\Form\\Field\\TextAreaField': case 'Combodo\\iTop\\Form\\Field\\CaseLogField': case 'Combodo\\iTop\\Form\\Field\\SelectField': @@ -465,6 +469,7 @@ EOF case 'Combodo\\iTop\\Form\\Field\\PasswordField': case 'Combodo\\iTop\\Form\\Field\\StringField': case 'Combodo\\iTop\\Form\\Field\\UrlField': + case 'Combodo\\iTop\\Form\\Field\\EmailField': case 'Combodo\\iTop\\Form\\Field\\SelectField': case 'Combodo\\iTop\\Form\\Field\\MultipleSelectField': case 'Combodo\\iTop\\Form\\Field\\HiddenField':