diff --git a/config.json b/config.json
index 058d3cf..1a7211b 100644
--- a/config.json
+++ b/config.json
@@ -1,5 +1,5 @@
{
- "version": "1.0.1",
+ "version": "1.1.0",
"name": "Enhance.name",
"description": "Enhance.description",
"authors": [
diff --git a/enhance.php b/enhance.php
index 2de77c2..0224f26 100644
--- a/enhance.php
+++ b/enhance.php
@@ -143,7 +143,7 @@ public function manageEditRow($module_row, array &$vars)
*/
public function addModuleRow(array &$vars)
{
- $meta_fields = ['server_label', 'hostname', 'org_id', 'api_token'];
+ $meta_fields = ['server_label', 'hostname', 'org_id', 'api_token', 'name_servers'];
$encrypted_fields = [];
// Set unset checkboxes
@@ -189,7 +189,7 @@ public function addModuleRow(array &$vars)
*/
public function editModuleRow($module_row, array &$vars)
{
- $meta_fields = ['server_label','hostname','org_id','api_token'];
+ $meta_fields = ['server_label','hostname','org_id','api_token','name_servers'];
$encrypted_fields = [];
$this->Input->setRules($this->getRowRules($vars));
@@ -255,6 +255,16 @@ private function getRowRules(&$vars)
],
'message' => Language::_('Enhance.!error.api_token.valid', true)
]
+ ],
+ 'name_servers' => [
+ 'count' => [
+ 'rule' => [[$this, 'validateNameServerCount']],
+ 'message' => Language::_('Enhance.!error.name_servers.count', true)
+ ],
+ 'format' => [
+ 'rule' => [[$this, 'validateNameServers']],
+ 'message' => Language::_('Enhance.!error.name_servers.format', true)
+ ]
]
];
@@ -273,6 +283,36 @@ public function validateHostName($host_name)
return $validator->isDomain($host_name) || $validator->isIp($host_name);
}
+ /**
+ * Validates that at least 2 name servers are set in the given array of name servers.
+ *
+ * @param array $name_servers An array of name servers
+ * @return bool True if the array count is >= 2, false otherwise
+ */
+ public function validateNameServerCount($name_servers)
+ {
+ return is_array($name_servers) && count($name_servers) >= 2;
+ }
+
+ /**
+ * Validates that the given name servers are formatted correctly.
+ *
+ * @param array $name_servers An array of name servers
+ * @return bool True if every name server is formatted correctly, false otherwise
+ */
+ public function validateNameServers($name_servers)
+ {
+ if (is_array($name_servers)) {
+ foreach ($name_servers as $name_server) {
+ if (!$this->validateHostName($name_server)) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
/**
* Validates the API connection
*
diff --git a/language/en_us/enhance.php b/language/en_us/enhance.php
index 3bcdb18..aec4b31 100644
--- a/language/en_us/enhance.php
+++ b/language/en_us/enhance.php
@@ -44,11 +44,23 @@
// Add row
$lang['Enhance.add_row.box_title'] = 'Enhance - Add Server';
$lang['Enhance.add_row.add_btn'] = 'Add Server';
+$lang['Enhance.add_row.name_servers_title'] = 'Name Servers';
+$lang['Enhance.add_row.name_server_btn'] = 'Add Additional Name Server';
+$lang['Enhance.add_row.name_server_col'] = 'Name Server';
+$lang['Enhance.add_row.name_server_host_col'] = 'Hostname';
+$lang['Enhance.add_row.name_server'] = 'Name server %1$s'; // %1$s is the name server number (e.g. 3)
+$lang['Enhance.add_row.remove_name_server'] = 'Remove';
// Edit row
$lang['Enhance.edit_row.box_title'] = 'Enhance - Edit Server';
$lang['Enhance.edit_row.edit_btn'] = 'Update Server';
+$lang['Enhance.edit_row.name_servers_title'] = 'Name Servers';
+$lang['Enhance.edit_row.name_server_btn'] = 'Add Additional Name Server';
+$lang['Enhance.edit_row.name_server_col'] = 'Name Server';
+$lang['Enhance.edit_row.name_server_host_col'] = 'Hostname';
+$lang['Enhance.edit_row.name_server'] = 'Name server %1$s'; // %1$s is the name server number (e.g. 3)
+$lang['Enhance.edit_row.remove_name_server'] = 'Remove';
// Row meta
@@ -64,6 +76,8 @@
$lang['Enhance.!error.org_id.empty'] = 'Please enter an organization ID.';
$lang['Enhance.!error.api_token.empty'] = 'Please enter an API token.';
$lang['Enhance.!error.api_token.valid'] = 'Unable to connect to the Enhance server. Please verify your API credentials.';
+$lang['Enhance.!error.name_servers.count'] = 'You must define at least 2 name servers.';
+$lang['Enhance.!error.name_servers.format'] = 'One or more of the name servers entered are invalid.';
$lang['Enhance.!error.module_row.missing'] = 'An internal error occurred. The module row is unavailable.';
$lang['Enhance.!error.domain.format'] = 'Please enter a valid domain name.';
$lang['Enhance.!error.username.format'] = 'The username may contain only letters, numbers, dashes, and underscores and must be between 3 and 16 characters in length.';
diff --git a/views/default/add_row.pdt b/views/default/add_row.pdt
index 48b3076..d0f0a59 100644
--- a/views/default/add_row.pdt
+++ b/views/default/add_row.pdt
@@ -35,6 +35,38 @@
+
+
_('Enhance.add_row.name_servers_title');?>
+
+
+
+
+
+
+ | Form->label($this->_('Enhance.add_row.name_server_col', true));?> |
+ Form->label($this->_('Enhance.add_row.name_server_host_col', true));?> |
+ |
+
+
+
+ name_servers ?? []);
+ for ($i = 0; $i < max(2, $num_servers); $i++) {
+ ?>
+
+ | _('Enhance.add_row.name_server', false, '' . ($i + 1) . '');?> |
+ Form->fieldText('name_servers[]', $vars->name_servers[$i] ?? null, ['class' => 'block']);?> |
+ _('Enhance.add_row.remove_name_server');?> |
+
+
+
+
+
+
Form->fieldSubmit('save', $this->_('Enhance.add_row.add_btn', true), ['class' => 'btn btn-primary pull-right']);
@@ -46,3 +78,41 @@
Widget->end();
+ ?>
+
diff --git a/views/default/edit_row.pdt b/views/default/edit_row.pdt
index 7d82d32..46e3d90 100644
--- a/views/default/edit_row.pdt
+++ b/views/default/edit_row.pdt
@@ -36,6 +36,38 @@
+
+
_('Enhance.edit_row.name_servers_title');?>
+
+
+
+
+
+
+ | Form->label($this->_('Enhance.edit_row.name_server_col', true));?> |
+ Form->label($this->_('Enhance.edit_row.name_server_host_col', true));?> |
+ |
+
+
+
+ name_servers ?? []);
+ for ($i = 0; $i < max(2, $num_servers); $i++) {
+ ?>
+
+ | _('Enhance.edit_row.name_server', false, '' . ($i + 1) . '');?> |
+ Form->fieldText('name_servers[]', $vars->name_servers[$i] ?? null, ['class' => 'block']);?> |
+ _('Enhance.edit_row.remove_name_server');?> |
+
+
+
+
+
+
Form->fieldSubmit('save', $this->_('Enhance.edit_row.edit_btn', true), ['class' => 'btn btn-primary pull-right']);
@@ -47,3 +79,41 @@
Widget->end();
+ ?>
+