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');?>

+
+
+ + + + + + + + + + + name_servers ?? []); + for ($i = 0; $i < max(2, $num_servers); $i++) { + ?> + + + + + + + +
Form->label($this->_('Enhance.add_row.name_server_col', true));?>Form->label($this->_('Enhance.add_row.name_server_host_col', true));?>
_('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');?>

+
+
+ + + + + + + + + + + name_servers ?? []); + for ($i = 0; $i < max(2, $num_servers); $i++) { + ?> + + + + + + + +
Form->label($this->_('Enhance.edit_row.name_server_col', true));?>Form->label($this->_('Enhance.edit_row.name_server_host_col', true));?>
_('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(); + ?> +