diff --git a/enhance.php b/enhance.php index bb18018..6c9721b 100644 --- a/enhance.php +++ b/enhance.php @@ -160,7 +160,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 @@ -206,7 +206,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)); @@ -272,6 +272,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) + ] ] ]; @@ -290,6 +300,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 23f0a79..1e1f1cf 100644 --- a/language/en_us/enhance.php +++ b/language/en_us/enhance.php @@ -47,11 +47,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 @@ -67,6 +79,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 05e1789..eb22cd4 100644 --- a/views/default/add_row.pdt +++ b/views/default/add_row.pdt @@ -53,6 +53,41 @@ $this->Widget->create($this->_('Enhance.add_row.box_title', true)); ]); ?> +
_('Enhance.add_row.name_servers_title'); ?>
+ +
+ + + + + + + + + + name_servers ?? []); + for ($i = 0; $i < max(2, $num_servers); $i++) { + ?> + + + + + + + +
_('Enhance.add_row.name_server_col'); ?>_('Enhance.add_row.name_server_host_col'); ?>
_('Enhance.add_row.name_server', false, '' . ($i + 1) . ''); ?>Form->fieldText('name_servers[]', $vars->name_servers[$i] ?? null, ['class' => 'form-control']); ?> + +
+
+ _( + 'Enhance.add_row.name_server_btn', + ); ?> + Widget->footer(); ?>
Form->fieldSubmit('save', $this->_('Enhance.add_row.add_btn', true), [ @@ -63,3 +98,33 @@ $this->Widget->create($this->_('Enhance.add_row.box_title', true)); Widget->end(); ?> Form->end(); ?> + + diff --git a/views/default/edit_row.pdt b/views/default/edit_row.pdt index a73213a..8ab2208 100644 --- a/views/default/edit_row.pdt +++ b/views/default/edit_row.pdt @@ -53,6 +53,41 @@ $this->Widget->create($this->_('Enhance.edit_row.box_title', true)); ]); ?>
+
_('Enhance.edit_row.name_servers_title'); ?>
+ +
+ + + + + + + + + + name_servers ?? []); + for ($i = 0; $i < max(2, $num_servers); $i++) { + ?> + + + + + + + +
_('Enhance.edit_row.name_server_col'); ?>_('Enhance.edit_row.name_server_host_col'); ?>
_('Enhance.edit_row.name_server', false, '' . ($i + 1) . ''); ?>Form->fieldText('name_servers[]', $vars->name_servers[$i] ?? null, ['class' => 'form-control']); ?> + +
+
+ _( + 'Enhance.edit_row.name_server_btn', + ); ?> + Widget->footer(); ?>
Form->fieldSubmit('save', $this->_('Enhance.edit_row.edit_btn', true), [ @@ -63,3 +98,34 @@ $this->Widget->create($this->_('Enhance.edit_row.box_title', true)); Widget->end(); ?> Form->end(); ?> + +