Successful build of server. Ready for testing.
This commit is contained in:
@@ -7,81 +7,117 @@ if (!defined("WHMCS")) {
|
||||
die("This file cannot be accessed directly");
|
||||
}
|
||||
|
||||
if (!function_exists('add_hook_os_templates')) {
|
||||
/**
|
||||
* @param array $vars
|
||||
* @return array|null
|
||||
* @throws JsonException
|
||||
*/
|
||||
function add_hook_os_templates(array $vars): ?array
|
||||
{
|
||||
if (!isset($vars['productinfo']['module']) || $vars['productinfo']['module'] !== 'VirtFusionDirect') {
|
||||
return null;
|
||||
}
|
||||
|
||||
$cs = new ConfigureService();
|
||||
|
||||
$templates_data = $cs->fetchTemplates(
|
||||
$cs->fetchPackageByDbId($vars['productinfo']['pid']) ?? $cs->fetchPackageId($vars['productinfo']['name'])
|
||||
);
|
||||
|
||||
if (empty($templates_data)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$dropdownOptions = [];
|
||||
|
||||
foreach ($templates_data['data'] as $osCategory) {
|
||||
foreach ($osCategory['templates'] as $template) {
|
||||
$optionValue = $template['id'];
|
||||
$optionLabel = $template['name'] . " " . $template['version'] . " " . $template['variant'];
|
||||
$dropdownOptions[] = ['id' => $optionValue, 'name' => $optionLabel];
|
||||
}
|
||||
}
|
||||
|
||||
// Sort dropdownOptions alphabetically by the 'name' key
|
||||
usort($dropdownOptions, function ($a, $b) {
|
||||
return strcmp($a['name'], $b['name']);
|
||||
});
|
||||
|
||||
$osTemplates = [
|
||||
'id' => 'os_template',
|
||||
'optionname' => 'Initial Operating System',
|
||||
'optiontype' => 1,
|
||||
'options' => $dropdownOptions,
|
||||
'selectedvalue' => ''
|
||||
];
|
||||
|
||||
$sshKeys = $cs->getUserSshKeys($vars['loggedinuser']);
|
||||
|
||||
$sshKeysOptions = [
|
||||
'id' => 'ssh_key',
|
||||
'optionname' => 'Initial SSH Key',
|
||||
'optiontype' => 1,
|
||||
'options' => array_map(function ($sshKey) {
|
||||
if ($sshKey['enabled'] === false) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return [
|
||||
'id' => $sshKey['id'],
|
||||
'name' => $sshKey['name']
|
||||
];
|
||||
}, $sshKeys['data'] ?? []),
|
||||
'selectedvalue' => ''
|
||||
];
|
||||
|
||||
$configurableoptions = $vars['configurableoptions'];
|
||||
array_push(
|
||||
$configurableoptions,
|
||||
$osTemplates,
|
||||
$sshKeysOptions
|
||||
);
|
||||
|
||||
return [
|
||||
'configurableoptions' => $configurableoptions,
|
||||
];
|
||||
add_hook('ClientAreaFooterOutput', 1, function ($vars) {
|
||||
if (!isset($vars['productinfo']['module']) || $vars['productinfo']['module'] !== 'VirtFusionDirect') {
|
||||
return null;
|
||||
}
|
||||
|
||||
add_hook('ClientAreaPageCart', 1, 'add_hook_os_templates');
|
||||
}
|
||||
$cs = new ConfigureService();
|
||||
|
||||
$templates_data = $cs->fetchTemplates(
|
||||
$cs->fetchPackageByDbId($vars['productinfo']['pid']) ?? $cs->fetchPackageId($vars['productinfo']['name'])
|
||||
);
|
||||
|
||||
if (empty($templates_data)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$dropdownOptions = [];
|
||||
|
||||
foreach ($templates_data['data'] as $osCategory) {
|
||||
foreach ($osCategory['templates'] as $template) {
|
||||
$optionValue = $template['id'];
|
||||
$optionLabel = $template['name'] . " " . $template['version'] . " " . $template['variant'];
|
||||
$dropdownOptions[] = ['id' => $optionValue, 'name' => $optionLabel];
|
||||
}
|
||||
}
|
||||
|
||||
// Sort dropdownOptions alphabetically by the 'name' key
|
||||
usort($dropdownOptions, function ($a, $b) {
|
||||
return strcmp($a['name'], $b['name']);
|
||||
});
|
||||
|
||||
$sshKeys = $cs->getUserSshKeys($vars['loggedinuser']);
|
||||
$sshKeysOptions = array_map(function ($sshKey) {
|
||||
if ($sshKey['enabled'] === false) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return [
|
||||
'id' => $sshKey['id'],
|
||||
'name' => $sshKey['name']
|
||||
];
|
||||
}, $sshKeys['data'] ?? []);
|
||||
|
||||
$osID = array_values(array_filter(array_map(function ($option) {
|
||||
if ($option['textid'] === 'initialoperatingsystem') {
|
||||
return $option['id'];
|
||||
}
|
||||
}, $vars['customfields'])));
|
||||
|
||||
$sshID = array_values(array_filter(array_map(function ($option) {
|
||||
if ($option['textid'] === 'initialsshkey') {
|
||||
return $option['id'];
|
||||
}
|
||||
}, $vars['customfields'])));
|
||||
|
||||
// Construct the JavaScript code
|
||||
return "
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var osTemplates = " . json_encode($dropdownOptions) . ";
|
||||
var sshKeys = " . json_encode($sshKeysOptions) . ";
|
||||
|
||||
var osInputField = document.querySelector('[name=\"customfield[" . ($osID[0] ?? null) . "]\"]');
|
||||
var sshInputField = document.querySelector('[name=\"customfield[" . ($sshID[0] ?? null) . "]\"]');
|
||||
|
||||
// Create dropdown options menu, then add it to the DOM then on change, update the regular input.
|
||||
var osSelect = document.createElement('select');
|
||||
osSelect.className = 'form-control';
|
||||
|
||||
osTemplates.forEach(function(template) {
|
||||
var option = document.createElement('option');
|
||||
option.value = template.id;
|
||||
option.text = template.name;
|
||||
osSelect.appendChild(option);
|
||||
});
|
||||
|
||||
// Set the default value of the input field to the first option in the dropdown.
|
||||
osInputField.value = osSelect.options[0].value;
|
||||
|
||||
osSelect.addEventListener('change', function() {
|
||||
osInputField.value = this.value;
|
||||
console.log(this.value);
|
||||
});
|
||||
|
||||
osInputField.parentNode.insertBefore(osSelect, osInputField.nextSibling);
|
||||
osInputField.style.display = 'none';
|
||||
|
||||
if (sshKeys.length > 0) {
|
||||
// Create dropdown options menu, then add it to the DOM then on change, update the regular input.
|
||||
var sshSelect = document.createElement('select');
|
||||
sshSelect.className = 'form-control';
|
||||
|
||||
sshKeys.forEach(function(sshkey) {
|
||||
var option = document.createElement('option');
|
||||
option.value = sshkey.id;
|
||||
option.text = sshkey.name;
|
||||
sshSelect.appendChild(option);
|
||||
});
|
||||
|
||||
// Set the default value of the input field to the first option in the dropdown.
|
||||
sshInputField.value = sshSelect.options[0].value;
|
||||
|
||||
sshSelect.addEventListener('change', function() {
|
||||
sshInputField.value = this.value;
|
||||
});
|
||||
|
||||
sshInputField.parentNode.insertBefore(sshSelect, sshInputField.nextSibling);
|
||||
sshInputField.style.display = 'none';
|
||||
} else {
|
||||
sshInputField.style.display = 'none';
|
||||
}
|
||||
});
|
||||
</script>
|
||||
";
|
||||
});
|
||||
Reference in New Issue
Block a user