diff --git a/src/fields/Table.php b/src/fields/Table.php index 0bf3a50ecf1..7cbb94ca73a 100644 --- a/src/fields/Table.php +++ b/src/fields/Table.php @@ -15,9 +15,12 @@ use craft\helpers\DateTimeHelper; use craft\helpers\Json; use craft\validators\ColorValidator; +use craft\validators\UrlValidator; use craft\web\assets\tablesettings\TableSettingsAsset; use craft\web\assets\timepicker\TimepickerAsset; use yii\db\Schema; +use yii\validators\Validator; +use yii\validators\EmailValidator; /** * Table represents a Table field. @@ -183,11 +186,13 @@ public function getSettingsHtml() 'color' => Craft::t('app', 'Color'), 'date' => Craft::t('app', 'Date'), 'select' => Craft::t('app', 'Dropdown'), + 'email' => Craft::t('app', 'Email'), 'lightswitch' => Craft::t('app', 'Lightswitch'), 'multiline' => Craft::t('app', 'Multi-line text'), 'number' => Craft::t('app', 'Number'), 'singleline' => Craft::t('app', 'Single-line text'), 'time' => Craft::t('app', 'Time'), + 'url' => Craft::t('app', 'URL'), ]; // Make sure they are sorted alphabetically (post-translation) @@ -438,12 +443,25 @@ private function _normalizeCellValue(string $type, $value) */ private function _validateCellValue(string $type, $value, string &$error = null): bool { - if ($type === 'color' && $value !== null) { + if (!$value) { + return true; + } + + $validator = null; + + if ($type === 'color') { /** @var ColorData $value */ + $value = $value->getHex(); $validator = new ColorValidator(); + } elseif ($type === 'url') { + $validator = new UrlValidator(); + } elseif ($type === 'email') { + $validator = new EmailValidator(); + } + + if ($validator instanceof Validator) { $validator->message = str_replace('{attribute}', '{value}', $validator->message); - $hex = $value->getHex(); - return $validator->validate($hex, $error); + return $validator->validate($value, $error); } return true; diff --git a/src/templates/_includes/forms/editableTable.html b/src/templates/_includes/forms/editableTable.html index 377e271fc0e..70071e2cfd4 100644 --- a/src/templates/_includes/forms/editableTable.html +++ b/src/templates/_includes/forms/editableTable.html @@ -47,7 +47,7 @@ {% else %} {% set hasErrors = cell.hasErrors ?? false %} {% set cellName = name~'['~rowId~']['~colId~']' %} - {% set textual = (col.type in ['color', 'date', 'multiline', 'number', 'singleline', 'template', 'time']) %} + {% set textual = (col.type in ['color', 'date', 'email', 'multiline', 'number', 'singleline', 'template', 'time', 'url']) %} {% set isCode = col.code is defined or col.type == 'color' %} {% block tablecell %} @@ -94,6 +94,14 @@ value: value, disabled: static } only %} + {%- case 'email' or 'url' -%} + {% include "_includes/forms/text" with { + type: col.type, + name: cellName, + placeholder: col.placeholder ?? null, + value: value, + disabled: static + } only %} {%- case 'template' -%} {% include "_includes/forms/autosuggest" with { name: cellName,